deprecation comments generation changed once again

new behavior:
- depreaction comment (/** @deprecated */) is added always
- @Deprecated annotation is added only when presented in .class file

rationale:
- both deprecation comment and @Deprecated anno produce "Deprecated" attribute
- adding annotation to members deprecated by comment (old behavior) is actually incorrect
- adding comment to members deprecated by annotation may be incorrect but is acceptable (there is no way to tell if a member was deprecated by sole annotation or both by annotation and comment)
- additional configuration option is therefore no longer needed
master
Roman Shevchenko 10 years ago
parent 9e231a7e2e
commit 27f08da5cb
  1. 3
      dist/docs/readme.txt
  2. 58
      src/de/fernflower/main/ClassWriter.java
  3. 1
      src/de/fernflower/main/extern/IFernflowerPreferences.java

@ -63,8 +63,7 @@ ren (0): rename ambiguous (resp. obfuscated) classes and class elements
urc : full name of user-supplied class implementing IIdentifierRenamer. It is used to determine which
class identifiers should be renamed and provides new identifier names. For more information
s. section 5
dpc (0): generate a special comment ('/** @deprecated */') for deprecated classes and class members
inn (1): check for IntelliJ IDEA-specific @NotNull annotation and remove inserted code if found
inn (1): check for IntelliJ IDEA-specific @NotNull annotation and remove inserted code if found
lac (0): decompile lambda expressions to anonymous classes
nls (0): define new line character to be used for output. 0 - '\r\n' (Windows), 1 - '\n' (Linux)

@ -344,25 +344,15 @@ public class ClassWriter {
writer.newLine();
}
}
// class annotations
boolean hasDeprecatedAnno = false;
List<AnnotationExprent> 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)) {
if(isDeprecated) {
writer.write(indstr);
writer.write("/** @deprecated */");
writer.newLine();
}
if(isDeprecated && !hasDeprecatedAnno) {
writer.write(indstr);
writer.write("@Deprecated");
writer.newLine();
}
// class annotations
List<AnnotationExprent> lstAnn = getAllAnnotations(cl.getAttributes());
for(AnnotationExprent annexpr : lstAnn) {
writer.write(annexpr.toJava(indent));
writer.newLine();
@ -490,25 +480,15 @@ public class ClassWriter {
}
boolean isDeprecated = fd.getAttributes().containsKey("Deprecated");
// field annotations
boolean hasDeprecatedAnno = false;
List<AnnotationExprent> 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)) {
if(isDeprecated) {
writer.write(indstr);
writer.write("/** @deprecated */");
writer.newLine();
}
if(isDeprecated && !hasDeprecatedAnno) {
writer.write(indstr);
writer.write("@Deprecated");
writer.newLine();
}
// field annotations
List<AnnotationExprent> lstAnn = getAllAnnotations(fd.getAttributes());
for(AnnotationExprent annexpr : lstAnn) {
writer.write(annexpr.toJava(indent));
writer.newLine();
@ -729,24 +709,14 @@ public class ClassWriter {
}
}
// method annotations
boolean hasDeprecatedAnno = false;
List<AnnotationExprent> 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)) {
if(isDeprecated) {
writer.write(indstr);
writer.write("/** @deprecated */");
writer.newLine();
}
if(isDeprecated && !hasDeprecatedAnno) {
bufstrwriter.write(indstr);
bufstrwriter.write("@Deprecated");
bufstrwriter.newLine();
}
// method annotations
List<AnnotationExprent> lstAnn = getAllAnnotations(mt.getAttributes());
for(AnnotationExprent annexpr : lstAnn) {
bufstrwriter.write(annexpr.toJava(indent));
bufstrwriter.newLine();

@ -46,7 +46,6 @@ public interface IFernflowerPreferences {
public static final String LOG_LEVEL = "log";
public static final String DEPRECATED_COMMENT = "dpc";
public static final String NEW_LINE_SEPARATOR = "nls";
public static final String IDEA_NOT_NULL_ANNOTATION = "inn";
public static final String LAMBDA_TO_ANONYMOUS_CLASS = "lac";

Loading…
Cancel
Save