From 6c2cc096fbc7d5a1ed02ebaa383853a7b6a69eee Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 19 May 2014 22:24:10 +0400 Subject: deprecation comments generation fixed --- src/de/fernflower/main/ClassWriter.java | 135 ++++++++++++++++---------------- 1 file changed, 69 insertions(+), 66 deletions(-) diff --git a/src/de/fernflower/main/ClassWriter.java b/src/de/fernflower/main/ClassWriter.java index 8c79fa1..a4732f8 100644 --- a/src/de/fernflower/main/ClassWriter.java +++ b/src/de/fernflower/main/ClassWriter.java @@ -346,15 +346,28 @@ public class ClassWriter { } // class annotations - List lstAnn = getAllAnnotations(cl.getAttributes()); - for(AnnotationExprent annexpr : lstAnn) { - if("java/lang/Deprecated".equals(annexpr.getClassname())) { - isDeprecated = false; - } - writer.write(annexpr.toJava(indent)); - writer.newLine(); - } - + boolean hasDeprecatedAnno = false; + List lstAnn = getAllAnnotations(cl.getAttributes()); + for(AnnotationExprent annexpr : lstAnn) { + if("java/lang/Deprecated".equals(annexpr.getClassname())) { + hasDeprecatedAnno = true; + } + } + if ((isDeprecated || hasDeprecatedAnno) && DecompilerContext.getOption(IFernflowerPreferences.DEPRECATED_COMMENT)) { + writer.write(indstr); + writer.write("/** @deprecated */"); + writer.newLine(); + } + if(isDeprecated && !hasDeprecatedAnno) { + writer.write(indstr); + writer.write("@Deprecated"); + writer.newLine(); + } + for(AnnotationExprent annexpr : lstAnn) { + writer.write(annexpr.toJava(indent)); + writer.newLine(); + } + boolean isSynthetic = (flags & CodeConstants.ACC_SYNTHETIC) != 0 || cl.getAttributes().containsKey("Synthetic"); if(isSynthetic) { @@ -362,19 +375,7 @@ public class ClassWriter { writer.write("// $FF: synthetic class"); writer.newLine(); } - - if(isDeprecated) { - if(DecompilerContext.getOption(IFernflowerPreferences.DEPRECATED_COMMENT)) { // special comment for JB - writer.write(indstr); - writer.write("/** @deprecated */"); - writer.newLine(); - } - - writer.write(indstr); - writer.write("@Deprecated"); - writer.newLine(); - } - + writer.write(indstr); if(isEnum) { @@ -488,15 +489,28 @@ public class ClassWriter { boolean isDeprecated = fd.getAttributes().containsKey("Deprecated"); // field annotations - List lstAnn = getAllAnnotations(fd.getAttributes()); - for(AnnotationExprent annexpr : lstAnn) { - if("java/lang/Deprecated".equals(annexpr.getClassname())) { - isDeprecated = false; - } - writer.write(annexpr.toJava(indent)); - writer.newLine(); - } - + boolean hasDeprecatedAnno = false; + List lstAnn = getAllAnnotations(fd.getAttributes()); + for(AnnotationExprent annexpr : lstAnn) { + if("java/lang/Deprecated".equals(annexpr.getClassname())) { + hasDeprecatedAnno = true; + } + } + if ((isDeprecated || hasDeprecatedAnno) && DecompilerContext.getOption(IFernflowerPreferences.DEPRECATED_COMMENT)) { + writer.write(indstr); + writer.write("/** @deprecated */"); + writer.newLine(); + } + if(isDeprecated && !hasDeprecatedAnno) { + writer.write(indstr); + writer.write("@Deprecated"); + writer.newLine(); + } + for(AnnotationExprent annexpr : lstAnn) { + writer.write(annexpr.toJava(indent)); + writer.newLine(); + } + boolean isSynthetic = (flags & CodeConstants.ACC_SYNTHETIC) != 0 || fd.getAttributes().containsKey("Synthetic"); boolean isEnum = DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_ENUM) && (flags & CodeConstants.ACC_ENUM) != 0; @@ -505,18 +519,6 @@ public class ClassWriter { writer.write("// $FF: synthetic field"); writer.newLine(); } - - if(isDeprecated) { - if(DecompilerContext.getOption(IFernflowerPreferences.DEPRECATED_COMMENT)) { // special comment for JB - writer.write(indstr); - writer.write("/** @deprecated */"); - writer.newLine(); - } - - writer.write(indstr); - writer.write("@Deprecated"); - writer.newLine(); - } writer.write(indstr); @@ -723,16 +725,29 @@ public class ClassWriter { bufstrwriter.newLine(); } } - - // method annotations - List lstAnn = getAllAnnotations(mt.getAttributes()); - for(AnnotationExprent annexpr : lstAnn) { - if("java/lang/Deprecated".equals(annexpr.getClassname())) { - isDeprecated = false; - } - bufstrwriter.write(annexpr.toJava(indent)); - bufstrwriter.newLine(); - } + + // method annotations + boolean hasDeprecatedAnno = false; + List lstAnn = getAllAnnotations(mt.getAttributes()); + for(AnnotationExprent annexpr : lstAnn) { + if("java/lang/Deprecated".equals(annexpr.getClassname())) { + hasDeprecatedAnno = true; + } + } + if ((isDeprecated || hasDeprecatedAnno) && DecompilerContext.getOption(IFernflowerPreferences.DEPRECATED_COMMENT)) { + writer.write(indstr); + writer.write("/** @deprecated */"); + writer.newLine(); + } + if(isDeprecated && !hasDeprecatedAnno) { + bufstrwriter.write(indstr); + bufstrwriter.write("@Deprecated"); + bufstrwriter.newLine(); + } + for(AnnotationExprent annexpr : lstAnn) { + bufstrwriter.write(annexpr.toJava(indent)); + bufstrwriter.newLine(); + } boolean isSynthetic = (flags & CodeConstants.ACC_SYNTHETIC) != 0 || mt.getAttributes().containsKey("Synthetic"); boolean isBridge = (flags & CodeConstants.ACC_BRIDGE) != 0; @@ -748,19 +763,7 @@ public class ClassWriter { bufstrwriter.write("// $FF: bridge method"); bufstrwriter.newLine(); } - - if(isDeprecated) { - if(DecompilerContext.getOption(IFernflowerPreferences.DEPRECATED_COMMENT)) { // special comment for JB - writer.write(indstr); - writer.write("/** @deprecated */"); - writer.newLine(); - } - - bufstrwriter.write(indstr); - bufstrwriter.write("@Deprecated"); - bufstrwriter.newLine(); - } - + bufstrwriter.write(indstr); for(int i=0;i