62 import static com.sun.tools.classfile.AccessFlags.ACC_STATIC; 63 64 public class DetectMutableStaticFields { 65 66 private final String[] modules = { 67 "java.compiler", 68 "jdk.compiler", 69 "jdk.javadoc", 70 "jdk.jdeps" 71 }; 72 73 private final String[] packagesToSeekFor = new String[] { 74 "javax.tools", 75 "javax.lang.model", 76 "com.sun.javadoc", 77 "com.sun.source", 78 "com.sun.tools.classfile", 79 "com.sun.tools.doclets", 80 "com.sun.tools.javac", 81 "com.sun.tools.javadoc", 82 "com.sun.tools.javah", 83 "com.sun.tools.javap", 84 "jdk.javadoc" 85 }; 86 87 private static final Map<String, List<String>> classFieldsToIgnoreMap = new HashMap<>(); 88 private static void ignore(String className, String... fields) { 89 classFieldsToIgnoreMap.put(className, Arrays.asList(fields)); 90 } 91 92 static { 93 ignore("javax/tools/ToolProvider", "instance"); 94 ignore("jdk/javadoc/internal/tool/Start", "versionRB"); 95 ignore("com/sun/tools/javah/JavahTask", "versionRB"); 96 ignore("com/sun/tools/classfile/Dependencies$DefaultFilter", "instance"); 97 ignore("com/sun/tools/javap/JavapTask", "versionRB"); 98 ignore("com/sun/tools/doclets/formats/html/HtmlDoclet", "docletToStart"); 99 ignore("com/sun/tools/javac/util/JCDiagnostic", "fragmentFormatter"); 100 ignore("com/sun/tools/javac/util/JavacMessages", "defaultBundle", "defaultMessages"); 101 ignore("com/sun/tools/javac/file/JRTIndex", "sharedInstance"); 102 ignore("com/sun/tools/javac/main/JavaCompiler", "versionRB"); 103 ignore("com/sun/tools/javac/code/Type", "moreInfo"); 104 ignore("com/sun/tools/javac/util/SharedNameTable", "freelist"); 105 ignore("com/sun/tools/javac/util/Log", "useRawMessages"); 106 107 // The following static fields are used for caches of information obtained 108 // by reflective lookup, to avoid explicit references that are not available 109 // when running javac on JDK 8. 110 ignore("com/sun/tools/javac/util/JDK9Wrappers$Configuration", 111 "resolveAndBindMethod", "configurationClass"); 112 ignore("com/sun/tools/javac/util/JDK9Wrappers$Layer", 113 "bootMethod", "defineModulesWithOneLoaderMethod", "configurationMethod", "layerClass"); 114 ignore("com/sun/tools/javac/util/JDK9Wrappers$Module", 115 "addExportsMethod", "addUsesMethod", "getModuleMethod", "getUnnamedModuleMethod"); | 62 import static com.sun.tools.classfile.AccessFlags.ACC_STATIC; 63 64 public class DetectMutableStaticFields { 65 66 private final String[] modules = { 67 "java.compiler", 68 "jdk.compiler", 69 "jdk.javadoc", 70 "jdk.jdeps" 71 }; 72 73 private final String[] packagesToSeekFor = new String[] { 74 "javax.tools", 75 "javax.lang.model", 76 "com.sun.javadoc", 77 "com.sun.source", 78 "com.sun.tools.classfile", 79 "com.sun.tools.doclets", 80 "com.sun.tools.javac", 81 "com.sun.tools.javadoc", 82 "com.sun.tools.javap", 83 "jdk.javadoc" 84 }; 85 86 private static final Map<String, List<String>> classFieldsToIgnoreMap = new HashMap<>(); 87 private static void ignore(String className, String... fields) { 88 classFieldsToIgnoreMap.put(className, Arrays.asList(fields)); 89 } 90 91 static { 92 ignore("javax/tools/ToolProvider", "instance"); 93 ignore("jdk/javadoc/internal/tool/Start", "versionRB"); 94 ignore("com/sun/tools/classfile/Dependencies$DefaultFilter", "instance"); 95 ignore("com/sun/tools/javap/JavapTask", "versionRB"); 96 ignore("com/sun/tools/doclets/formats/html/HtmlDoclet", "docletToStart"); 97 ignore("com/sun/tools/javac/util/JCDiagnostic", "fragmentFormatter"); 98 ignore("com/sun/tools/javac/util/JavacMessages", "defaultBundle", "defaultMessages"); 99 ignore("com/sun/tools/javac/file/JRTIndex", "sharedInstance"); 100 ignore("com/sun/tools/javac/main/JavaCompiler", "versionRB"); 101 ignore("com/sun/tools/javac/code/Type", "moreInfo"); 102 ignore("com/sun/tools/javac/util/SharedNameTable", "freelist"); 103 ignore("com/sun/tools/javac/util/Log", "useRawMessages"); 104 105 // The following static fields are used for caches of information obtained 106 // by reflective lookup, to avoid explicit references that are not available 107 // when running javac on JDK 8. 108 ignore("com/sun/tools/javac/util/JDK9Wrappers$Configuration", 109 "resolveAndBindMethod", "configurationClass"); 110 ignore("com/sun/tools/javac/util/JDK9Wrappers$Layer", 111 "bootMethod", "defineModulesWithOneLoaderMethod", "configurationMethod", "layerClass"); 112 ignore("com/sun/tools/javac/util/JDK9Wrappers$Module", 113 "addExportsMethod", "addUsesMethod", "getModuleMethod", "getUnnamedModuleMethod"); |