diff --git a/framework/src/play/Play.java b/framework/src/play/Play.java index 1241fdac71..aa1d66ea85 100644 --- a/framework/src/play/Play.java +++ b/framework/src/play/Play.java @@ -13,7 +13,6 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; diff --git a/framework/src/play/classloading/enhancers/ContinuationEnhancer.java b/framework/src/play/classloading/enhancers/ContinuationEnhancer.java index 456f28704e..dddfcf26e2 100644 --- a/framework/src/play/classloading/enhancers/ContinuationEnhancer.java +++ b/framework/src/play/classloading/enhancers/ContinuationEnhancer.java @@ -10,7 +10,6 @@ import play.classloading.ApplicationClasses.ApplicationClass; import java.io.InputStream; -import java.util.ArrayList; import java.util.List; public class ContinuationEnhancer extends Enhancer { diff --git a/framework/src/play/data/binding/Unbinder.java b/framework/src/play/data/binding/Unbinder.java index 577826560a..1d70ccfa15 100644 --- a/framework/src/play/data/binding/Unbinder.java +++ b/framework/src/play/data/binding/Unbinder.java @@ -121,14 +121,14 @@ private static void internalUnbind(Map result, Object src, Class Class> toInstantiate = (Class>) ((As) annotation) .unbinder(); if (!(toInstantiate.equals(As.DEFAULT.class))) { - TypeUnbinder myInstance = toInstantiate.newInstance(); + TypeUnbinder myInstance = toInstantiate.getDeclaredConstructor().newInstance(); isExtendedTypeBinder = myInstance.unBind(result, src, srcClazz, name, annotations); }else{ // unbinder is default, test if binder handle the unbinder too Class> toInstantiateBinder = ((As) annotation).binder(); if (!(toInstantiateBinder.equals(As.DEFAULT.class)) && TypeUnbinder.class.isAssignableFrom(toInstantiateBinder)) { - TypeUnbinder myInstance = (TypeUnbinder) toInstantiateBinder.newInstance(); + TypeUnbinder myInstance = (TypeUnbinder) toInstantiateBinder.getDeclaredConstructor().newInstance(); isExtendedTypeBinder = myInstance.unBind(result, src, srcClazz, name, annotations); } } diff --git a/framework/src/play/data/binding/types/BinaryBinder.java b/framework/src/play/data/binding/types/BinaryBinder.java index 50bfaa67b8..54296c7ecf 100644 --- a/framework/src/play/data/binding/types/BinaryBinder.java +++ b/framework/src/play/data/binding/types/BinaryBinder.java @@ -22,7 +22,7 @@ public Object bind(String name, Annotation[] annotations, String value, Class ac try { Request req = Request.current(); if (req != null && req.args != null) { - Model.BinaryField b = (Model.BinaryField) actualClass.newInstance(); + Model.BinaryField b = (Model.BinaryField) actualClass.getDeclaredConstructor().newInstance(); List uploads = (List) req.args.get("__UPLOADS"); if(uploads != null){ for (Upload upload : uploads) { diff --git a/framework/src/play/db/DBPlugin.java b/framework/src/play/db/DBPlugin.java index 9c04d9ae8c..d812459d19 100644 --- a/framework/src/play/db/DBPlugin.java +++ b/framework/src/play/db/DBPlugin.java @@ -22,7 +22,7 @@ public class DBPlugin extends PlayPlugin { protected DataSourceFactory factory(Configuration dbConfig) { String dbFactory = dbConfig.getProperty("db.factory", "play.db.hikaricp.HikariDataSourceFactory"); try { - return (DataSourceFactory) Class.forName(dbFactory).newInstance(); + return (DataSourceFactory) Class.forName(dbFactory).getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new IllegalArgumentException("Expected implementation of " + DataSourceFactory.class.getName() + @@ -73,7 +73,7 @@ public void onApplicationStart() { // Try the driver String driver = dbConfig.getProperty("db.driver"); try { - Driver d = (Driver) Class.forName(driver, true, Play.classloader).newInstance(); + Driver d = (Driver) Class.forName(driver, true, Play.classloader).getDeclaredConstructor().newInstance(); DriverManager.registerDriver(new ProxyDriver(d)); } catch (Exception e) { throw new Exception("Database [" + dbName + "] Driver not found (" + driver + ")", e); diff --git a/framework/src/play/db/jpa/JPAModelLoader.java b/framework/src/play/db/jpa/JPAModelLoader.java index 4040854404..e8a052c1e2 100644 --- a/framework/src/play/db/jpa/JPAModelLoader.java +++ b/framework/src/play/db/jpa/JPAModelLoader.java @@ -248,7 +248,7 @@ private void initProperties() { private Object makeCompositeKey(Model model) throws Exception { initProperties(); Class idClass = getCompositeKeyClass(); - Object id = idClass.newInstance(); + Object id = idClass.getDeclaredConstructor().newInstance(); PropertyDescriptor[] idProperties = PropertyUtils.getPropertyDescriptors(idClass); if (idProperties == null || idProperties.length == 0){ throw new UnexpectedException("Composite id has no properties: " + idClass.getName()); diff --git a/framework/src/play/libs/Mail.java b/framework/src/play/libs/Mail.java index 88262f0e34..e707ffb257 100644 --- a/framework/src/play/libs/Mail.java +++ b/framework/src/play/libs/Mail.java @@ -161,7 +161,7 @@ public static Session getSession() { if (authenticator != null) { props.put("mail.smtp.auth", "true"); try { - session = Session.getInstance(props, (Authenticator) Play.classloader.loadClass(authenticator).newInstance()); + session = Session.getInstance(props, (Authenticator) Play.classloader.loadClass(authenticator).getDeclaredConstructor().newInstance()); } catch (Exception e) { Logger.error(e, "Cannot instantiate custom SMTP authenticator (%s)", authenticator); } diff --git a/framework/src/play/libs/WS.java b/framework/src/play/libs/WS.java index 7ac4e36d41..a47dad7ec9 100644 --- a/framework/src/play/libs/WS.java +++ b/framework/src/play/libs/WS.java @@ -180,7 +180,7 @@ private static synchronized void init() { wsImpl = new WSAsync(); } else { try { - wsImpl = (WSImpl) Play.classloader.loadClass(implementation).newInstance(); + wsImpl = (WSImpl) Play.classloader.loadClass(implementation).getDeclaredConstructor().newInstance(); if (Logger.isTraceEnabled()) { Logger.trace("Using the class:" + implementation + " for web service"); } diff --git a/framework/src/play/server/HttpServerPipelineFactory.java b/framework/src/play/server/HttpServerPipelineFactory.java index 8c79612585..b740d8feae 100644 --- a/framework/src/play/server/HttpServerPipelineFactory.java +++ b/framework/src/play/server/HttpServerPipelineFactory.java @@ -67,7 +67,6 @@ protected String getName(String name) { } protected ChannelHandler getInstance(String name) throws Exception { - Class clazz = classes.computeIfAbsent(name, className -> { try { return Class.forName(className); @@ -76,8 +75,7 @@ protected ChannelHandler getInstance(String name) throws Exception { } }); if (ChannelHandler.class.isAssignableFrom(clazz)) - return (ChannelHandler)clazz.newInstance(); + return (ChannelHandler)clazz.getDeclaredConstructor().newInstance(); return null; } } - diff --git a/framework/src/play/utils/Properties.java b/framework/src/play/utils/Properties.java index d718a9ee7a..fd1c00ef82 100644 --- a/framework/src/play/utils/Properties.java +++ b/framework/src/play/utils/Properties.java @@ -7,6 +7,7 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; @@ -105,10 +106,12 @@ public Object getClassInstance(String key) throws IllegalArgumentException { throw new IllegalArgumentException("Setting " + key + " must be a valid classname : " + key); } try { - return Class.forName(s).newInstance(); + return Class.forName(s).getDeclaredConstructor().newInstance(); } catch (ClassNotFoundException nfe) { throw new IllegalArgumentException(s + ": invalid class name for key " + key, nfe); - } catch (InstantiationException | IllegalAccessException e) { + } catch (NoSuchMethodException | SecurityException e) { + throw new IllegalArgumentException(s + ": could not access class constructor for key " + key, e); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { throw new IllegalArgumentException(s + ": class could not be reflected " + s, e); } } diff --git a/framework/src/play/utils/Utils.java b/framework/src/play/utils/Utils.java index a5b0f7ba84..0c61e72cfb 100644 --- a/framework/src/play/utils/Utils.java +++ b/framework/src/play/utils/Utils.java @@ -115,7 +115,7 @@ public static void mergeValueInMap(Map map, String name, Strin public static Map filterMap(Map map, String keypattern) { try { @SuppressWarnings("unchecked") - Map filtered = map.getClass().newInstance(); + Map filtered = map.getClass().getDeclaredConstructor().newInstance(); for (Map.Entry entry : map.entrySet()) { K key = entry.getKey(); if (key.toString().matches(keypattern)) { @@ -169,8 +169,8 @@ public static Map filterParams(Map params, Str } public static void kill(String pid) throws Exception { - String command = OS.isWindows() ? "taskkill /F /PID " + pid : "kill " + pid; - Runtime.getRuntime().exec(command).waitFor(); + String[] cmdarray = { OS.isWindows() ? "taskkill /F /PID " + pid : "kill " + pid }; + Runtime.getRuntime().exec(cmdarray).waitFor(); } public static class AlternativeDateFormat {