From ae0c87be2b042203bb24c72722b61f7466273f9e Mon Sep 17 00:00:00 2001 From: twogee Date: Sun, 26 Jul 2020 15:43:47 +0200 Subject: [PATCH] Class.newInstance() is deprecated in Java 9+ --- .../apache/tools/ant/IntrospectionHelper.java | 5 +++-- src/main/org/apache/tools/ant/Project.java | 6 +++--- .../apache/tools/ant/filters/SortFilter.java | 10 ++++------ .../org/apache/tools/ant/launch/Launcher.java | 2 +- .../tools/ant/taskdefs/AntStructure.java | 6 ++++-- .../apache/tools/ant/taskdefs/JDBCTask.java | 7 ++++--- .../org/apache/tools/ant/taskdefs/Tar.java | 2 +- .../tools/ant/taskdefs/XSLTProcess.java | 2 +- .../tools/ant/taskdefs/compilers/Javac13.java | 2 +- .../tools/ant/taskdefs/email/MimeMailer.java | 2 +- .../taskdefs/launcher/CommandLauncher.java | 8 +++++--- .../ant/taskdefs/optional/TraXLiaison.java | 4 ++-- .../taskdefs/optional/XMLValidateTask.java | 6 ++++-- .../optional/ejb/GenericDeploymentTool.java | 5 ++--- .../compilers/JspCompilerAdapterFactory.java | 2 +- .../optional/junit/FormatterElement.java | 8 ++++---- .../optional/junit/TearDownOnVmCrash.java | 2 +- .../junitlauncher/LauncherSupport.java | 2 +- .../native2ascii/SunNative2Ascii.java | 2 +- .../tools/ant/types/EnumeratedAttribute.java | 2 +- .../org/apache/tools/ant/types/Mapper.java | 2 +- .../apache/tools/ant/types/XMLCatalog.java | 2 +- .../ant/types/selectors/ExtendSelector.java | 6 ++++-- .../modifiedselector/ModifiedSelector.java | 2 +- .../apache/tools/ant/util/ClasspathUtils.java | 6 ++++-- .../tools/ant/util/ScriptRunnerCreator.java | 2 +- .../org/apache/tools/zip/ExtraFieldUtils.java | 19 +++++++++++++++++-- .../selectors/PosixGroupSelectorTest.java | 4 ++-- 28 files changed, 76 insertions(+), 52 deletions(-) diff --git a/src/main/org/apache/tools/ant/IntrospectionHelper.java b/src/main/org/apache/tools/ant/IntrospectionHelper.java index 269c55dd9..d4bf771cd 100644 --- a/src/main/org/apache/tools/ant/IntrospectionHelper.java +++ b/src/main/org/apache/tools/ant/IntrospectionHelper.java @@ -1122,10 +1122,11 @@ public final class IntrospectionHelper { public void set(final Project p, final Object parent, final String value) throws InvocationTargetException, IllegalAccessException, BuildException { try { - final EnumeratedAttribute ea = (EnumeratedAttribute) reflectedArg.newInstance(); + final EnumeratedAttribute ea = + (EnumeratedAttribute) reflectedArg.getDeclaredConstructor().newInstance(); ea.setValue(value); m.invoke(parent, ea); - } catch (final InstantiationException ie) { + } catch (final InstantiationException | NoSuchMethodException ie) { throw new BuildException(ie); } } diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java index 1d3e692cf..3f3473651 100644 --- a/src/main/org/apache/tools/ant/Project.java +++ b/src/main/org/apache/tools/ant/Project.java @@ -271,7 +271,7 @@ public class Project implements ResourceFactory { public Project createSubProject() { Project subProject = null; try { - subProject = (getClass().newInstance()); + subProject = getClass().getDeclaredConstructor().newInstance(); } catch (final Exception e) { subProject = new Project(); } @@ -1219,11 +1219,11 @@ public class Project implements ResourceFactory { } log("Attempting to create object of type " + classname, MSG_DEBUG); try { - o = Class.forName(classname, true, coreLoader).newInstance(); + o = Class.forName(classname, true, coreLoader).getDeclaredConstructor().newInstance(); } catch (final ClassNotFoundException seaEnEfEx) { //try the current classloader try { - o = Class.forName(classname).newInstance(); + o = Class.forName(classname).getDeclaredConstructor().newInstance(); } catch (final Exception ex) { log(ex.toString(), MSG_ERR); } diff --git a/src/main/org/apache/tools/ant/filters/SortFilter.java b/src/main/org/apache/tools/ant/filters/SortFilter.java index a027a5d43..d1cb6fdc9 100644 --- a/src/main/org/apache/tools/ant/filters/SortFilter.java +++ b/src/main/org/apache/tools/ant/filters/SortFilter.java @@ -323,19 +323,17 @@ public final class SortFilter extends BaseParamFilterReader String className = param.getValue(); @SuppressWarnings("unchecked") final Comparator comparatorInstance - = (Comparator) (Class.forName(className).newInstance()); + = (Comparator) (Class.forName(className).getDeclaredConstructor().newInstance()); setComparator(comparatorInstance); - } catch (InstantiationException | ClassNotFoundException | IllegalAccessException e) { - /* - * IAE probably means an inner non-static class, that case is not considered - */ - throw new BuildException(e); } catch (ClassCastException e) { throw new BuildException("Value of comparator attribute" + " should implement" + " java.util.Comparator" + " interface"); } catch (Exception e) { + /* + * IAE probably means an inner non-static class, that case is not considered + */ throw new BuildException(e); } } diff --git a/src/main/org/apache/tools/ant/launch/Launcher.java b/src/main/org/apache/tools/ant/launch/Launcher.java index 1ff1b07fb..e10e71336 100644 --- a/src/main/org/apache/tools/ant/launch/Launcher.java +++ b/src/main/org/apache/tools/ant/launch/Launcher.java @@ -280,7 +280,7 @@ public class Launcher { Throwable thrown = null; try { mainClass = loader.loadClass(mainClassname).asSubclass(AntMain.class); - final AntMain main = mainClass.newInstance(); + final AntMain main = mainClass.getDeclaredConstructor().newInstance(); main.startAnt(newArgs, null, null); } catch (final InstantiationException ex) { System.err.println( diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java index 4d8909b7b..5978ee038 100644 --- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java +++ b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; @@ -318,7 +319,7 @@ public class AntStructure extends Task { } else if (EnumeratedAttribute.class.isAssignableFrom(type)) { try { final EnumeratedAttribute ea = - type.asSubclass(EnumeratedAttribute.class).newInstance(); + type.asSubclass(EnumeratedAttribute.class).getDeclaredConstructor().newInstance(); final String[] values = ea.getValues(); if (values == null || values.length == 0 || !areNmtokens(values)) { @@ -326,7 +327,8 @@ public class AntStructure extends Task { } else { sb.append(Stream.of(values).collect(joinAlts)).append(" "); } - } catch (final InstantiationException | IllegalAccessException ie) { + } catch (final InstantiationException | IllegalAccessException + | NoSuchMethodException | InvocationTargetException ie) { sb.append("CDATA "); } } else if (Enum.class.isAssignableFrom(type)) { diff --git a/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java b/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java index a274d3846..55e22f677 100644 --- a/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java @@ -18,6 +18,7 @@ package org.apache.tools.ant.taskdefs; +import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Driver; @@ -425,7 +426,7 @@ public abstract class JDBCTask extends Task { Project.MSG_VERBOSE); dc = Class.forName(driver).asSubclass(Driver.class); } - driverInstance = dc.newInstance(); + driverInstance = dc.getDeclaredConstructor().newInstance(); } catch (ClassNotFoundException e) { throw new BuildException( "Class Not Found: JDBC driver " + driver + " could not be loaded", @@ -436,9 +437,9 @@ public abstract class JDBCTask extends Task { "Illegal Access: JDBC driver " + driver + " could not be loaded", e, getLocation()); - } catch (InstantiationException e) { + } catch (InstantiationException | NoSuchMethodException | InvocationTargetException e) { throw new BuildException( - "Instantiation Exception: JDBC driver " + driver + " could not be loaded", + e.getClass().getSimpleName() + ": JDBC driver " + driver + " could not be loaded", e, getLocation()); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Tar.java b/src/main/org/apache/tools/ant/taskdefs/Tar.java index 1c56a661a..76446fdc8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Tar.java +++ b/src/main/org/apache/tools/ant/taskdefs/Tar.java @@ -1014,7 +1014,7 @@ public class Tar extends MatchingTask { .asSubclass(OutputStream.class); Constructor c = sClazz.getConstructor(OutputStream.class, fClazz); - return c.newInstance(ostream, oClazz.newInstance()); + return c.newInstance(ostream, oClazz.getDeclaredConstructor().newInstance()); } catch (ClassNotFoundException ex) { throw new BuildException("xz compression requires the XZ for Java library", ex); diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java index 145b04eca..237f5d8a9 100644 --- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java +++ b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java @@ -702,7 +702,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { } else { //anything else is a classname final Class clazz = loadClass(proc).asSubclass(XSLTLiaison.class); - liaison = clazz.newInstance(); + liaison = clazz.getDeclaredConstructor().newInstance(); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java index 590ec3508..1d79ab84d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java +++ b/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java @@ -52,7 +52,7 @@ public class Javac13 extends DefaultCompilerAdapter { // Use reflection to be able to build on all JDKs >= 1.1: try { Class c = Class.forName("com.sun.tools.javac.Main"); - Object compiler = c.newInstance(); + Object compiler = c.getDeclaredConstructor().newInstance(); Method compile = c.getMethod("compile", String[].class); int result = (Integer) compile.invoke(compiler, (Object) cmd.getArguments()); diff --git a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java b/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java index e052e7a1b..319c1dc7c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java +++ b/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java @@ -151,7 +151,7 @@ public class MimeMailer extends Mailer { try { final Provider p = Class.forName("com.sun.net.ssl.internal.ssl.Provider") - .asSubclass(Provider.class).newInstance(); + .asSubclass(Provider.class).getDeclaredConstructor().newInstance(); Security.addProvider(p); } catch (final Exception e) { throw new BuildException( diff --git a/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java b/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java index e199569a5..095ef3905 100644 --- a/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java +++ b/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java @@ -22,6 +22,7 @@ import static org.apache.tools.ant.MagicNames.ANT_VM_LAUNCHER_REF_ID; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.Optional; import org.apache.tools.ant.Project; @@ -173,10 +174,11 @@ public class CommandLauncher { String launcherClass = System.getProperty(launcherRefId); if (launcherClass != null) { try { - return Class.forName(launcherClass) - .asSubclass(CommandLauncher.class).newInstance(); + return Class.forName(launcherClass).asSubclass(CommandLauncher.class) + .getDeclaredConstructor().newInstance(); } catch (InstantiationException | IllegalAccessException - | ClassNotFoundException e) { + | ClassNotFoundException + | NoSuchMethodException | InvocationTargetException e) { System.err.println("Could not instantiate launcher class " + launcherClass + ": " + e.getMessage()); } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java index 23db4b007..5b71ae5cf 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java @@ -332,7 +332,7 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware Thread.currentThread() .getContextClassLoader()); final XSLTTraceSupport ts = - (XSLTTraceSupport) traceSupport.newInstance(); + (XSLTTraceSupport) traceSupport.getDeclaredConstructor().newInstance(); ts.configureTrace(transformer, traceConfiguration); } catch (final Exception e) { final String msg = "Failed to enable tracing because of " + e; @@ -400,7 +400,7 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware if (clazz == null) { clazz = Class.forName(factoryName); } - tfactory = (TransformerFactory) clazz.newInstance(); + tfactory = (TransformerFactory) clazz.getDeclaredConstructor().newInstance(); } catch (final Exception e) { throw new BuildException(e); } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java index 2edabda27..0358bdcf5 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java @@ -19,6 +19,7 @@ package org.apache.tools.ant.taskdefs.optional; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.nio.file.Files; import java.util.Vector; @@ -392,8 +393,9 @@ public class XMLValidateTask extends Task { readerClass = Class.forName(readerClassName); } - reader = readerClass.newInstance(); - } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + reader = readerClass.getDeclaredConstructor().newInstance(); + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException + | NoSuchMethodException | InvocationTargetException e) { throw new BuildException(INIT_FAILED_MSG + readerClassName, e); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java index 21e08821e..3ae626e3c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java @@ -276,9 +276,8 @@ public class GenericDeploymentTool implements EJBDeploymentTool { try { Class analyzerClass = - Class.forName(analyzerClassName) - .asSubclass(DependencyAnalyzer.class); - dependencyAnalyzer = analyzerClass.newInstance(); + Class.forName(analyzerClassName).asSubclass(DependencyAnalyzer.class); + dependencyAnalyzer = analyzerClass.getDeclaredConstructor().newInstance(); dependencyAnalyzer.addClassPath(new Path(task.getProject(), config.srcDir.getPath())); dependencyAnalyzer.addClassPath(config.classpath); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java index dd2b34fbd..a894621f7 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java @@ -105,7 +105,7 @@ public final class JspCompilerAdapterFactory { throws BuildException { try { Class c = classloader.findClass(className).asSubclass(JspCompilerAdapter.class); - return c.newInstance(); + return c.getDeclaredConstructor().newInstance(); } catch (ClassNotFoundException cnfe) { throw new BuildException(className + " can't be found.", cnfe); } catch (ClassCastException cce) { diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java index 98bd68508..b64f5af38 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java @@ -302,11 +302,11 @@ public class FormatterElement { JUnitResultFormatterMirror r; try { - r = f.asSubclass(JUnitResultFormatterMirror.class).newInstance(); + r = f.asSubclass(JUnitResultFormatterMirror.class).getDeclaredConstructor().newInstance(); } catch (ClassCastException e) { - throw new BuildException("%s is not a JUnitResultFormatter", - classname); - } catch (InstantiationException | IllegalAccessException e) { + throw new BuildException("%s is not a JUnitResultFormatter", classname); + } catch (InstantiationException | IllegalAccessException + | NoSuchMethodException | InvocationTargetException e) { throw new BuildException(e); } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java index afc02b34e..8a84cbd3d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java @@ -137,7 +137,7 @@ public class TearDownOnVmCrash implements JUnitResultFormatter { try { Method td = testClass.getMethod("tearDown"); if (td.getReturnType() == Void.TYPE) { - td.invoke(testClass.newInstance()); + td.invoke(testClass.getDeclaredConstructor().newInstance()); } } catch (NoSuchMethodException nsme) { // no tearDown, fine diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java index 65ba96ee8..a5ce99677 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LauncherSupport.java @@ -293,7 +293,7 @@ public class LauncherSupport { throw new BuildException("Listener class " + className + " is not of type " + TestExecutionListener.class.getName()); } try { - return (TestExecutionListener) klass.newInstance(); + return (TestExecutionListener) klass.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new BuildException("Failed to create an instance of listener " + className, e); } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java b/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java index 9f9f32f25..5e062a3b4 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java @@ -55,7 +55,7 @@ public final class SunNative2Ascii extends DefaultNative2Ascii { try { Class n2aMain = Class.forName(SUN_TOOLS_NATIVE2ASCII_MAIN); Method convert = n2aMain.getMethod("convert", String[].class); - return Boolean.TRUE.equals(convert.invoke(n2aMain.newInstance(), + return Boolean.TRUE.equals(convert.invoke(n2aMain.getDeclaredConstructor().newInstance(), (Object) cmd.getArguments())); } catch (BuildException ex) { //rethrow diff --git a/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java b/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java index 66bf98e84..0d5332fd2 100644 --- a/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java +++ b/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java @@ -75,7 +75,7 @@ public abstract class EnumeratedAttribute { } EnumeratedAttribute ea; try { - ea = clazz.newInstance(); + ea = clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new BuildException(e); } diff --git a/src/main/org/apache/tools/ant/types/Mapper.java b/src/main/org/apache/tools/ant/types/Mapper.java index 8c40ab925..46dfabfed 100644 --- a/src/main/org/apache/tools/ant/types/Mapper.java +++ b/src/main/org/apache/tools/ant/types/Mapper.java @@ -231,7 +231,7 @@ public class Mapper extends DataType { } try { - FileNameMapper m = getImplementationClass().newInstance(); + FileNameMapper m = getImplementationClass().getDeclaredConstructor().newInstance(); final Project p = getProject(); if (p != null) { p.setProjectReference(m); diff --git a/src/main/org/apache/tools/ant/types/XMLCatalog.java b/src/main/org/apache/tools/ant/types/XMLCatalog.java index d5bce3323..92943fc4e 100644 --- a/src/main/org/apache/tools/ant/types/XMLCatalog.java +++ b/src/main/org/apache/tools/ant/types/XMLCatalog.java @@ -522,7 +522,7 @@ public class XMLCatalog extends DataType // if it can see it - doesn't use the context loader. clazz = Class.forName(APACHE_RESOLVER, true, baseResolverLoader); - Object obj = clazz.newInstance(); + Object obj = clazz.getDeclaredConstructor().newInstance(); // // Success! The xml-commons resolver library is // available, so use it. diff --git a/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java b/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java index 881f3e026..557f438e4 100644 --- a/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java +++ b/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java @@ -19,6 +19,7 @@ package org.apache.tools.ant.types.selectors; import java.io.File; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -67,7 +68,7 @@ public class ExtendSelector extends BaseSelector { = getProject().createClassLoader(classpath); c = Class.forName(classname, true, al); } - dynselector = c.asSubclass(FileSelector.class).newInstance(); + dynselector = c.asSubclass(FileSelector.class).getDeclaredConstructor().newInstance(); final Project p = getProject(); if (p != null) { p.setProjectReference(dynselector); @@ -75,7 +76,8 @@ public class ExtendSelector extends BaseSelector { } catch (ClassNotFoundException cnfexcept) { setError("Selector " + classname + " not initialized, no such class"); - } catch (InstantiationException iexcept) { + } catch (InstantiationException | NoSuchMethodException + | InvocationTargetException iexcept) { setError("Selector " + classname + " not initialized, could not create class"); } catch (IllegalAccessException iaexcept) { diff --git a/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java b/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java index 34d2f404c..80bf4a6f9 100644 --- a/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java +++ b/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java @@ -407,7 +407,7 @@ public class ModifiedSelector extends BaseExtendSelector clazz = Class.forName(classname); } - Object rv = clazz.newInstance(); + Object rv = clazz.getDeclaredConstructor().newInstance(); if (!type.isInstance(rv)) { throw new BuildException("Specified class (%s) %s", classname, msg); diff --git a/src/main/org/apache/tools/ant/util/ClasspathUtils.java b/src/main/org/apache/tools/ant/util/ClasspathUtils.java index 50160736f..9e9b2ddc5 100644 --- a/src/main/org/apache/tools/ant/util/ClasspathUtils.java +++ b/src/main/org/apache/tools/ant/util/ClasspathUtils.java @@ -25,6 +25,8 @@ import org.apache.tools.ant.ProjectComponent; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Reference; +import java.lang.reflect.InvocationTargetException; + // CheckStyle:HideUtilityClassConstructorCheck OFF - bc /** @@ -249,7 +251,7 @@ public class ClasspathUtils { try { @SuppressWarnings("unchecked") Class clazz = (Class) Class.forName(className, true, userDefinedLoader); - T o = clazz.newInstance(); + T o = clazz.getDeclaredConstructor().newInstance(); if (!expectedType.isInstance(o)) { throw new BuildException( "Class of unexpected Type: %s expected : %s", className, @@ -261,7 +263,7 @@ public class ClasspathUtils { } catch (InstantiationException e) { throw new BuildException("Could not instantiate " + className + ". Specified class should have a no " + "argument constructor.", e); - } catch (IllegalAccessException e) { + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { throw new BuildException("Could not instantiate " + className + ". Specified class should have a " + "public constructor.", e); } catch (LinkageError e) { diff --git a/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java b/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java index a53be4277..26bbd126e 100644 --- a/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java +++ b/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java @@ -127,7 +127,7 @@ public class ScriptRunnerCreator { } try { runner = (ScriptRunnerBase) Class.forName( - runnerClass, true, scriptLoader).newInstance(); + runnerClass, true, scriptLoader).getDeclaredConstructor().newInstance(); runner.setProject(project); } catch (Exception ex) { throw ReflectUtil.toBuildException(ex); diff --git a/src/main/org/apache/tools/zip/ExtraFieldUtils.java b/src/main/org/apache/tools/zip/ExtraFieldUtils.java index f024ab062..ab9a32eeb 100644 --- a/src/main/org/apache/tools/zip/ExtraFieldUtils.java +++ b/src/main/org/apache/tools/zip/ExtraFieldUtils.java @@ -18,6 +18,7 @@ package org.apache.tools.zip; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -60,7 +61,7 @@ public class ExtraFieldUtils { */ public static void register(Class c) { try { - ZipExtraField ze = (ZipExtraField) c.newInstance(); + ZipExtraField ze = (ZipExtraField) c.getDeclaredConstructor().newInstance(); implementations.put(ze.getHeaderId(), c); } catch (ClassCastException cc) { throw new RuntimeException(c + " doesn't implement ZipExtraField"); //NOSONAR @@ -68,6 +69,11 @@ public class ExtraFieldUtils { throw new RuntimeException(c + " is not a concrete class"); //NOSONAR } catch (IllegalAccessException ie) { throw new RuntimeException(c + "'s no-arg constructor is not public"); //NOSONAR + } catch (NoSuchMethodException e) { + throw new RuntimeException(c + "'s no-arg constructor not found"); //NOSONAR + } catch (InvocationTargetException e) { + throw new RuntimeException(c + "'s no-arg constructor threw an exception:" + + e.getMessage()); //NOSONAR } } @@ -84,7 +90,16 @@ public class ExtraFieldUtils { throws InstantiationException, IllegalAccessException { Class c = implementations.get(headerId); if (c != null) { - return (ZipExtraField) c.newInstance(); + // wrap extra exceptions to preserve method signature + try { + return (ZipExtraField) c.getDeclaredConstructor().newInstance(); + } catch (InvocationTargetException e) { + throw (InstantiationException) + new InstantiationException().initCause(e.getTargetException()); + } catch (NoSuchMethodException e) { + throw (InstantiationException) + new InstantiationException().initCause(e); + } } UnrecognizedExtraField u = new UnrecognizedExtraField(); u.setHeaderId(headerId); diff --git a/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java b/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java index 2297082aa..9c05f7e0a 100644 --- a/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java +++ b/src/tests/junit/org/apache/tools/ant/types/selectors/PosixGroupSelectorTest.java @@ -71,7 +71,7 @@ public class PosixGroupSelectorTest { @Test public void posixGroupIsTrueForSelf() throws Exception { long gid = (long) jaasProviderClass.getMethod(GROUP_GETTER) - .invoke(jaasProviderClass.newInstance()); + .invoke(jaasProviderClass.getDeclaredConstructor().newInstance()); File file = folder.newFile("f.txt"); Map fileAttributes = Files.readAttributes(file.toPath(), @@ -87,7 +87,7 @@ public class PosixGroupSelectorTest { @Test public void posixGroupFollowSymlinks() throws Exception { long gid = (long) jaasProviderClass.getMethod(GROUP_GETTER) - .invoke(jaasProviderClass.newInstance()); + .invoke(jaasProviderClass.getDeclaredConstructor().newInstance()); File target = new File(folder.getRoot(), "link"); Path symbolicLink = Files.createSymbolicLink(target.toPath(), TEST_FILE.toPath());