JDK 9 RFR of JDK-8155516: Suppress warnings from uses of deprecated Class.newInstance langtools
Joseph D. Darcy
joe.darcy at oracle.com
Wed Apr 27 21:27:59 UTC 2016
Hello,
As part of the effort to address
JDK-6850612: Deprecate Class.newInstance since it violates the
checked exception language contract
the uses of Class.newInstance in the langtools repo have to be address
in some way, either by suppressing the resulting warning or by
refactoring the code to use other recommended idioms.
Please review the fix for
JDK-8155516: Suppress warnings from uses of deprecated
Class.newInstance langtools
http://cr.openjdk.java.net/~darcy/8155516.0/
which takes the suppression approach.
Patch below.
Thanks,
-Joe
--- old/src/java.compiler/share/classes/javax/tools/ToolProvider.java
2016-04-27 14:16:21.269126143 -0700
+++ new/src/java.compiler/share/classes/javax/tools/ToolProvider.java
2016-04-27 14:16:21.177126140 -0700
@@ -123,7 +123,9 @@
private static <T> T getSystemTool(Class<T> clazz, String
moduleName, String className) {
if (useLegacy) {
try {
- return Class.forName(className, true,
ClassLoader.getSystemClassLoader()).asSubclass(clazz).newInstance();
+ @SuppressWarnings("deprecation")
+ T result = Class.forName(className, true,
ClassLoader.getSystemClassLoader()).asSubclass(clazz).newInstance();
+ return result;
} catch (ReflectiveOperationException e) {
throw new Error(e);
}
---
old/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
2016-04-27 14:16:21.573126153 -0700
+++
new/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
2016-04-27 14:16:21.489126150 -0700
@@ -282,6 +282,7 @@
if (options.isSet(XPRINT)) {
try {
+ @SuppressWarnings("deprecation")
Processor processor =
PrintingProcessor.class.newInstance();
processorIterator = List.of(processor).iterator();
} catch (Throwable t) {
@@ -549,8 +550,9 @@
try {
Class<?> processorClass =
processorCL.loadClass(processorName);
ensureReadable(processorClass);
- processor =
- (Processor) (processorClass.newInstance());
+ @SuppressWarnings("deprecation")
+ Object tmp = processorClass.newInstance();
+ processor = (Processor) tmp;
} catch (ClassNotFoundException cnfe) {
log.error("proc.processor.not.found",
processorName);
return false;
---
old/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/Option.java
2016-04-27 14:16:21.881126163 -0700
+++
new/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/Option.java
2016-04-27 14:16:21.797126161 -0700
@@ -151,6 +151,7 @@
// Construct transformer
try {
Class<?> trCls = Class.forName(classname);
+ @SuppressWarnings("deprecation")
Transformer transformer = (Transformer)
trCls.newInstance();
transformer.setExtra(extra);
helper.addTransformer(suffix, transformer);
---
old/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java
2016-04-27 14:16:22.181126173 -0700
+++
new/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java
2016-04-27 14:16:22.097126171 -0700
@@ -247,6 +247,7 @@
tagClassLoader = fileManager.getClassLoader(TAGLET_PATH);
Class<?> customTagClass = tagClassLoader.loadClass(classname);
ensureReadable(customTagClass);
+ @SuppressWarnings("deprecation")
Object instance = customTagClass.newInstance();
Taglet newLegacy = new
UserTaglet((jdk.javadoc.doclet.taglet.Taglet)instance);
String tname = newLegacy.getName();
---
old/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java
2016-04-27 14:16:22.481126183 -0700
+++
new/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java
2016-04-27 14:16:22.393126180 -0700
@@ -252,7 +252,9 @@
initMessager();
messager.setLocale(locale);
try {
- doclet = (Doclet) docletClass.newInstance();
+ @SuppressWarnings("deprecation")
+ Object o = docletClass.newInstance();
+ doclet = (Doclet) o;
} catch (InstantiationException | IllegalAccessException
exc) {
exc.printStackTrace();
if (!apiMode) {
More information about the compiler-dev
mailing list