diff --git a/framework/src/play/Invoker.java b/framework/src/play/Invoker.java index 3a60169377..d1800aac7f 100644 --- a/framework/src/play/Invoker.java +++ b/framework/src/play/Invoker.java @@ -1,7 +1,6 @@ package play; import java.lang.annotation.Annotation; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -26,6 +25,8 @@ import play.libs.F.Promise; import play.utils.PThreadFactory; +import static java.util.Collections.unmodifiableList; + /** * Run some code in a Play! context */ @@ -115,8 +116,7 @@ public static InvocationContext current() { } public InvocationContext(String invocationType) { - this.invocationType = invocationType; - this.annotations = new ArrayList<>(); + this(invocationType, List.of()); } public InvocationContext(String invocationType, List annotations) { @@ -125,16 +125,11 @@ public InvocationContext(String invocationType, List annotations) { } public InvocationContext(String invocationType, Annotation[] annotations) { - this.invocationType = invocationType; - this.annotations = Arrays.asList(annotations); + this(invocationType, List.of(annotations)); } public InvocationContext(String invocationType, Annotation[]... annotations) { - this.invocationType = invocationType; - this.annotations = new ArrayList<>(); - for (Annotation[] some : annotations) { - this.annotations.addAll(Arrays.asList(some)); - } + this(invocationType, Arrays.stream(annotations).flatMap(Arrays::stream).toList()); } public List getAnnotations() { @@ -144,7 +139,7 @@ public List getAnnotations() { @SuppressWarnings("unchecked") public T getAnnotation(Class clazz) { for (Annotation annotation : annotations) { - if (annotation.annotationType().isAssignableFrom(clazz)) { + if (annotation.annotationType() == clazz) { return (T) annotation; } } @@ -153,7 +148,7 @@ public T getAnnotation(Class clazz) { public boolean isAnnotationPresent(Class clazz) { for (Annotation annotation : annotations) { - if (annotation.annotationType().isAssignableFrom(clazz)) { + if (annotation.annotationType() == clazz) { return true; } } @@ -366,7 +361,7 @@ public InvocationContext getInvocationContext() { */ static { int core = Integer.parseInt(Play.configuration.getProperty("play.pool", - Play.mode == Mode.DEV ? "1" : ((Runtime.getRuntime().availableProcessors() + 1) + ""))); + Play.mode == Mode.DEV ? "1" : Integer.toString(Runtime.getRuntime().availableProcessors() + 1))); executor = new ScheduledThreadPoolExecutor(core, new PThreadFactory("play"), new ThreadPoolExecutor.AbortPolicy()); } diff --git a/framework/src/play/Logger.java b/framework/src/play/Logger.java index 82da124f07..543a1c2833 100644 --- a/framework/src/play/Logger.java +++ b/framework/src/play/Logger.java @@ -582,7 +582,7 @@ static boolean niceThrowable(org.apache.logging.log4j.Level level, Throwable e, } cleanTrace.add(se); } - toClean.setStackTrace(cleanTrace.toArray(new StackTraceElement[cleanTrace.size()])); + toClean.setStackTrace(cleanTrace.toArray(StackTraceElement[]::new)); toClean = toClean.getCause(); if (toClean == null) { break; diff --git a/framework/src/play/Play.java b/framework/src/play/Play.java index aa1d66ea85..251cc37dcc 100644 --- a/framework/src/play/Play.java +++ b/framework/src/play/Play.java @@ -405,13 +405,13 @@ private static Properties readOneConfigurationFile(String filename) { Properties newConfiguration = new OrderSafeProperties(); Pattern pattern = Pattern.compile("^%([a-zA-Z0-9_\\-]+)\\.(.*)$"); for (Object key : propsFromFile.keySet()) { - Matcher matcher = pattern.matcher(key + ""); + Matcher matcher = pattern.matcher(String.valueOf(key)); if (!matcher.matches()) { newConfiguration.put(key, propsFromFile.get(key).toString().trim()); } } for (Object key : propsFromFile.keySet()) { - Matcher matcher = pattern.matcher(key + ""); + Matcher matcher = pattern.matcher(String.valueOf(key)); if (matcher.matches()) { String instance = matcher.group(1); if (instance.equals(id)) { @@ -512,7 +512,7 @@ public static synchronized void start() { // Locales langs = new ArrayList<>(Arrays.asList(configuration.getProperty("application.langs", "").split(","))); - if (langs.size() == 1 && langs.get(0).trim().length() == 0) { + if (langs.size() == 1 && langs.get(0).isBlank()) { langs = new ArrayList<>(16); } @@ -521,7 +521,7 @@ public static synchronized void start() { // SecretKey secretKey = configuration.getProperty("application.secret", "").trim(); - if (secretKey.length() == 0) { + if (secretKey.isEmpty()) { Logger.warn("No secret key defined. Sessions will not be encrypted"); } @@ -729,7 +729,7 @@ public static void loadModules() { public static void loadModules(VirtualFile appRoot) { if (System.getenv("MODULES") != null) { // Modules path is prepended with a env property - if (System.getenv("MODULES") != null && System.getenv("MODULES").trim().length() > 0) { + if (System.getenv("MODULES") != null && !System.getenv("MODULES").isBlank()) { for (String m : System.getenv("MODULES").split(File.pathSeparator)) { File modulePath = new File(m); diff --git a/framework/src/play/PlayPlugin.java b/framework/src/play/PlayPlugin.java index d5337bba8e..8400aaff59 100644 --- a/framework/src/play/PlayPlugin.java +++ b/framework/src/play/PlayPlugin.java @@ -567,8 +567,8 @@ public String getName() { // I don't want to add any additional dependencies to the project or use JDK 8 features // so I'm just rolling my own 1 arg function interface... there must be a better way to do this... - public static interface Function1 { - public O apply(I arg) throws Throwable; + public interface Function1 { + O apply(I arg) throws Throwable; } } diff --git a/framework/src/play/ant/PlayConfigurationLoadTask.java b/framework/src/play/ant/PlayConfigurationLoadTask.java index 41512ef295..33e594f756 100644 --- a/framework/src/play/ant/PlayConfigurationLoadTask.java +++ b/framework/src/play/ant/PlayConfigurationLoadTask.java @@ -114,8 +114,8 @@ private Map properties() { continue; } if (line.startsWith("%")) { - if (playId.length() > 0 && line.startsWith(playId + ".")) { - line = line.substring((playId + ".").length()); + if (!playId.isEmpty() && line.startsWith(playId + '.')) { + line = line.substring(playId.length() + 1); String[] sa = splitLine(line); if (sa != null) { idSpecific.put(sa[0], sa[1]); diff --git a/framework/src/play/cache/CacheImpl.java b/framework/src/play/cache/CacheImpl.java index 7de56fb5d0..0541d78ec3 100644 --- a/framework/src/play/cache/CacheImpl.java +++ b/framework/src/play/cache/CacheImpl.java @@ -9,31 +9,31 @@ */ public interface CacheImpl { - public void add(String key, Object value, int expiration); + void add(String key, Object value, int expiration); - public boolean safeAdd(String key, Object value, int expiration); + boolean safeAdd(String key, Object value, int expiration); - public void set(String key, Object value, int expiration); + void set(String key, Object value, int expiration); - public boolean safeSet(String key, Object value, int expiration); + boolean safeSet(String key, Object value, int expiration); - public void replace(String key, Object value, int expiration); + void replace(String key, Object value, int expiration); - public boolean safeReplace(String key, Object value, int expiration); + boolean safeReplace(String key, Object value, int expiration); - public Object get(String key); + Object get(String key); - public Map get(String[] keys); + Map get(String[] keys); - public long incr(String key, int by); + long incr(String key, int by); - public long decr(String key, int by); + long decr(String key, int by); - public void clear(); + void clear(); - public void delete(String key); + void delete(String key); - public boolean safeDelete(String key); + boolean safeDelete(String key); - public void stop(); + void stop(); } diff --git a/framework/src/play/cache/CacheKeyGenerator.java b/framework/src/play/cache/CacheKeyGenerator.java index 6e1a19f383..029891db48 100644 --- a/framework/src/play/cache/CacheKeyGenerator.java +++ b/framework/src/play/cache/CacheKeyGenerator.java @@ -6,5 +6,5 @@ * Allow custom cache key to be used by applications. */ public interface CacheKeyGenerator { - public String generate(Request request); + String generate(Request request); } \ No newline at end of file diff --git a/framework/src/play/classloading/ApplicationClasses.java b/framework/src/play/classloading/ApplicationClasses.java index 9e7eec9d5a..e3c538adc3 100644 --- a/framework/src/play/classloading/ApplicationClasses.java +++ b/framework/src/play/classloading/ApplicationClasses.java @@ -195,7 +195,7 @@ public static class ApplicationClass { /** * Last time than this class was compiled */ - public Long timestamp = 0L; + public long timestamp = 0L; /** * Is this class compiled */ diff --git a/framework/src/play/classloading/ApplicationClassloader.java b/framework/src/play/classloading/ApplicationClassloader.java index 040127bbf0..c0131016dc 100644 --- a/framework/src/play/classloading/ApplicationClassloader.java +++ b/framework/src/play/classloading/ApplicationClassloader.java @@ -331,7 +331,7 @@ public void detectChanges() throws RestartNeededException { Cache.clear(); if (HotswapAgent.enabled) { try { - HotswapAgent.reload(newDefinitions.toArray(new ClassDefinition[newDefinitions.size()])); + HotswapAgent.reload(newDefinitions.toArray(ClassDefinition[]::new)); } catch (Throwable e) { throw new RestartNeededException(newDefinitions.size() + " classes changed", e); } @@ -416,7 +416,7 @@ public List> getAllClasses() { } } - Play.classes.compiler.compile(classNames.toArray(new String[classNames.size()])); + Play.classes.compiler.compile(classNames.toArray(String[]::new)); } @@ -521,7 +521,7 @@ private List getAllClasses(VirtualFile path) { } private List getAllClasses(VirtualFile path, String basePackage) { - if (basePackage.length() > 0 && !basePackage.endsWith(".")) { + if (!basePackage.isEmpty() && !basePackage.endsWith(".")) { basePackage += "."; } List res = new ArrayList<>(); diff --git a/framework/src/play/classloading/BytecodeCache.java b/framework/src/play/classloading/BytecodeCache.java index c86351a6e4..424d4b4e15 100644 --- a/framework/src/play/classloading/BytecodeCache.java +++ b/framework/src/play/classloading/BytecodeCache.java @@ -8,6 +8,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.MessageDigest; +import java.util.HexFormat; import java.util.regex.Pattern; import static java.nio.charset.StandardCharsets.UTF_8; @@ -51,27 +52,26 @@ public static byte[] getBytecode(String name, String source) { } File f = cacheFile(REPLACED_CHARS.matcher(name).replaceAll("_")); if (f.exists()) { - FileInputStream fis = new FileInputStream(f); - // Read hash - int offset = 0; - int read = -1; - StringBuilder hash = new StringBuilder(); - // look for null byte, or end-of file - while ((read = fis.read()) > 0) { - hash.append((char) read); - offset++; - } - if (!hash(source).contentEquals(hash)) { - if (Logger.isTraceEnabled()) { - Logger.trace("Bytecode too old (%s != %s)", hash, hash(source)); + try (FileInputStream fis = new FileInputStream(f)) { + // Read hash + int offset = 0; + int read; + StringBuilder hash = new StringBuilder(); + // look for null byte, or end-of file + while ((read = fis.read()) > 0) { + hash.append((char) read); + offset++; + } + if (!hash(source).contentEquals(hash)) { + if (Logger.isTraceEnabled()) { + Logger.trace("Bytecode too old (%s != %s)", hash, hash(source)); + } + return null; } - fis.close(); - return null; + byte[] byteCode = new byte[(int) f.length() - (offset + 1)]; + fis.read(byteCode); + return byteCode; } - byte[] byteCode = new byte[(int) f.length() - (offset + 1)]; - fis.read(byteCode); - fis.close(); - return byteCode; } if (Logger.isTraceEnabled()) { @@ -127,18 +127,9 @@ static String hash(String text) { plugins.append(plugin.getClass().getName()); } MessageDigest messageDigest = MessageDigest.getInstance("MD5"); - messageDigest.reset(); messageDigest.update((Play.version + plugins + text).getBytes(UTF_8)); byte[] digest = messageDigest.digest(); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < digest.length; ++i) { - int value = digest[i]; - if (value < 0) { - value += 256; - } - builder.append(Integer.toHexString(value)); - } - return builder.toString(); + return HexFormat.of().formatHex(digest); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/framework/src/play/classloading/enhancers/ControllersEnhancer.java b/framework/src/play/classloading/enhancers/ControllersEnhancer.java index 10db39cc83..5348f5fbf0 100644 --- a/framework/src/play/classloading/enhancers/ControllersEnhancer.java +++ b/framework/src/play/classloading/enhancers/ControllersEnhancer.java @@ -155,7 +155,7 @@ public void edit(Handler handler) throws CannotCompileException { /** * Mark class that need controller enhancement */ - public static interface ControllerSupport { + public interface ControllerSupport { } /** diff --git a/framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancer.java b/framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancer.java index 17a26e408e..5b0bbe48aa 100644 --- a/framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancer.java +++ b/framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancer.java @@ -75,7 +75,7 @@ public void enhanceThisClass(ApplicationClass applicationClass) throws Exception try { // The instruction at which this local variable has been created - Integer pc = localVariableAttribute.startPc(i); + int pc = localVariableAttribute.startPc(i); // Move to the next instruction (insertionPc) CodeIterator codeIterator = codeAttribute.iterator(); diff --git a/framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancerJava7.java b/framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancerJava7.java deleted file mode 100644 index df718a8cf3..0000000000 --- a/framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancerJava7.java +++ /dev/null @@ -1,245 +0,0 @@ -package play.classloading.enhancers; - -import javassist.*; -import javassist.bytecode.Bytecode; -import javassist.bytecode.CodeAttribute; -import javassist.bytecode.CodeIterator; -import javassist.bytecode.LocalVariableAttribute; -import play.Logger; -import play.classloading.ApplicationClasses.ApplicationClass; -import play.exceptions.UnexpectedException; -import play.libs.F.T2; - -import java.lang.reflect.Method; -import java.util.*; - -/** - * Track names of local variables + generate signature fields for Java 7 support - */ -public class LocalvariablesNamesEnhancerJava7 extends LocalvariablesNamesEnhancer { - - @Override - public void enhanceThisClass(ApplicationClass applicationClass) throws Exception { - if (isAnon(applicationClass)) { - return; - } - - CtClass ctClass = makeClass(applicationClass); - if (!ctClass.subtypeOf(classPool.get(LocalVariablesSupport.class.getName())) && !ctClass.getName().matches("^controllers\\..*\\$class$")) { - return; - } - - for (CtMethod method : ctClass.getDeclaredMethods()) { - - if (method.getName().contains("$")) { - // Generated method, skip - continue; - } - - // Signatures names - CodeAttribute codeAttribute = (CodeAttribute) method.getMethodInfo().getAttribute("Code"); - if (codeAttribute == null || Modifier.isAbstract(method.getModifiers())) { - continue; - } - LocalVariableAttribute localVariableAttribute = (LocalVariableAttribute) codeAttribute.getAttribute("LocalVariableTable"); - List> parameterNames = new ArrayList<>(); - - if (localVariableAttribute == null) { - if(method.getParameterTypes().length > 0) - continue; - } else { - if(localVariableAttribute.tableLength() < method.getParameterTypes().length + (Modifier.isStatic(method.getModifiers()) ? 0 : 1)) { - Logger.warn("weird: skipping method %s %s as its number of local variables is incorrect (lv=%s || lv.length=%s || params.length=%s || (isStatic? %s)", method.getReturnType().getName(), method.getLongName(), localVariableAttribute, localVariableAttribute != null ? localVariableAttribute.tableLength() : -1, method.getParameterTypes().length, Modifier.isStatic(method.getModifiers())); - } - for(int i=0; i(localVariableAttribute.startPc(i) + localVariableAttribute.index(i), localVariableAttribute.variableName(i))); - } - } - parameterNames.sort(Comparator.comparing(o -> o._1)); - } - List names = new ArrayList<>(); - for (int i = 0; i < method.getParameterTypes().length + (Modifier.isStatic(method.getModifiers()) ? 0 : 1); i++) { - if (localVariableAttribute == null) { - continue; - } - try { - String name = parameterNames.get(i)._2; - if (!"this".equals(name)) { - names.add(name); - } - } catch (Exception e) { - Logger.warn(e, "While applying localvariables to %s.%s, param %s", ctClass.getName(), method.getName(), i); - } - } - StringBuilder iv = new StringBuilder(); - if (names.isEmpty()) { - iv.append("new String[0];"); - } else { - iv.append("new String[] {"); - for (Iterator i = names.iterator(); i.hasNext();) { - iv.append("\""); - String aliasedName = i.next(); - int dollarIndex = aliasedName.indexOf('$'); - if (dollarIndex >= 0) { - aliasedName = aliasedName.substring(0, dollarIndex); - } - iv.append(aliasedName); - iv.append("\""); - if (i.hasNext()) { - iv.append(","); - } - } - iv.append("};"); - } - - String sigField = "$" + method.getName() + computeMethodHash(method.getParameterTypes()); - try { // #1198 - ctClass.getDeclaredField(sigField); - } catch (NotFoundException nfe) { - CtField signature = CtField.make("public static String[] " + sigField + " = " + iv, ctClass); - ctClass.addField(signature); - } - - if (localVariableAttribute == null || isScala(applicationClass)) { - continue; - } - - // OK. - // Here after each local variable creation instruction, - // we insert a call to play.utils.LocalVariables.addVariable('var', var) - // without breaking everything... - for (int i = 0; i < localVariableAttribute.tableLength(); i++) { - - // name of the local variable - String name = localVariableAttribute.getConstPool().getUtf8Info(localVariableAttribute.nameIndex(i)); - - // Normalize the variable name - // For several reasons, both variables name and name$1 will be aliased to name - String aliasedName = name; - int dollarIndex = aliasedName.indexOf('$'); - if (dollarIndex >= 0) { - aliasedName = aliasedName.substring(0, dollarIndex); - } - - - if ("this".equals(name)) { - continue; - } - - /* DEBUG - IO.write(ctClass.toBytecode(), new File("/tmp/lv_"+applicationClass.name+".class")); - ctClass.defrost(); - */ - - try { - - // The instruction at which this local variable has been created - Integer pc = localVariableAttribute.startPc(i); - - // Move to the next instruction (insertionPc) - CodeIterator codeIterator = codeAttribute.iterator(); - codeIterator.move(pc); - pc = codeIterator.next(); - - Bytecode b = makeBytecodeForLVStore(method, localVariableAttribute.signature(i), name, localVariableAttribute.index(i)); - codeIterator.insert(pc, b.get()); - codeAttribute.setMaxStack(codeAttribute.computeMaxStack()); - - // Bon chaque instruction de cette méthode - while (codeIterator.hasNext()) { - int index = codeIterator.next(); - int op = codeIterator.byteAt(index); - - // DEBUG - // printOp(op); - - int varNumber = -1; - // The variable changes - if (storeByCode.containsKey(op)) { - varNumber = storeByCode.get(op); - if (varNumber == -2) { - varNumber = codeIterator.byteAt(index + 1); - } - } - - // Si c'est un store de la variable en cours d'examination - // et que c'est dans la frame d'utilisation de cette variable on trace l'affectation. - // (en fait la frame commence à localVariableAttribute.startPc(i)-1 qui est la première affectation - // mais aussi l'initialisation de la variable qui est deja tracé plus haut, donc on commence à localVariableAttribute.startPc(i)) - if (varNumber == localVariableAttribute.index(i) && index < localVariableAttribute.startPc(i) + localVariableAttribute.codeLength(i)) { - b = makeBytecodeForLVStore(method, localVariableAttribute.signature(i), aliasedName, varNumber); - codeIterator.insertEx(b.get()); - codeAttribute.setMaxStack(codeAttribute.computeMaxStack()); - } - } - } catch (Exception e) { - // Well probably a compiled optimizer (I hope so) - } - - } - - // init variable tracer - method.insertBefore("play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.enter();"); - method.insertAfter("play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.exit();", true); - - } - - // Done. - applicationClass.enhancedByteCode = ctClass.toBytecode(); - ctClass.defrost(); - } - - public static Integer computeMethodHash(CtClass[] parameters) { - String[] names = new String[parameters.length]; - for (int i = 0; i < parameters.length; i++) { - names[i] = parameters[i].getName(); - } - return computeMethodHash(names); - } - - public static Integer computeMethodHash(Class[] parameters) { - String[] names = new String[parameters.length]; - for (int i = 0; i < parameters.length; i++) { - Class param = parameters[i]; - names[i] = ""; - if (param.isArray()) { - int level = 1; - param = param.getComponentType(); - // Array of array - while (param.isArray()) { - level++; - param = param.getComponentType(); - } - names[i] = param.getName(); - for (int j = 0; j < level; j++) { - names[i] += "[]"; - } - } else { - names[i] = param.getName(); - } - } - return computeMethodHash(names); - } - - public static Integer computeMethodHash(String[] parameters) { - StringBuilder buffer = new StringBuilder(); - for (String param : parameters) { - buffer.append(param); - } - Integer hash = buffer.toString().hashCode(); - if (hash < 0) { - return -hash; - } - return hash; - } - - public static String[] parameterNames(Method method) { - try { - return (String[]) method.getDeclaringClass().getDeclaredField("$" + method.getName() + computeMethodHash(method.getParameterTypes())).get(null); - } - catch (Exception e) { - throw new UnexpectedException("Cannot read parameter names for " + method, e); - } - } -} diff --git a/framework/src/play/data/FileUpload.java b/framework/src/play/data/FileUpload.java index 5bbce365ba..8a031c1137 100644 --- a/framework/src/play/data/FileUpload.java +++ b/framework/src/play/data/FileUpload.java @@ -25,7 +25,7 @@ public FileUpload(FileItem fileItem) { this.fileItem = fileItem; File tmp = TempFilePlugin.createTempFolder(); // Check that the file has a name to avoid to override the field folder - if (fileItem.getName().trim().length() > 0) { + if (!fileItem.getName().isBlank()) { defaultFile = new File(tmp, FilenameUtils.getName(fileItem.getFieldName()) + File.separator + FilenameUtils.getName(fileItem.getName())); try { @@ -88,8 +88,8 @@ public String getFieldName() { } @Override - public Long getSize() { - return defaultFile == null ? null : defaultFile.length(); + public long getSize() { + return defaultFile == null ? 0L : defaultFile.length(); } @Override diff --git a/framework/src/play/data/MemoryUpload.java b/framework/src/play/data/MemoryUpload.java index 3489c1d4b2..c536ff74b2 100644 --- a/framework/src/play/data/MemoryUpload.java +++ b/framework/src/play/data/MemoryUpload.java @@ -44,7 +44,7 @@ public String getFieldName() { } @Override - public Long getSize() { + public long getSize() { return fileItem.getSize(); } diff --git a/framework/src/play/data/Upload.java b/framework/src/play/data/Upload.java index 9abcd63a85..b668fc8639 100644 --- a/framework/src/play/data/Upload.java +++ b/framework/src/play/data/Upload.java @@ -5,12 +5,12 @@ public interface Upload { - public byte[] asBytes(); - public InputStream asStream(); - public String getContentType(); - public String getFileName(); - public String getFieldName(); - public Long getSize(); - public boolean isInMemory(); - public File asFile(); + byte[] asBytes(); + InputStream asStream(); + String getContentType(); + String getFileName(); + String getFieldName(); + long getSize(); + boolean isInMemory(); + File asFile(); } diff --git a/framework/src/play/data/binding/Binder.java b/framework/src/play/data/binding/Binder.java index 0398cdbdc3..13a01a0eb8 100644 --- a/framework/src/play/data/binding/Binder.java +++ b/framework/src/play/data/binding/Binder.java @@ -202,7 +202,7 @@ protected static Object internalBind(ParamNode paramNode, Class clazz, Type t return MISSING; } - if (paramNode.getValues() == null && paramNode.getAllChildren().size() == 0) { + if (paramNode.getValues() == null && paramNode.getAllChildren().isEmpty()) { return MISSING; } @@ -531,7 +531,7 @@ private static Object bindCollection(Class clazz, Type type, ParamNode paramN logBindingNormalFailure(paramNode, e); // TODO debug or error? } } - if (hasMissing && l.size() == 0) { + if (hasMissing && l.isEmpty()) { return MISSING; } return l; diff --git a/framework/src/play/data/binding/Unbinder.java b/framework/src/play/data/binding/Unbinder.java index 2d740ada46..06a40facb5 100644 --- a/framework/src/play/data/binding/Unbinder.java +++ b/framework/src/play/data/binding/Unbinder.java @@ -185,7 +185,7 @@ private static void unBind(Map result, Object src, Class srcC } try { - internalUnbind(result, field.get(src), field.getType(), newName, allAnnotations.toArray(new Annotation[0])); + internalUnbind(result, field.get(src), field.getType(), newName, allAnnotations.toArray(Annotation[]::new)); } catch (IllegalArgumentException | IllegalAccessException e) { throw new RuntimeException("Object " + field.getType() + " won't unbind field " + newName, e); } finally{ diff --git a/framework/src/play/data/binding/types/BinaryBinder.java b/framework/src/play/data/binding/types/BinaryBinder.java index 54296c7ecf..8e8290d432 100644 --- a/framework/src/play/data/binding/types/BinaryBinder.java +++ b/framework/src/play/data/binding/types/BinaryBinder.java @@ -16,7 +16,7 @@ public class BinaryBinder implements TypeBinder { @SuppressWarnings("unchecked") @Override public Object bind(String name, Annotation[] annotations, String value, Class actualClass, Type genericType) { - if (value == null || value.trim().length() == 0) { + if (value == null || value.isBlank()) { return null; } try { @@ -26,7 +26,7 @@ public Object bind(String name, Annotation[] annotations, String value, Class ac List uploads = (List) req.args.get("__UPLOADS"); if(uploads != null){ for (Upload upload : uploads) { - if (upload.getFieldName().equals(value) && upload.getFileName().trim().length() > 0) { + if (upload.getFieldName().equals(value) && !upload.getFileName().isBlank()) { b.set(upload.asStream(), upload.getContentType()); return b; } diff --git a/framework/src/play/data/binding/types/ByteArrayArrayBinder.java b/framework/src/play/data/binding/types/ByteArrayArrayBinder.java index d038ab3970..c9ce2384cc 100644 --- a/framework/src/play/data/binding/types/ByteArrayArrayBinder.java +++ b/framework/src/play/data/binding/types/ByteArrayArrayBinder.java @@ -18,7 +18,7 @@ public class ByteArrayArrayBinder implements TypeBinder { @SuppressWarnings("unchecked") @Override public byte[][] bind(String name, Annotation[] annotations, String value, Class actualClass, Type genericType) { - if (value == null || value.trim().length() == 0) { + if (value == null || value.isBlank()) { return null; } Request req = Request.current(); @@ -32,7 +32,7 @@ public byte[][] bind(String name, Annotation[] annotations, String value, Class } } } - return byteList.toArray(new byte[byteList.size()][]); + return byteList.toArray(byte[][]::new); } return null; } diff --git a/framework/src/play/data/binding/types/ByteArrayBinder.java b/framework/src/play/data/binding/types/ByteArrayBinder.java index 043ce5e47a..666df97514 100644 --- a/framework/src/play/data/binding/types/ByteArrayBinder.java +++ b/framework/src/play/data/binding/types/ByteArrayBinder.java @@ -16,7 +16,7 @@ public class ByteArrayBinder implements TypeBinder { @SuppressWarnings("unchecked") @Override public byte[] bind(String name, Annotation[] annotations, String value, Class actualClass, Type genericType) { - if (value == null || value.trim().length() == 0) { + if (value == null || value.isBlank()) { return null; } Request req = Request.current(); diff --git a/framework/src/play/data/binding/types/CalendarBinder.java b/framework/src/play/data/binding/types/CalendarBinder.java index 54f6562e34..6cbc668a84 100644 --- a/framework/src/play/data/binding/types/CalendarBinder.java +++ b/framework/src/play/data/binding/types/CalendarBinder.java @@ -18,7 +18,7 @@ public class CalendarBinder implements TypeBinder { @Override public Calendar bind(String name, Annotation[] annotations, String value, Class actualClass, Type genericType) throws Exception { - if (value == null || value.trim().length() == 0) { + if (value == null || value.isBlank()) { return null; } Calendar cal = Calendar.getInstance(Lang.getLocale()); diff --git a/framework/src/play/data/binding/types/FileArrayBinder.java b/framework/src/play/data/binding/types/FileArrayBinder.java index b85a8e4a2d..0063cedbff 100644 --- a/framework/src/play/data/binding/types/FileArrayBinder.java +++ b/framework/src/play/data/binding/types/FileArrayBinder.java @@ -29,7 +29,7 @@ public File[] bind(String name, Annotation[] annotations, String value, Class ac if (uploads != null) { for (Upload upload : uploads) { if (upload.getFieldName().equals(value)) { - if (upload.getSize() != null && upload.getSize() > 0) { + if (upload.getSize() > 0L) { File file = upload.asFile(); if (file.length() > 0) { fileArray.add(file); @@ -38,7 +38,7 @@ public File[] bind(String name, Annotation[] annotations, String value, Class ac } } } - return fileArray.toArray(new File[fileArray.size()]); + return fileArray.toArray(File[]::new); } return null; } diff --git a/framework/src/play/data/binding/types/FileBinder.java b/framework/src/play/data/binding/types/FileBinder.java index 3cad419f4b..dcf9c6731b 100644 --- a/framework/src/play/data/binding/types/FileBinder.java +++ b/framework/src/play/data/binding/types/FileBinder.java @@ -26,7 +26,7 @@ public File bind(String name, Annotation[] annotations, String value, Class actu if (uploads != null) { for (Upload upload : uploads) { if (upload.getFieldName().equals(value)) { - if (upload.getFileName().trim().length() > 0) { + if (!upload.getFileName().isBlank()) { File file = upload.asFile(); return file; } diff --git a/framework/src/play/data/binding/types/UploadArrayBinder.java b/framework/src/play/data/binding/types/UploadArrayBinder.java index f57bb9f5ed..eec422b37e 100644 --- a/framework/src/play/data/binding/types/UploadArrayBinder.java +++ b/framework/src/play/data/binding/types/UploadArrayBinder.java @@ -32,7 +32,7 @@ public Upload[] bind(String name, Annotation[] annotations, String value, Class uploadArray.add(upload); } } - return uploadArray.toArray(new Upload[uploadArray.size()]); + return uploadArray.toArray(Upload[]::new); } } return null; diff --git a/framework/src/play/data/binding/types/UploadBinder.java b/framework/src/play/data/binding/types/UploadBinder.java index 2fd855cdaa..b8580f89f1 100644 --- a/framework/src/play/data/binding/types/UploadBinder.java +++ b/framework/src/play/data/binding/types/UploadBinder.java @@ -27,7 +27,7 @@ public Object bind(String name, Annotation[] annotations, String value, Class ac List uploads = (List) req.args.get("__UPLOADS"); if (uploads != null) { for (Upload upload : uploads) { - if (upload.getFieldName().equals(value) && upload.getFileName().trim().length() > 0) { + if (upload.getFieldName().equals(value) && !upload.getFileName().isBlank()) { return upload; } } diff --git a/framework/src/play/data/parsing/ApacheMultipartParser.java b/framework/src/play/data/parsing/ApacheMultipartParser.java index 557eb88319..7bde9aeabc 100644 --- a/framework/src/play/data/parsing/ApacheMultipartParser.java +++ b/framework/src/play/data/parsing/ApacheMultipartParser.java @@ -596,12 +596,12 @@ public Map parse(InputStream body) { * The maximum size permitted for the complete request, as opposed to * {@link #maxFileSize}. A value of -1 indicates no maximum. */ - private final long maxRequestSize = Integer.parseInt(Play.configuration.getProperty("upload.maxRequestSize", "-1")); + private final long maxRequestSize = Long.parseLong(Play.configuration.getProperty("upload.maxRequestSize", "-1")); /** * The maximum size permitted for a single uploaded file, as opposed to * {@link #maxRequestSize}. A value of -1 indicates no maximum. */ - private final long maxFileSize = Integer.parseInt(Play.configuration.getProperty("upload.maxFileSize", "-1")); + private final long maxFileSize = Long.parseLong(Play.configuration.getProperty("upload.maxFileSize", "-1")); // ------------------------------------------------------ Protected methods diff --git a/framework/src/play/data/parsing/UrlEncodedParser.java b/framework/src/play/data/parsing/UrlEncodedParser.java index 1ebdf5233c..813dc1a5db 100644 --- a/framework/src/play/data/parsing/UrlEncodedParser.java +++ b/framework/src/play/data/parsing/UrlEncodedParser.java @@ -56,7 +56,7 @@ public Map parse(InputStream is) { } String data = os.toString(encoding); - if (data.length() == 0) { + if (data.isEmpty()) { //data is empty - can skip the rest return new HashMap<>(0); } @@ -94,7 +94,7 @@ public Map parse(InputStream is) { } else { key = keyValue; } - if (key.length()>0) { + if (!key.isEmpty()) { Utils.Maps.mergeValueInMap(params, key, value); } } diff --git a/framework/src/play/data/validation/EmailCheck.java b/framework/src/play/data/validation/EmailCheck.java index ca91c7f642..891ee04c9c 100644 --- a/framework/src/play/data/validation/EmailCheck.java +++ b/framework/src/play/data/validation/EmailCheck.java @@ -19,7 +19,7 @@ public void configure(Email email) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) { value = Validation.willBeValidated(value); - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } return emailPattern.matcher(value.toString()).matches(); diff --git a/framework/src/play/data/validation/IPv4AddressCheck.java b/framework/src/play/data/validation/IPv4AddressCheck.java index 7e58c62645..4ef4b5a54d 100644 --- a/framework/src/play/data/validation/IPv4AddressCheck.java +++ b/framework/src/play/data/validation/IPv4AddressCheck.java @@ -18,7 +18,7 @@ public void configure(IPv4Address ipv4Address) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) throws OValException { - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } try { diff --git a/framework/src/play/data/validation/IPv6AddressCheck.java b/framework/src/play/data/validation/IPv6AddressCheck.java index e022d8d1ad..5464b6f4c5 100644 --- a/framework/src/play/data/validation/IPv6AddressCheck.java +++ b/framework/src/play/data/validation/IPv6AddressCheck.java @@ -21,7 +21,7 @@ public void configure(IPv6Address phone) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) throws OValException { - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } try { diff --git a/framework/src/play/data/validation/InFutureCheck.java b/framework/src/play/data/validation/InFutureCheck.java index e31d970568..3c44905cf7 100644 --- a/framework/src/play/data/validation/InFutureCheck.java +++ b/framework/src/play/data/validation/InFutureCheck.java @@ -25,11 +25,11 @@ public class InFutureCheck extends AbstractAnnotationCheck { @Override public void configure(InFuture future) { try { - this.reference = future.value().equals("") ? new Date() : AlternativeDateFormat.getDefaultFormatter().parse(future.value()); + this.reference = future.value().isEmpty() ? new Date() : AlternativeDateFormat.getDefaultFormatter().parse(future.value()); } catch (ParseException ex) { throw new UnexpectedException("Cannot parse date " +future.value(), ex); } - if(!future.value().equals("") && future.message().equals(mes)) { + if(!future.value().isEmpty() && future.message().equals(mes)) { setMessage("validation.after"); } else { setMessage(future.message()); @@ -42,30 +42,30 @@ public boolean isSatisfied(Object validatedObject, Object value, OValContext con if (value == null) { return true; } - if (value instanceof Date) { + if (value instanceof Date v) { try { - return reference.before((Date)value); + return reference.before(v); } catch (Exception e) { return false; } } - if (value instanceof Long) { + if (value instanceof Long v) { try { - return reference.before(new Date((Long) value)); + return reference.before(new Date(v)); } catch (Exception e) { return false; } } - if (value instanceof LocalDate) { + if (value instanceof LocalDate v) { try { - return reference.before(Date.from(((LocalDate) value).atStartOfDay(ZoneId.systemDefault()).toInstant())); + return reference.before(Date.from(v.atStartOfDay(ZoneId.systemDefault()).toInstant())); } catch (Exception e) { return false; } } - if (value instanceof LocalDateTime) { + if (value instanceof LocalDateTime v) { try { - return reference.before(Date.from(((LocalDateTime) value).atZone(ZoneId.systemDefault()).toInstant())); + return reference.before(Date.from(v.atZone(ZoneId.systemDefault()).toInstant())); } catch (Exception e) { return false; } diff --git a/framework/src/play/data/validation/InPastCheck.java b/framework/src/play/data/validation/InPastCheck.java index 30f349cb6b..4f3dd54654 100644 --- a/framework/src/play/data/validation/InPastCheck.java +++ b/framework/src/play/data/validation/InPastCheck.java @@ -21,11 +21,11 @@ public class InPastCheck extends AbstractAnnotationCheck { @Override public void configure(InPast past) { try { - this.reference = past.value().equals("") ? new Date() : AlternativeDateFormat.getDefaultFormatter().parse(past.value()); + this.reference = past.value().isEmpty() ? new Date() : AlternativeDateFormat.getDefaultFormatter().parse(past.value()); } catch (ParseException ex) { throw new UnexpectedException("Cannot parse date " + past.value(), ex); } - if (!past.value().equals("") && past.message().equals(mes)) { + if (!past.value().isEmpty() && past.message().equals(mes)) { setMessage("validation.before"); } else { setMessage(past.message()); @@ -38,16 +38,16 @@ public boolean isSatisfied(Object validatedObject, Object value, OValContext con if (value == null) { return true; } - if (value instanceof Date) { + if (value instanceof Date v) { try { - return reference.after((Date) value); + return reference.after(v); } catch (Exception e) { return false; } } - if (value instanceof Long) { + if (value instanceof Long v) { try { - return reference.after(new Date((Long) value)); + return reference.after(new Date(v)); } catch (Exception e) { return false; } diff --git a/framework/src/play/data/validation/IsTrueCheck.java b/framework/src/play/data/validation/IsTrueCheck.java index 2db5d1725f..9faa6c6006 100644 --- a/framework/src/play/data/validation/IsTrueCheck.java +++ b/framework/src/play/data/validation/IsTrueCheck.java @@ -19,23 +19,23 @@ public boolean isSatisfied(Object validatedObject, Object value, OValContext con if (value == null) { return false; } - if (value instanceof String) { + if (value instanceof String v) { try { - return Boolean.parseBoolean(value.toString()); + return Boolean.parseBoolean(v); } catch (Exception e) { return false; } } - if (value instanceof Number) { + if (value instanceof Number v) { try { - return ((Number) value).doubleValue() != 0; + return v.doubleValue() != 0; } catch (Exception e) { return false; } } - if (value instanceof Boolean) { + if (value instanceof Boolean v) { try { - return ((Boolean) value); + return v; } catch (Exception e) { return false; } diff --git a/framework/src/play/data/validation/MatchCheck.java b/framework/src/play/data/validation/MatchCheck.java index fbe6d62f48..294e3ad9de 100644 --- a/framework/src/play/data/validation/MatchCheck.java +++ b/framework/src/play/data/validation/MatchCheck.java @@ -22,7 +22,7 @@ public void configure(Match match) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) { requireMessageVariablesRecreation(); - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } return pattern.matcher(value.toString()).matches(); diff --git a/framework/src/play/data/validation/MaxCheck.java b/framework/src/play/data/validation/MaxCheck.java index c38d95aa14..e22ec2ccfe 100644 --- a/framework/src/play/data/validation/MaxCheck.java +++ b/framework/src/play/data/validation/MaxCheck.java @@ -25,16 +25,16 @@ public boolean isSatisfied(Object validatedObject, Object value, OValContext con if (value == null) { return true; } - if (value instanceof String) { + if (value instanceof String v) { try { - return Double.parseDouble(value.toString()) <= max; + return Double.parseDouble(v) <= max; } catch (Exception e) { return false; } } - if (value instanceof Number) { + if (value instanceof Number v) { try { - return ((Number) value).doubleValue() <= max; + return v.doubleValue() <= max; } catch (Exception e) { return false; } diff --git a/framework/src/play/data/validation/MaxSizeCheck.java b/framework/src/play/data/validation/MaxSizeCheck.java index 04d20880a9..30bc8a9850 100644 --- a/framework/src/play/data/validation/MaxSizeCheck.java +++ b/framework/src/play/data/validation/MaxSizeCheck.java @@ -22,7 +22,7 @@ public void configure(MaxSize annotation) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) { requireMessageVariablesRecreation(); - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } return value.toString().length() <= maxSize; diff --git a/framework/src/play/data/validation/MinSizeCheck.java b/framework/src/play/data/validation/MinSizeCheck.java index 94638cc77d..c2d92b60f1 100644 --- a/framework/src/play/data/validation/MinSizeCheck.java +++ b/framework/src/play/data/validation/MinSizeCheck.java @@ -22,7 +22,7 @@ public void configure(MinSize annotation) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) { requireMessageVariablesRecreation(); - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } return value.toString().length() >= minSize; diff --git a/framework/src/play/data/validation/PhoneCheck.java b/framework/src/play/data/validation/PhoneCheck.java index 3aade43327..526e834673 100644 --- a/framework/src/play/data/validation/PhoneCheck.java +++ b/framework/src/play/data/validation/PhoneCheck.java @@ -21,7 +21,7 @@ public void configure(Phone phone) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) throws OValException { - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } return phonePattern.matcher(value.toString()).matches(); diff --git a/framework/src/play/data/validation/RangeCheck.java b/framework/src/play/data/validation/RangeCheck.java index df64c55882..6a3ef4c04f 100644 --- a/framework/src/play/data/validation/RangeCheck.java +++ b/framework/src/play/data/validation/RangeCheck.java @@ -27,17 +27,17 @@ public boolean isSatisfied(Object validatedObject, Object value, OValContext con if (value == null) { return true; } - if (value instanceof String) { + if (value instanceof String s) { try { - double v = Double.parseDouble(value.toString()); + double v = Double.parseDouble(s); return v >= min && v <= max; } catch (Exception e) { return false; } } - if (value instanceof Number) { + if (value instanceof Number v) { try { - return ((Number) value).doubleValue() >= min && ((Number) value).doubleValue() <= max; + return v.doubleValue() >= min && v.doubleValue() <= max; } catch (Exception e) { return false; } diff --git a/framework/src/play/data/validation/RequiredCheck.java b/framework/src/play/data/validation/RequiredCheck.java index 75f18f6909..932a310ffc 100644 --- a/framework/src/play/data/validation/RequiredCheck.java +++ b/framework/src/play/data/validation/RequiredCheck.java @@ -17,14 +17,14 @@ public boolean isSatisfied(Object validatedObject, Object value, OValContext con if (value == null) { return false; } - if (value instanceof String) { - return value.toString().trim().length() > 0; + if (value instanceof String v) { + return !v.isBlank(); } - if (value instanceof Collection) { - return ((Collection)value).size() > 0; + if (value instanceof Collection v) { + return !v.isEmpty(); } - if (value instanceof BinaryField) { - return ((BinaryField)value).exists(); + if (value instanceof BinaryField v) { + return v.exists(); } if (value.getClass().isArray()) { try { diff --git a/framework/src/play/data/validation/URLCheck.java b/framework/src/play/data/validation/URLCheck.java index f109a5db1c..6ffb55847b 100644 --- a/framework/src/play/data/validation/URLCheck.java +++ b/framework/src/play/data/validation/URLCheck.java @@ -19,7 +19,7 @@ public void configure(URL url) { @Override public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) { - if (value == null || value.toString().length() == 0) { + if (value == null || value.toString().isEmpty()) { return true; } return urlPattern.matcher(value.toString()).matches(); diff --git a/framework/src/play/data/validation/UniqueCheck.java b/framework/src/play/data/validation/UniqueCheck.java index 564e479aae..253df217f1 100755 --- a/framework/src/play/data/validation/UniqueCheck.java +++ b/framework/src/play/data/validation/UniqueCheck.java @@ -37,7 +37,7 @@ public Map createMessageVariables() { private String[] getPropertyNames(String uniqueKey) { String completeUniqueKey; - if (uniqueKeyContext.length() > 0) { + if (!uniqueKeyContext.isEmpty()) { completeUniqueKey = uniqueKeyContext + ";" + uniqueKey; } else { completeUniqueKey = uniqueKey; diff --git a/framework/src/play/data/validation/Validation.java b/framework/src/play/data/validation/Validation.java index a96e0504f5..356d94eeff 100644 --- a/framework/src/play/data/validation/Validation.java +++ b/framework/src/play/data/validation/Validation.java @@ -499,12 +499,10 @@ static ValidationResult applyCheck(AbstractAnnotationCheck check, String key, try { ValidationResult result = new ValidationResult(); if (!check.isSatisfied(o, o, null, null)) { - Error error = new Error(key, check.getClass() - .getDeclaredField("mes").get(null) - + "", + Error error = new Error(key, String.valueOf(check.getClass() + .getDeclaredField("mes").get(null)), check.getMessageVariables() == null ? new String[0] - : check.getMessageVariables().values() - .toArray(new String[0]), + : check.getMessageVariables().values().toArray(String[]::new), check.getSeverity()); Validation.current().errors.add(error); result.error = error; @@ -520,7 +518,7 @@ static ValidationResult applyCheck(AbstractAnnotationCheck check, String key, static String getLocalName(Object o) { List names = LocalVariablesNamesTracer.getAllLocalVariableNames(o); - if (names.size() > 0) { + if (!names.isEmpty()) { return names.get(0); } return ""; diff --git a/framework/src/play/data/validation/ValidationPlugin.java b/framework/src/play/data/validation/ValidationPlugin.java index 7ea5add0fc..6b2121f112 100644 --- a/framework/src/play/data/validation/ValidationPlugin.java +++ b/framework/src/play/data/validation/ValidationPlugin.java @@ -77,8 +77,7 @@ public void beforeActionInvocation(Method actionMethod) { .getContext()).getParameterIndex()], violation .getMessage(), violation.getMessageVariables() == null ? new String[0] - : violation.getMessageVariables().values() - .toArray(new String[0]), violation + : violation.getMessageVariables().values().toArray(String[]::new), violation .getSeverity())); } Validation.current.get().errors.addAll(errors); diff --git a/framework/src/play/db/DBBrowserPlugin.java b/framework/src/play/db/DBBrowserPlugin.java index 90e41da36a..71565f393a 100644 --- a/framework/src/play/db/DBBrowserPlugin.java +++ b/framework/src/play/db/DBBrowserPlugin.java @@ -30,7 +30,7 @@ public boolean rawInvocation(Request request, Response response) throws Exceptio } String domain = request.domain; - if (domain.equals("")) { + if (domain.isEmpty()) { domain = "localhost"; } diff --git a/framework/src/play/db/Model.java b/framework/src/play/db/Model.java index 26320ae5f6..2a39040563 100644 --- a/framework/src/play/db/Model.java +++ b/framework/src/play/db/Model.java @@ -8,11 +8,11 @@ public interface Model { - public void _save(); - public void _delete(); - public Object _key(); + void _save(); + void _delete(); + Object _key(); - public static class Property { + class Property { public String name; public Class type; @@ -26,26 +26,26 @@ public static class Property { } - public static interface Choices { + interface Choices { - public List list(); + List list(); } - public static interface Factory { + interface Factory { - public String keyName(); - public Class keyType(); - public Object keyValue(Model m); - public Model findById(Object id); - public List fetch(int offset, int length, String orderBy, String orderDirection, List properties, String keywords, String where); - public Long count(List properties, String keywords, String where); - public void deleteAll(); - public List listProperties(); + String keyName(); + Class keyType(); + Object keyValue(Model m); + Model findById(Object id); + List fetch(int offset, int length, String orderBy, String orderDirection, List properties, String keywords, String where); + long count(List properties, String keywords, String where); + void deleteAll(); + List listProperties(); } - public static class Manager { + class Manager { public static Model.Factory factoryFor(Class clazz) { if(Model.class.isAssignableFrom(clazz)) { @@ -59,13 +59,13 @@ public static Model.Factory factoryFor(Class clazz) { } - public static interface BinaryField { + interface BinaryField { - public InputStream get(); - public void set(InputStream is, String type); - public long length(); - public String type(); - public boolean exists(); + InputStream get(); + void set(InputStream is, String type); + long length(); + String type(); + boolean exists(); } diff --git a/framework/src/play/db/helper/JdbcResultFactory.java b/framework/src/play/db/helper/JdbcResultFactory.java index 3a54c1f420..f10978f2ec 100644 --- a/framework/src/play/db/helper/JdbcResultFactory.java +++ b/framework/src/play/db/helper/JdbcResultFactory.java @@ -5,8 +5,8 @@ public interface JdbcResultFactory { - public void init(ResultSet result) throws SQLException; + void init(ResultSet result) throws SQLException; - public T create(ResultSet result) throws SQLException; + T create(ResultSet result) throws SQLException; } diff --git a/framework/src/play/db/helper/SqlQuery.java b/framework/src/play/db/helper/SqlQuery.java index bdb84b8679..435607ecae 100644 --- a/framework/src/play/db/helper/SqlQuery.java +++ b/framework/src/play/db/helper/SqlQuery.java @@ -62,12 +62,12 @@ public Concat append(Object obj) { String text; if (obj != null) { String objStr = obj.toString(); - if (objStr.length() > 0) text = objStr; + if (!objStr.isEmpty()) text = objStr; else text = defaultValue; } else text = defaultValue; if (text != null) { - if (expr.length() > 0) { + if (!expr.isEmpty()) { if (separator == null) throw new NullPointerException(); expr += separator; } @@ -118,7 +118,7 @@ else if (param instanceof Iterable) { public static String whereIn(String column, Object param) { String value = inlineParam(param); - if (value.length() == 0) return value; + if (value.isEmpty()) return value; String operator; if (param instanceof Object[]) { diff --git a/framework/src/play/db/helper/SqlUnion.java b/framework/src/play/db/helper/SqlUnion.java index 4f0569e0ca..176294e68d 100644 --- a/framework/src/play/db/helper/SqlUnion.java +++ b/framework/src/play/db/helper/SqlUnion.java @@ -30,7 +30,7 @@ public SqlUnion(SqlUnion src) { private void unionSep(String separator, SqlSelect ... expr) { for (SqlSelect query : expr) { String sql = query.toString(); - if (sql.length()>0) sql = "(" + sql + ")"; + if (!sql.isEmpty()) sql = "(" + sql + ")"; union.separator(separator).append(sql); params.addAll(query.getParams()); } diff --git a/framework/src/play/db/jpa/GenericModel.java b/framework/src/play/db/jpa/GenericModel.java index dfb0776c20..df9a8c3d4f 100644 --- a/framework/src/play/db/jpa/GenericModel.java +++ b/framework/src/play/db/jpa/GenericModel.java @@ -212,7 +212,7 @@ public static T edit(String dbName, ParamNode rootParamNode, // Remove it to prevent us from finding it again later fieldParamNode.removeChild(keyName, removedNodesList); for (String _id : ids) { - if (_id == null || _id.equals("")) { + if (_id == null || _id.isEmpty()) { continue; } @@ -246,14 +246,14 @@ public static T edit(String dbName, ParamNode rootParamNode, // Remove only the key to prevent us from finding it again later // This how the old impl does it.. fieldParamNode.removeChild(keyName, removedNodesList); - if (fieldParamNode.getAllChildren().size() == 0) { + if (fieldParamNode.getAllChildren().isEmpty()) { // remove the whole node.. paramNode.removeChild(field.getName(), removedNodesList); } } - } else if (ids != null && ids.length > 0 && ids[0].equals("")) { + } else if (ids != null && ids.length > 0 && ids[0].isEmpty()) { bw.set(field.getName(), o, null); // Remove the key to prevent us from finding it again later fieldParamNode.removeChild(keyName, removedNodesList); @@ -563,8 +563,8 @@ public JPAQuery bind(String name, Object param) { if (param.getClass().isArray()) { param = Arrays.asList((Object[]) param); } - if (param instanceof Integer) { - param = ((Integer) param).longValue(); + if (param instanceof Integer v) { + param = v.longValue(); } query.setParameter(name, param); return this; diff --git a/framework/src/play/db/jpa/JPAModelLoader.java b/framework/src/play/db/jpa/JPAModelLoader.java index ebeebec61d..ff5acd75c2 100644 --- a/framework/src/play/db/jpa/JPAModelLoader.java +++ b/framework/src/play/db/jpa/JPAModelLoader.java @@ -89,7 +89,7 @@ public List fetch(int offset, int size, String orderBy, String order, Lis StringBuilder q = new StringBuilder("from ").append(this.clazz.getName()); if (keywords != null && !keywords.isEmpty()) { String searchQuery = this.getSearchQuery(searchFields); - if (!searchQuery.equals("")) { + if (!searchQuery.isEmpty()) { q.append(" where (").append(searchQuery).append(")"); } q.append((where != null ? " and " + where : "")); @@ -108,7 +108,7 @@ public List fetch(int offset, int size, String orderBy, String order, Lis q.append( " order by ").append(orderBy).append(" ").append(order); String jpql = q.toString(); Query query = JPA.em(this.dbName).createQuery(jpql); - if (keywords != null && !keywords.equals("") && jpql.indexOf("?1") != -1) { + if (keywords != null && !keywords.isEmpty() && jpql.indexOf("?1") != -1) { query.setParameter(1, "%" + keywords.toLowerCase() + "%"); } query.setFirstResult(offset); @@ -117,22 +117,22 @@ public List fetch(int offset, int size, String orderBy, String order, Lis } @Override - public Long count(List searchFields, String keywords, String where) { + public long count(List searchFields, String keywords, String where) { String q = "select count(*) from " + this.clazz.getName() + " e"; - if (keywords != null && !keywords.equals("")) { + if (keywords != null && !keywords.isEmpty()) { String searchQuery = getSearchQuery(searchFields); - if (!searchQuery.equals("")) { + if (!searchQuery.isEmpty()) { q += " where (" + searchQuery + ")"; } q += (where != null ? " and " + where : ""); } else { q += (where != null ? " where " + where : ""); } - Query query = JPA.em(this.dbName).createQuery(q); - if (keywords != null && !keywords.equals("") && q.indexOf("?1") != -1) { + var query = JPA.em(this.dbName).createQuery(q, Long.class); + if (keywords != null && !keywords.isEmpty() && q.indexOf("?1") != -1) { query.setParameter(1, "%" + keywords.toLowerCase() + "%"); } - return Long.decode(query.getSingleResult().toString()); + return query.getSingleResult(); } @Override @@ -370,7 +370,7 @@ Field[] keyFields() { } c = c.getSuperclass(); } - Field[] f = fields.toArray(new Field[fields.size()]); + Field[] f = fields.toArray(Field[]::new); if (f.length == 0) { throw new UnexpectedException("Cannot get the object @Id for an object of type " + clazz); } @@ -385,7 +385,7 @@ String getSearchQuery(List searchFields) { boolean forceSearch = searchFields == null || searchFields.isEmpty(); for (Model.Property property : this.listProperties()) { if (property.isSearchable && (forceSearch || searchFields.contains(property.name))) { - if (q.length() > 0) { + if (!q.isEmpty()) { q.append(" or "); } q.append("lower("); @@ -407,7 +407,7 @@ Model.Property buildProperty(final Field field) { if (Model.class.isAssignableFrom(field.getType())) { if (field.isAnnotationPresent(OneToOne.class)) { - if (field.getAnnotation(OneToOne.class).mappedBy().equals("")) { + if (field.getAnnotation(OneToOne.class).mappedBy().isEmpty()) { modelProperty.isRelation = true; modelProperty.relationType = field.getType(); final String modelDbName = JPA.getDBName(modelProperty.relationType); @@ -424,7 +424,7 @@ Model.Property buildProperty(final Field field) { if (Collection.class.isAssignableFrom(field.getType())) { final Class fieldType = (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; if (field.isAnnotationPresent(OneToMany.class)) { - if (field.getAnnotation(OneToMany.class).mappedBy().equals("")) { + if (field.getAnnotation(OneToMany.class).mappedBy().isEmpty()) { modelProperty.isRelation = true; modelProperty.isMultiple = true; modelProperty.relationType = fieldType; @@ -433,7 +433,7 @@ Model.Property buildProperty(final Field field) { } } if (field.isAnnotationPresent(ManyToMany.class)) { - if (field.getAnnotation(ManyToMany.class).mappedBy().equals("")) { + if (field.getAnnotation(ManyToMany.class).mappedBy().isEmpty()) { modelProperty.isRelation = true; modelProperty.isMultiple = true; modelProperty.relationType = fieldType; diff --git a/framework/src/play/db/jpa/JPAPlugin.java b/framework/src/play/db/jpa/JPAPlugin.java index 48b332be79..eff285af28 100644 --- a/framework/src/play/db/jpa/JPAPlugin.java +++ b/framework/src/play/db/jpa/JPAPlugin.java @@ -166,7 +166,7 @@ private List> entityClasses(String dbName) { // Add entities String[] moreEntities = Play.configuration.getProperty("jpa.entities", "").split(", "); for (String entity : moreEntities) { - if (entity.trim().equals("")) { + if (entity.trim().isEmpty()) { continue; } try { @@ -205,7 +205,7 @@ protected PersistenceUnitInfoImpl persistenceUnitInfo(String dbName, Configurati private List mappingFiles(Configuration dbConfig) { String mappingFile = dbConfig.getProperty("jpa.mapping-file", ""); - return mappingFile != null && mappingFile.length() > 0 ? singletonList(mappingFile) : emptyList(); + return mappingFile == null || mappingFile.isEmpty() ? emptyList() : singletonList(mappingFile); } diff --git a/framework/src/play/db/jpa/JPQL.java b/framework/src/play/db/jpa/JPQL.java index 80944af1cb..d4b6d71358 100644 --- a/framework/src/play/db/jpa/JPQL.java +++ b/framework/src/play/db/jpa/JPQL.java @@ -189,25 +189,27 @@ public String createDeleteQuery(String entityName, String entityClass, String qu } public String createCountQuery(String dbName, String entityName, String entityClass, String query, Object... params) { - if (query.trim().toLowerCase().startsWith("select ")) { + var strippedAndLoweredQuery = (query = query.strip()).toLowerCase(); + if (strippedAndLoweredQuery.startsWith("select ")) { return query; } if (query.matches("^by[A-Z].*$")) { return "select count(*) from " + entityName + " where " + findByToJPQL(dbName, query); } - if (query.trim().toLowerCase().startsWith("from ")) { + if (strippedAndLoweredQuery.startsWith("from ")) { return "select count(*) " + query; } - if (query.trim().toLowerCase().startsWith("order by ")) { + if (strippedAndLoweredQuery.startsWith("order by ")) { return "select count(*) from " + entityName; } - if (query.trim().indexOf(' ') == -1 && query.trim().indexOf('=') == -1 && params != null && params.length == 1) { - query += " = ?1"; - } - if (query.trim().indexOf(' ') == -1 && query.trim().indexOf('=') == -1 && params == null) { - query += " = null"; + if (query.indexOf(' ') == -1 && query.indexOf('=') == -1) { + if (params == null) { + query += " = null"; + } else if (params.length == 1) { + query += " = ?1"; + } } - if (query.trim().length() == 0) { + if (query.isEmpty()) { return "select count(*) from " + entityName; } return "select count(*) from " + entityName + " e where " + query; @@ -228,12 +230,10 @@ public Query bindParameters(Query q, Object... params) { } public Query bindParameters(Query q, Map params) { - if (params == null) { - return q; - } - for (String key : params.keySet()) { - q.setParameter(key, params.get(key)); + if (params != null) { + params.forEach(q::setParameter); } + return q; } @@ -317,8 +317,7 @@ public String findByToJPQL(String dbName, String findBy) { protected static String extractProp(String part, String end) { String prop = part.substring(0, part.length() - end.length()); - prop = (prop.charAt(0) + "").toLowerCase() + prop.substring(1); - return prop; + return Character.toLowerCase(prop.charAt(0)) + prop.substring(1); } public static JPQL instance = null; } diff --git a/framework/src/play/db/jpa/Transactional.java b/framework/src/play/db/jpa/Transactional.java index f940197684..92667677b5 100644 --- a/framework/src/play/db/jpa/Transactional.java +++ b/framework/src/play/db/jpa/Transactional.java @@ -15,5 +15,5 @@ */ String value() default "default"; - public boolean readOnly() default false; + boolean readOnly() default false; } diff --git a/framework/src/play/deps/YamlParser.java b/framework/src/play/deps/YamlParser.java index d7c09701a9..020691c3d9 100644 --- a/framework/src/play/deps/YamlParser.java +++ b/framework/src/play/deps/YamlParser.java @@ -122,7 +122,7 @@ public ModuleDescriptorParser getParser() { } else { throw new Oops("Unknown configuration format -> " + conf); } - boolean exclude = options.containsKey("exclude") && options.get("exclude") instanceof Boolean ? (Boolean) options.get("exclude") : false; + boolean exclude = options.get("exclude") instanceof Boolean v ? v : false; allExcludes &= exclude; confs.add((exclude ? "!" : "") + confName); } @@ -189,9 +189,9 @@ public ModuleDescriptorParser getParser() { ModuleRevisionId depId = ModuleRevisionId.newInstance(m.group(1), m.group(2), m.group(3), extraAttributesMap); - boolean transitive = options.containsKey("transitive") && options.get("transitive") instanceof Boolean ? (Boolean) options.get("transitive") : transitiveDependencies; - boolean force = options.containsKey("force") && options.get("force") instanceof Boolean ? (Boolean) options.get("force") : false; - boolean changing = options.containsKey("changing") && options.get("changing") instanceof Boolean ? (Boolean) options.get("changing") : false; + boolean transitive = options.get("transitive") instanceof Boolean v ? v : transitiveDependencies; + boolean force = options.get("force") instanceof Boolean v ? v : false; + boolean changing = options.get("changing") instanceof Boolean v ? v : false; DefaultDependencyDescriptor depDescriptor = new DefaultDependencyDescriptor(descriptor, depId, force, changing, transitive); for (String conf : confs) { @@ -225,7 +225,7 @@ public ModuleDescriptorParser getParser() { // Ids boolean useIt = true; String currentId = System.getProperty("play.id"); - if (currentId == null || currentId.trim().equals("")) { + if (currentId == null || currentId.isBlank()) { currentId = "unset"; } if (options.containsKey("id")) { diff --git a/framework/src/play/i18n/Lang.java b/framework/src/play/i18n/Lang.java index 6c174bd948..c798debcbb 100644 --- a/framework/src/play/i18n/Lang.java +++ b/framework/src/play/i18n/Lang.java @@ -49,7 +49,7 @@ public static String get() { * @return false if the language is not supported by the application */ public static boolean set(String locale) { - if (locale.equals("") || Play.langs.contains(locale)) { + if (locale.isEmpty() || Play.langs.contains(locale)) { current.set(locale); return true; } else { @@ -149,7 +149,7 @@ private static void resolveFrom(Request request) { String cn = Play.configuration.getProperty("application.lang.cookie", "PLAY_LANG"); if (request.cookies.containsKey(cn)) { String localeFromCookie = request.cookies.get(cn).value; - if (localeFromCookie != null && localeFromCookie.trim().length() > 0) { + if (localeFromCookie != null && !localeFromCookie.isBlank()) { if (set(localeFromCookie)) { // we're using locale from cookie return; diff --git a/framework/src/play/i18n/Messages.java b/framework/src/play/i18n/Messages.java index 66d35b9b3d..b2b931269d 100644 --- a/framework/src/play/i18n/Messages.java +++ b/framework/src/play/i18n/Messages.java @@ -149,7 +149,7 @@ static Object[] coolStuff(String pattern, Object[] args) { int incrementalPosition = 1; while (matcher.find()) { String conversion = matcher.group(6); - Integer position; + int position; if (matcher.group(2) == null) { position = incrementalPosition++; } else { @@ -174,7 +174,7 @@ static Object[] coolStuff(String pattern, Object[] args) { try { // TODO: I think we need to type of direct bind -> primitive // and object binder - result[i] = Binder.directBind(null, args[i] + "", conversions[i], null); + result[i] = Binder.directBind(null, String.valueOf(args[i]), conversions[i], null); } catch (Exception e) { // Ignore result[i] = null; @@ -192,7 +192,7 @@ static Object[] coolStuff(String pattern, Object[] args) { * @return messages as a {@link java.util.Properties java.util.Properties} */ public static Properties all(String locale) { - if (locale == null || "".equals(locale)) { + if (locale == null || locale.isEmpty()) { return defaults; } Properties mergedMessages = new Properties(); diff --git a/framework/src/play/i18n/MessagesPlugin.java b/framework/src/play/i18n/MessagesPlugin.java index 6108190a3f..a165ad1f77 100644 --- a/framework/src/play/i18n/MessagesPlugin.java +++ b/framework/src/play/i18n/MessagesPlugin.java @@ -21,7 +21,7 @@ */ public class MessagesPlugin extends PlayPlugin { - static Long lastLoading = 0L; + static long lastLoading = 0L; private static final List includeMessageFilenames = new ArrayList<>(); diff --git a/framework/src/play/inject/BeanSource.java b/framework/src/play/inject/BeanSource.java index 3bbe282c6a..c10bec771e 100644 --- a/framework/src/play/inject/BeanSource.java +++ b/framework/src/play/inject/BeanSource.java @@ -2,6 +2,6 @@ public interface BeanSource { - public T getBeanOfType(Class clazz); + T getBeanOfType(Class clazz); } diff --git a/framework/src/play/jobs/JobsPlugin.java b/framework/src/play/jobs/JobsPlugin.java index 3a9594e31a..7d3b79e679 100644 --- a/framework/src/play/jobs/JobsPlugin.java +++ b/framework/src/play/jobs/JobsPlugin.java @@ -85,7 +85,7 @@ public String getStatus() { out.println(); out.println("Waiting jobs:"); out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~"); - ScheduledFuture[] q = executor.getQueue().toArray(new ScheduledFuture[executor.getQueue().size()]); + ScheduledFuture[] q = executor.getQueue().toArray(ScheduledFuture[]::new); for (ScheduledFuture task : q) { out.println(Java.extractUnderlyingCallable((FutureTask) task) + " will run in " + task.getDelay(TimeUnit.SECONDS) diff --git a/framework/src/play/libs/CronExpression.java b/framework/src/play/libs/CronExpression.java index eae5a93dd3..afd1beed97 100644 --- a/framework/src/play/libs/CronExpression.java +++ b/framework/src/play/libs/CronExpression.java @@ -1002,7 +1002,7 @@ protected Date getTimeAfter(Date afterTime) { // get second................................................. st = seconds.tailSet(sec); - if (st.size() != 0) { + if (!st.isEmpty()) { sec = st.first(); } else { sec = seconds.first(); @@ -1017,7 +1017,7 @@ protected Date getTimeAfter(Date afterTime) { // get minute................................................. st = minutes.tailSet(min); - if (st.size() != 0) { + if (!st.isEmpty()) { t = min; min = st.first(); } else { @@ -1038,7 +1038,7 @@ protected Date getTimeAfter(Date afterTime) { // get hour................................................... st = hours.tailSet(hr); - if (st.size() != 0) { + if (!st.isEmpty()) { t = hr; hr = st.first(); } else { @@ -1141,7 +1141,7 @@ protected Date getTimeAfter(Date afterTime) { day = daysOfMonth.first(); mon++; } - } else if (st.size() != 0) { + } else if (!st.isEmpty()) { t = day; day = st.first(); } else { @@ -1256,7 +1256,7 @@ protected Date getTimeAfter(Date afterTime) { int dow = daysOfWeek.first(); // desired // d-o-w st = daysOfWeek.tailSet(cDow); - if (st.size() > 0) { + if (!st.isEmpty()) { dow = st.first(); } @@ -1310,7 +1310,7 @@ protected Date getTimeAfter(Date afterTime) { // get month................................................... st = months.tailSet(mon); - if (st.size() != 0) { + if (!st.isEmpty()) { t = mon; mon = st.first(); } else { @@ -1338,7 +1338,7 @@ protected Date getTimeAfter(Date afterTime) { // get year................................................... st = years.tailSet(year); - if (st.size() != 0) { + if (!st.isEmpty()) { t = year; year = st.first(); } else { diff --git a/framework/src/play/libs/F.java b/framework/src/play/libs/F.java index 44d8c9d5e7..5ee19db4e0 100644 --- a/framework/src/play/libs/F.java +++ b/framework/src/play/libs/F.java @@ -629,12 +629,11 @@ private void markAsRead(T value) { public static class IndexedEvent { private static final AtomicLong idGenerator = new AtomicLong(1); + public final long id = idGenerator.getAndIncrement(); public final M data; - public final Long id; public IndexedEvent(M data) { this.data = data; - this.id = idGenerator.getAndIncrement(); } @Override @@ -718,10 +717,10 @@ void notifyNewEvent() { static class FilterTask extends Promise>> { - final Long lastEventSeen; + final long lastEventSeen; final List> newEvents = new ArrayList<>(); - public FilterTask(Long lastEventSeen) { + public FilterTask(long lastEventSeen) { this.lastEventSeen = lastEventSeen; } diff --git a/framework/src/play/libs/Mail.java b/framework/src/play/libs/Mail.java index 6d1fabff8f..f11f2defb3 100644 --- a/framework/src/play/libs/Mail.java +++ b/framework/src/play/libs/Mail.java @@ -232,12 +232,12 @@ public boolean isDone() { @Override public Boolean get() { - return result.length() == 0; + return result.isEmpty(); } @Override public Boolean get(long timeout, TimeUnit unit) { - return result.length() == 0; + return result.isEmpty(); } }; } diff --git a/framework/src/play/libs/MimeTypes.java b/framework/src/play/libs/MimeTypes.java index 9e653c1dca..ce13389c49 100644 --- a/framework/src/play/libs/MimeTypes.java +++ b/framework/src/play/libs/MimeTypes.java @@ -46,7 +46,7 @@ public static String getMimeType(String filename, String defaultMimeType) { if (matcher.matches()) { ext = matcher.group(1); } - if (ext.length() > 0) { + if (!ext.isEmpty()) { String mimeType = mimetypes().getProperty(ext); if (mimeType == null) { return defaultMimeType; diff --git a/framework/src/play/libs/OpenID.java b/framework/src/play/libs/OpenID.java index b5f6b04a87..1bc7450955 100644 --- a/framework/src/play/libs/OpenID.java +++ b/framework/src/play/libs/OpenID.java @@ -229,10 +229,10 @@ public static String normalize(String openID) { try { URI url = new URI(openID); String frag = url.getRawFragment(); - if (frag != null && frag.length() > 0) { + if (frag != null && !frag.isEmpty()) { openID = openID.replace("#" + frag, ""); } - if (url.getPath().equals("")) { + if (url.getPath().isEmpty()) { openID += "/"; } openID = new URI(openID).toString(); diff --git a/framework/src/play/libs/Time.java b/framework/src/play/libs/Time.java index 6a21a14846..20e6f365a4 100644 --- a/framework/src/play/libs/Time.java +++ b/framework/src/play/libs/Time.java @@ -40,14 +40,11 @@ public static int parseDuration(String duration) { matcher.reset(); while (matcher.find()) { - if (matcher.group(3).equals("d")) { - seconds += Integer.parseInt(matcher.group(2)) * DAY; - } else if (matcher.group(3).equals("h")) { - seconds += Integer.parseInt(matcher.group(2)) * HOUR; - } else if (matcher.group(3).equals("mi") || matcher.group(3).equals("min") || matcher.group(3).equals("mn")) { - seconds += Integer.parseInt(matcher.group(2)) * MINUTE; - } else { - seconds += Integer.parseInt(matcher.group(2)); + switch (matcher.group(3)) { + case "d" -> seconds += Integer.parseInt(matcher.group(2)) * DAY; + case "h" -> seconds += Integer.parseInt(matcher.group(2)) * HOUR; + case "mi", "min", "mn" -> seconds += Integer.parseInt(matcher.group(2)) * MINUTE; + default -> seconds += Integer.parseInt(matcher.group(2)); } } diff --git a/framework/src/play/libs/WS.java b/framework/src/play/libs/WS.java index a47dad7ec9..bd9eedd533 100644 --- a/framework/src/play/libs/WS.java +++ b/framework/src/play/libs/WS.java @@ -228,9 +228,9 @@ public static WSRequest url(String url, String... params) { } public interface WSImpl { - public WSRequest newRequest(String url, String encoding); + WSRequest newRequest(String url, String encoding); - public void stop(); + void stop(); } public abstract static class WSRequest { @@ -640,7 +640,7 @@ protected String encode(String part) { protected String createQueryString() { StringBuilder sb = new StringBuilder(); for (String key : this.parameters.keySet()) { - if (sb.length() > 0) { + if (!sb.isEmpty()) { sb.append("&"); } Object value = this.parameters.get(key); @@ -696,7 +696,7 @@ public abstract static class HttpResponse { * * @return the status code of the http response */ - public abstract Integer getStatus(); + public abstract int getStatus(); /** * The HTTP status text diff --git a/framework/src/play/libs/XPath.java b/framework/src/play/libs/XPath.java index dd5b414815..2db4e36fee 100644 --- a/framework/src/play/libs/XPath.java +++ b/framework/src/play/libs/XPath.java @@ -51,7 +51,7 @@ public static List selectNodes(String path, Object node) { public static Node selectNode(String path, Object node, Map namespaces) { try { List nodes = selectNodes(path, node, namespaces); - if (nodes.size() == 0) { + if (nodes.isEmpty()) { return null; } return nodes.get(0); diff --git a/framework/src/play/libs/ws/WSAsync.java b/framework/src/play/libs/ws/WSAsync.java index 0fe1c70451..37a2fce5ad 100644 --- a/framework/src/play/libs/ws/WSAsync.java +++ b/framework/src/play/libs/ws/WSAsync.java @@ -107,7 +107,7 @@ public WSAsync() { confBuilder.setUserAgent(userAgent); } - if (keyStore != null && !keyStore.equals("")) { + if (keyStore != null && !keyStore.isEmpty()) { Logger.info("Keystore configured, loading from '%s', CA validation enabled : %s", keyStore, CAValidation); if (Logger.isTraceEnabled()) { @@ -529,7 +529,7 @@ private void checkFileBody(BoundRequestBuilder builder) { if (value instanceof Collection || value.getClass().isArray()) { Collection values = value.getClass().isArray() ? Arrays.asList((Object[]) value) : (Collection) value; for (Object v : values) { - if (sb.length() > 0) { + if (!sb.isEmpty()) { sb.append('&'); } sb.append(encode(key)); @@ -540,7 +540,7 @@ private void checkFileBody(BoundRequestBuilder builder) { // Since AHC is hard-coded to encode using UTF-8, we // must build // the content ourself.. - if (sb.length() > 0) { + if (!sb.isEmpty()) { sb.append('&'); } sb.append(encode(key)); @@ -643,7 +643,7 @@ public HttpAsyncResponse(Response response) { * @return the status code of the http response */ @Override - public Integer getStatus() { + public int getStatus() { return this.response.getStatusCode(); } diff --git a/framework/src/play/libs/ws/WSUrlFetch.java b/framework/src/play/libs/ws/WSUrlFetch.java index 093144bb06..6160757a55 100644 --- a/framework/src/play/libs/ws/WSUrlFetch.java +++ b/framework/src/play/libs/ws/WSUrlFetch.java @@ -208,7 +208,7 @@ private HttpURLConnection prepare(URL url, String method) { this.headers.put("Authorization", authString); } - if (keyStore != null && !keyStore.equals("")) { + if (keyStore != null && !keyStore.isEmpty()) { Logger.info("Keystore configured, loading from '%s', CA validation enabled : %s", keyStore, CAValidation); if (Logger.isTraceEnabled()) { Logger.trace("Keystore password : %s, SSLCTX : %s", keyStorePass, sslCTX); @@ -295,7 +295,7 @@ private void checkFileBody(HttpURLConnection connection) throws IOException { public static class HttpUrlfetchResponse extends HttpResponse { private String body; - private Integer status; + private int status; private String statusText; private Map> headersMap; @@ -333,7 +333,7 @@ public HttpUrlfetchResponse(HttpURLConnection connection) { * @return the status code of the http response */ @Override - public Integer getStatus() { + public int getStatus() { return status; } diff --git a/framework/src/play/mvc/ActionInvoker.java b/framework/src/play/mvc/ActionInvoker.java index 31e5e9daed..236c061922 100644 --- a/framework/src/play/mvc/ActionInvoker.java +++ b/framework/src/play/mvc/ActionInvoker.java @@ -151,7 +151,7 @@ public static void invoke(Http.Request request, Http.Response response) { // Check the cache (only for GET or HEAD) if ((request.method.equals("GET") || request.method.equals("HEAD")) && actionMethod.isAnnotationPresent(CacheFor.class)) { - CacheFor cacheFor = actionMethod.getAnnotation(CacheFor.class);; + CacheFor cacheFor = actionMethod.getAnnotation(CacheFor.class); cacheKey = cacheFor.id(); if ("".equals(cacheKey)) { // Generate a cache key for this request @@ -553,14 +553,14 @@ static Object invokeWithContinuation(Method method, Object instance, Object[] re Continuation nextContinuation = new Continuation(pStackRecorder); Request.current().args.put(C, nextContinuation); - if (trigger instanceof Long) { - throw new Suspend((Long) trigger); + if (trigger instanceof Long timeout) { + throw new Suspend(timeout); } - if (trigger instanceof Integer) { - throw new Suspend(((Integer) trigger).longValue()); + if (trigger instanceof Integer timeout) { + throw new Suspend(timeout.longValue()); } - if (trigger instanceof Future) { - throw new Suspend((Future) trigger); + if (trigger instanceof Future future) { + throw new Suspend(future); } throw new UnexpectedException("Unexpected continuation trigger -> " + trigger); diff --git a/framework/src/play/mvc/CookieSessionStore.java b/framework/src/play/mvc/CookieSessionStore.java index 30f41f6582..75c9f3f6f4 100644 --- a/framework/src/play/mvc/CookieSessionStore.java +++ b/framework/src/play/mvc/CookieSessionStore.java @@ -21,7 +21,7 @@ public Session restore() { int duration = Time.parseDuration(COOKIE_EXPIRE); long expiration = (duration * 1000l); - if (cookie != null && Play.started && cookie.value != null && !cookie.value.trim().equals("")) { + if (cookie != null && Play.started && cookie.value != null && !cookie.value.isBlank()) { String value = cookie.value; int firstDashIndex = value.indexOf('-'); if (firstDashIndex > -1) { diff --git a/framework/src/play/mvc/Http.java b/framework/src/play/mvc/Http.java index 53475d1c7c..fa679e17f7 100644 --- a/framework/src/play/mvc/Http.java +++ b/framework/src/play/mvc/Http.java @@ -220,11 +220,11 @@ public static class Request implements Serializable { /** * HTTP port */ - public Integer port; + public int port; /** * is HTTPS ? */ - public Boolean secure = false; + public boolean secure = false; /** * HTTP Headers */ @@ -468,8 +468,8 @@ protected void authorizationInit() { String username = decoded.substring(0, indexOf); String thePasswd = decoded.substring(indexOf + 1); - user = username.length() > 0 ? username : null; - password = thePasswd.length() > 0 ? thePasswd : null; + user = username.isEmpty() ? null : username; + password = thePasswd.isEmpty() ? null : thePasswd; } } @@ -560,7 +560,7 @@ public String getBase() { @Override public String toString() { - return method + " " + path + (querystring != null && querystring.length() > 0 ? "?" + querystring : ""); + return method + " " + path + (querystring == null || querystring.isEmpty() ? "" : "?" + querystring); } /** @@ -613,7 +613,7 @@ public static class Response { /** * Response status code */ - public Integer status = 200; + public int status = 200; /** * Response content type */ diff --git a/framework/src/play/mvc/Router.java b/framework/src/play/mvc/Router.java index 9325731584..35704f2c2c 100644 --- a/framework/src/play/mvc/Router.java +++ b/framework/src/play/mvc/Router.java @@ -275,7 +275,7 @@ static void parse(String content, String prefix, String fileAbsolutePath) { for (String line : content.split("\n")) { lineNumber++; line = line.trim().replaceAll("\\s+", " "); - if (line.length() == 0 || line.startsWith("#")) { + if (line.isEmpty() || line.startsWith("#")) { continue; } Matcher matcher = routePattern.matcher(line); @@ -663,7 +663,7 @@ public static ActionDefinition reverse(String action, Map args) qs = qs.substring(0, qs.length() - 1); } ActionDefinition actionDefinition = new ActionDefinition(); - actionDefinition.url = qs.length() == 0 ? path : path + "?" + qs; + actionDefinition.url = qs.isEmpty() ? path : path + "?" + qs; actionDefinition.method = route.method == null || route.method.equals("*") ? "GET" : route.method.toUpperCase(); actionDefinition.star = "*".equals(route.method); actionDefinition.action = action; @@ -938,7 +938,7 @@ public void compute() { } public void addParams(String params) { - if (params == null || params.length() < 1) { + if (params == null || params.isEmpty()) { return; } params = params.substring(1, params.length() - 1); @@ -954,7 +954,7 @@ public void addParams(String params) { // TODO: Add args names public void addFormat(String params) { - if (params == null || params.length() < 1) { + if (params == null || params.isEmpty()) { return; } params = params.trim(); @@ -1069,7 +1069,7 @@ static class Arg { String name; Pattern constraint; String defaultValue; - Boolean optional = false; + boolean optional = false; } @Override diff --git a/framework/src/play/mvc/Scope.java b/framework/src/play/mvc/Scope.java index 6bf3c5da1c..89869c7d52 100644 --- a/framework/src/play/mvc/Scope.java +++ b/framework/src/play/mvc/Scope.java @@ -108,7 +108,7 @@ public void put(String key, Object value) { if (value == null) { put(key, (String) null); } - put(key, value + ""); + put(key, String.valueOf(value)); } public void now(String key, String value) { diff --git a/framework/src/play/mvc/results/Status.java b/framework/src/play/mvc/results/Status.java index fc61afd746..1bdc737579 100644 --- a/framework/src/play/mvc/results/Status.java +++ b/framework/src/play/mvc/results/Status.java @@ -8,7 +8,7 @@ public class Status extends Result { private final int code; public Status(int code) { - super(code+""); + super(Integer.toString(code)); this.code = code; } diff --git a/framework/src/play/plugins/PluginCollection.java b/framework/src/play/plugins/PluginCollection.java index 2bf16f6643..47422a27d0 100644 --- a/framework/src/play/plugins/PluginCollection.java +++ b/framework/src/play/plugins/PluginCollection.java @@ -155,7 +155,7 @@ public void loadPlugins() { try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8))) { String line; while ((line = reader.readLine()) != null) { - if (line.trim().length() == 0) { + if (line.isBlank()) { continue; } String[] lineParts = line.split(":"); diff --git a/framework/src/play/server/FileService.java b/framework/src/play/server/FileService.java index 9b94575527..216e660a8d 100644 --- a/framework/src/play/server/FileService.java +++ b/framework/src/play/server/FileService.java @@ -219,7 +219,7 @@ private void initRanges() { ranges.add(new long[] { start, end }); } } - long[][] reducedRanges = reduceRanges(ranges.toArray(new long[0][])); + long[][] reducedRanges = reduceRanges(ranges.toArray(long[][]::new)); ByteRange[] byteRanges = new ByteRange[reducedRanges.length]; for(int i = 0; i < reducedRanges.length; i++) { long[] range = reducedRanges[i]; @@ -262,7 +262,7 @@ private static long[][] reduceRanges(long[]... chunks) { result.add(c1); } } - return result.toArray(new long[0][]); + return result.toArray(long[][]::new); } private static String makeRangeBodyHeader(String separator, String contentType, long start, long end, long fileLength) { diff --git a/framework/src/play/server/FlashPolicyHandler.java b/framework/src/play/server/FlashPolicyHandler.java deleted file mode 100644 index a3cc386af9..0000000000 --- a/framework/src/play/server/FlashPolicyHandler.java +++ /dev/null @@ -1,54 +0,0 @@ -package play.server; - -import org.jboss.netty.buffer.ChannelBuffer; -import org.jboss.netty.buffer.ChannelBuffers; -import org.jboss.netty.channel.Channel; -import org.jboss.netty.channel.ChannelFutureListener; -import org.jboss.netty.channel.ChannelHandlerContext; -import org.jboss.netty.handler.codec.frame.FrameDecoder; -import org.jboss.netty.util.CharsetUtil; - -public class FlashPolicyHandler extends FrameDecoder { - - private static final String XML = ""; - private ChannelBuffer policyResponse = ChannelBuffers.copiedBuffer(XML, CharsetUtil.UTF_8); - - /** - * Creates a handler allowing access from any domain and any port - */ - public FlashPolicyHandler() { - super(); - } - - /** - * Create a handler with a custom XML response. Useful for defining your own domains and ports. - * @param policyResponse Response XML to be passed back to a connecting client - */ - public FlashPolicyHandler(ChannelBuffer policyResponse) { - super(); - this.policyResponse = policyResponse; - } - - @Override - protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception { - if (buffer.readableBytes() < 2) { - return null; - } - - int magic1 = buffer.getUnsignedByte(buffer.readerIndex()); - int magic2 = buffer.getUnsignedByte(buffer.readerIndex() + 1); - boolean isFlashPolicyRequest = (magic1 == '<' && magic2 == 'p'); - - if (isFlashPolicyRequest) { - buffer.skipBytes(buffer.readableBytes()); // Discard everything - channel.write(policyResponse).addListener(ChannelFutureListener.CLOSE); - return null; - } - - // Remove ourselves, important since the byte length check at top can hinder frame decoding - // down the pipeline - ctx.getPipeline().remove(this); - return buffer.readBytes(buffer.readableBytes()); - } - -} diff --git a/framework/src/play/server/HttpServerPipelineFactory.java b/framework/src/play/server/HttpServerPipelineFactory.java index b740d8feae..279e0a324f 100644 --- a/framework/src/play/server/HttpServerPipelineFactory.java +++ b/framework/src/play/server/HttpServerPipelineFactory.java @@ -16,7 +16,7 @@ public class HttpServerPipelineFactory implements ChannelPipelineFactory { protected static final Map> classes = new HashMap<>(); - private final String pipelineConfig = Play.configuration.getProperty("play.netty.pipeline", "play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler"); + private final String pipelineConfig = Play.configuration.getProperty("play.netty.pipeline", "org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler"); @Override public ChannelPipeline getPipeline() throws Exception { diff --git a/framework/src/play/server/PlayHandler.java b/framework/src/play/server/PlayHandler.java index 85449fa972..6eb0bf83af 100644 --- a/framework/src/play/server/PlayHandler.java +++ b/framework/src/play/server/PlayHandler.java @@ -555,7 +555,7 @@ public Request parseRequest(ChannelHandlerContext ctx, HttpRequest nettyRequest, ChannelBuffer b = nettyRequest.getContent(); if (b instanceof FileChannelBuffer buffer) { // An error occurred - Integer max = Integer.valueOf(Play.configuration.getProperty("play.netty.maxContentLength", "-1")); + int max = Integer.parseInt(Play.configuration.getProperty("play.netty.maxContentLength", "-1")); body = buffer.getInputStream(); if (!(max == -1 || body.available() < max)) { @@ -1051,7 +1051,7 @@ private String getWebSocketLocation(HttpRequest req) { private void websocketHandshake(final ChannelHandlerContext ctx, HttpRequest req, MessageEvent messageEvent) throws Exception { - Integer max = Integer.valueOf(Play.configuration.getProperty("play.netty.maxContentLength", "65345")); + int max = Integer.parseInt(Play.configuration.getProperty("play.netty.maxContentLength", "65345")); // Upgrade the pipeline as the handshaker needs the HttpStream // Aggregator diff --git a/framework/src/play/server/StreamChunkAggregator.java b/framework/src/play/server/StreamChunkAggregator.java index a814c2bc42..74c7154de4 100644 --- a/framework/src/play/server/StreamChunkAggregator.java +++ b/framework/src/play/server/StreamChunkAggregator.java @@ -15,7 +15,7 @@ public class StreamChunkAggregator extends SimpleChannelUpstreamHandler { private volatile HttpMessage currentMessage; private volatile OutputStream out; - private static final int maxContentLength = Integer.valueOf(Play.configuration.getProperty("play.netty.maxContentLength", "-1")); + private static final int maxContentLength = Integer.parseInt(Play.configuration.getProperty("play.netty.maxContentLength", "-1")); private volatile File file; /** diff --git a/framework/src/play/server/ssl/SslHttpServerContextFactory.java b/framework/src/play/server/ssl/SslHttpServerContextFactory.java index 9146bd26c7..0d58ae293f 100644 --- a/framework/src/play/server/ssl/SslHttpServerContextFactory.java +++ b/framework/src/play/server/ssl/SslHttpServerContextFactory.java @@ -107,7 +107,7 @@ public PEMKeyManager() { final File hostCertFile = Play.getFile(p.getProperty("certificate.file", "conf/host.cert")); final Collection collection = new CertificateFactory().engineGenerateCertificates(new FileInputStream(hostCertFile)); - chain = (X509Certificate[]) collection.toArray(new X509Certificate[collection.size()]); + chain = (X509Certificate[]) collection.toArray(X509Certificate[]::new); } catch (Exception e) { Logger.error(e, "Failed to initialize PEMKeyManager from file %s", keyFile); } diff --git a/framework/src/play/server/ssl/SslHttpServerPipelineFactory.java b/framework/src/play/server/ssl/SslHttpServerPipelineFactory.java index f622a9295c..532d381d8e 100644 --- a/framework/src/play/server/ssl/SslHttpServerPipelineFactory.java +++ b/framework/src/play/server/ssl/SslHttpServerPipelineFactory.java @@ -15,7 +15,7 @@ public class SslHttpServerPipelineFactory extends HttpServerPipelineFactory { private final String pipelineConfig = Play.configuration.getProperty("play.ssl.netty.pipeline", - "play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler"); + "org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler"); @Override public ChannelPipeline getPipeline() throws Exception { @@ -30,7 +30,7 @@ public ChannelPipeline getPipeline() throws Exception { SSLEngine engine = SslHttpServerContextFactory.getServerContext().createSSLEngine(); engine.setUseClientMode(false); - if (enabledCiphers != null && enabledCiphers.length() > 0) { + if (enabledCiphers != null && !enabledCiphers.isEmpty()) { engine.setEnabledCipherSuites(enabledCiphers.replaceAll(" ", "").split(",")); } @@ -40,7 +40,7 @@ public ChannelPipeline getPipeline() throws Exception { engine.setNeedClientAuth(true); } - if (enabledProtocols != null && enabledProtocols.trim().length() > 0) { + if (enabledProtocols != null && !enabledProtocols.isBlank()) { engine.setEnabledProtocols(enabledProtocols.replaceAll(" ", "").split(",")); } diff --git a/framework/src/play/templates/BaseTemplate.java b/framework/src/play/templates/BaseTemplate.java index 2cb19bdd94..be19c49466 100644 --- a/framework/src/play/templates/BaseTemplate.java +++ b/framework/src/play/templates/BaseTemplate.java @@ -18,7 +18,7 @@ public abstract class BaseTemplate extends Template { - public final Long timestamp = System.currentTimeMillis(); + public final long timestamp = System.currentTimeMillis(); public String compiledSource; public Map linesMatrix = new HashMap<>(); public Set doBodyLines = new HashSet<>(); diff --git a/framework/src/play/templates/FastTags.java b/framework/src/play/templates/FastTags.java index 71b105b1fd..dbb2b53139 100644 --- a/framework/src/play/templates/FastTags.java +++ b/framework/src/play/templates/FastTags.java @@ -58,7 +58,7 @@ public static void _verbatim(Map args, Closure body, PrintWriter out, Exec public static void _jsAction(Map args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { String html = ""; String minimize = ""; - if (args.containsKey("minimize") && Boolean.FALSE.equals(Boolean.valueOf(args.get("minimize").toString()))) { + if (args.containsKey("minimize") && !Boolean.parseBoolean(args.get("minimize").toString())) { minimize = "\n"; } html += "function(options) {" + minimize; @@ -66,7 +66,7 @@ public static void _jsAction(Map args, Closure body, PrintWriter out, Exec html += "for(key in options) {" + minimize; html += "var val = options[key];" + minimize; // Encode URI script - if (args.containsKey("encodeURI") && Boolean.TRUE.equals(Boolean.valueOf(args.get("encodeURI").toString()))) { + if (args.containsKey("encodeURI") && Boolean.parseBoolean(args.get("encodeURI").toString())) { html += "val = encodeURIComponent(val.replace('&', '&'));" + minimize; } // Custom script @@ -291,13 +291,13 @@ public static void _error(Map args, Closure body, PrintWriter out, Executa throw new TemplateExecutionException(template.template, fromLine, "Please specify the error key", new TagInternalException( "Please specify the error key")); } - String key = args.get("arg") == null ? args.get("key") + "" : args.get("arg") + ""; + String key = args.get("arg") == null ? String.valueOf(args.get("key")) : String.valueOf(args.get("arg")); Error error = Validation.error(key); if (error != null) { if (args.get("field") == null) { out.print(error.message()); } else { - out.print(error.message(args.get("field") + "")); + out.print(error.message(String.valueOf(args.get("field")))); } } } @@ -474,7 +474,7 @@ public static String serialize(Map args, String... unless) { @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) - public static @interface Namespace { + public @interface Namespace { String value() default ""; } diff --git a/framework/src/play/templates/GroovyTemplate.java b/framework/src/play/templates/GroovyTemplate.java index e2b8641cbd..2726a6adf5 100644 --- a/framework/src/play/templates/GroovyTemplate.java +++ b/framework/src/play/templates/GroovyTemplate.java @@ -202,10 +202,7 @@ public void compile() { if (errorMsg instanceof SyntaxErrorMessage) { SyntaxErrorMessage errorMessage = (SyntaxErrorMessage) e.getErrorCollector().getLastError(); SyntaxException syntaxException = errorMessage.getCause(); - Integer line = this.linesMatrix.get(syntaxException.getLine()); - if (line == null) { - line = 0; - } + Integer line = this.linesMatrix.getOrDefault(syntaxException.getLine(), 0); String message = syntaxException.getMessage(); if (message.indexOf('@') > 0) { message = message.substring(0, message.lastIndexOf('@')); @@ -259,7 +256,7 @@ protected String internalRender(Map args) { binding.setVariable("_response_encoding", currentResponse.encoding); } StringWriter writer = null; - Boolean applyLayouts = false; + boolean applyLayouts = false; // must check if this is the first template being rendered.. // If this template is called from inside another template, @@ -374,7 +371,7 @@ protected Throwable cleanStackTrace(Throwable e) { cleanTrace.add(se); } } - e.setStackTrace(cleanTrace.toArray(new StackTraceElement[cleanTrace.size()])); + e.setStackTrace(cleanTrace.toArray(StackTraceElement[]::new)); return e; } diff --git a/framework/src/play/templates/GroovyTemplateCompiler.java b/framework/src/play/templates/GroovyTemplateCompiler.java index e988b1d20a..b01751c2fa 100644 --- a/framework/src/play/templates/GroovyTemplateCompiler.java +++ b/framework/src/play/templates/GroovyTemplateCompiler.java @@ -326,7 +326,7 @@ protected void endTag() { } Tag tag = tagsStack.pop(); String lastInStack = tag.name; - if (tagName.equals("")) { + if (tagName.isEmpty()) { tagName = lastInStack; } if (!lastInStack.equals(tagName)) { @@ -368,7 +368,7 @@ protected void endTag() { tName = tName.substring(dotIndex + 1); } for (Class c : fastClasses) { - if (!c.isAnnotationPresent(FastTags.Namespace.class) && tSpace.length() > 0) { + if (!c.isAnnotationPresent(FastTags.Namespace.class) && !tSpace.isEmpty()) { continue; } if (c.isAnnotationPresent(FastTags.Namespace.class) diff --git a/framework/src/play/templates/JavaExtensions.java b/framework/src/play/templates/JavaExtensions.java index b34c08cfb6..361b64982c 100644 --- a/framework/src/play/templates/JavaExtensions.java +++ b/framework/src/play/templates/JavaExtensions.java @@ -11,14 +11,14 @@ import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Currency; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; +import java.util.StringJoiner; import java.util.TimeZone; import org.apache.commons.text.StringEscapeUtils; @@ -68,9 +68,16 @@ public static String[] add(String[] array, String o) { } public static String[] remove(String[] array, String s) { - List temp = new ArrayList<>(Arrays.asList(array)); - temp.remove(s); - return temp.toArray(new String[temp.size()]); + List temp = new ArrayList<>(array.length); + var remove = true; + for (var element : array) { + if (remove && Objects.equals(element, s)) { + remove = false; + } else { + temp.add(element); + } + } + return temp.toArray(String[]::new); } public static String toString(Closure closure) { @@ -97,12 +104,9 @@ public static String capitalizeWords(String source) { return sb.toString(); } - public static String pad(String str, Integer size) { + public static String pad(String str, int size) { int t = size - str.length(); - for (int i = 0; i < t; i++) { - str += " "; - } - return str; + return t > 0 ? str + " ".repeat(t) : str; } public static RawData escapeHtml(String htmlToEscape) { @@ -180,7 +184,7 @@ public static String format(Date date, String pattern, String lang, String timez return df.format(date); } - public static Integer page(Number number, Integer pageSize) { + public static int page(Number number, int pageSize) { return number.intValue() / pageSize + (number.intValue() % pageSize > 0 ? 1 : 0); } @@ -188,7 +192,7 @@ public static String since(Date date) { return since(date, false); } - public static String since(Date date, Boolean stopAtMonth) { + public static String since(Date date, boolean stopAtMonth) { Date now = new Date(); if (now.before(date)) { return ""; @@ -220,19 +224,19 @@ public static String since(Date date, Boolean stopAtMonth) { return Messages.get("since.years", years, pluralize(years)); } - public static String asdate(Long timestamp) { + public static String asdate(long timestamp) { return asdate(timestamp, I18N.getDateFormat()); } - public static String asdate(Long timestamp, String pattern) { + public static String asdate(long timestamp, String pattern) { return asdate(timestamp, pattern, Lang.get()); } - public static String asdate(Long timestamp, String pattern, String lang) { + public static String asdate(long timestamp, String pattern, String lang) { return new SimpleDateFormat(pattern, Lang.getLocaleOrDefault(lang)).format(new Date(timestamp)); } - public static String asdate(Long timestamp, String pattern, String lang, String timezone) { + public static String asdate(long timestamp, String pattern, String lang, String timezone) { return format(new Date(timestamp), pattern, lang, timezone); } @@ -257,7 +261,7 @@ public static String urlEncode(String entity) { return entity; } - public static String formatSize(Long bytes) { + public static String formatSize(long bytes) { if (bytes < 1024L) { return bytes + " B"; } @@ -297,7 +301,7 @@ public static String addSlashes(Object o) { public static String capFirst(Object o) { String string = o.toString(); - if (string.length() == 0) { + if (string.isEmpty()) { return string; } return ("" + string.charAt(0)).toUpperCase() + string.substring(1); @@ -373,10 +377,10 @@ public static String noAccents(String string) { } public static String slugify(String string) { - return slugify(string, Boolean.TRUE); + return slugify(string, true); } - public static String slugify(String string, Boolean lowercase) { + public static String slugify(String string, boolean lowercase) { string = noAccents(string); // Apostrophes. string = string.replaceAll("([a-z])'s([^a-z])", "$1s$2"); @@ -430,15 +434,11 @@ public static String join(Collection items, String separator) { if (items == null) { return ""; } - StringBuilder sb = new StringBuilder(); - Iterator ite = items.iterator(); - int i = 0; - while (ite.hasNext()) { - if (i++ > 0) { - sb.append(separator); - } - sb.append(ite.next()); + + StringJoiner joiner = new StringJoiner(separator); + for (Object item : items) { + joiner.add(String.valueOf(item)); } - return sb.toString(); + return joiner.toString(); } } diff --git a/framework/src/play/templates/TemplateParser.java b/framework/src/play/templates/TemplateParser.java index 682dedb66b..43b7b339fb 100644 --- a/framework/src/play/templates/TemplateParser.java +++ b/framework/src/play/templates/TemplateParser.java @@ -39,7 +39,7 @@ private Token found(Token newState, int skip) { return lastState; } - public Integer getLine() { + public int getLine() { String token = pageSource.substring(0, begin2); if (token.indexOf('\n') == -1) { return 1; @@ -54,7 +54,7 @@ public String getToken() { public String checkNext() { if (end2 < pageSource.length()) { - return pageSource.charAt(end2) + ""; + return Character.toString(pageSource.charAt(end2)); } return ""; } diff --git a/framework/src/play/test/TestEngine.java b/framework/src/play/test/TestEngine.java index cca19a5671..07cea67a0f 100644 --- a/framework/src/play/test/TestEngine.java +++ b/framework/src/play/test/TestEngine.java @@ -128,7 +128,7 @@ public static void initTest(Class testClass) { if (Request.current() == null) { String host = Router.getBaseUrl(); String domain = null; - Integer port = 80; + int port = 80; boolean isSecure = false; if (host == null || host.equals("application.baseUrl")) { host = "localhost:" + port; diff --git a/framework/src/play/utils/HTML.java b/framework/src/play/utils/HTML.java index 63ab53f33b..4490f61d84 100644 --- a/framework/src/play/utils/HTML.java +++ b/framework/src/play/utils/HTML.java @@ -157,11 +157,7 @@ public String convertToReference(char character) { * @return The char mapped to the given entityReference or -1. */ public char convertToCharacter(String entityReference) { - Character referredCharacter = this.entityReferenceToCharacterMap.get(entityReference); - if (referredCharacter != null) { - return referredCharacter.charValue(); - } - return CHAR_NULL; + return this.entityReferenceToCharacterMap.getOrDefault(entityReference, CHAR_NULL); } } } diff --git a/framework/src/play/utils/Java.java b/framework/src/play/utils/Java.java index cebdc8eda3..6fdcee2c21 100644 --- a/framework/src/play/utils/Java.java +++ b/framework/src/play/utils/Java.java @@ -175,7 +175,7 @@ public static Object invokeStaticOrParent(Class clazz, String method, Object. public static Object invokeChildOrStatic(Class clazz, String method, Object... args) throws Exception { Class invokedClass = null; List assignableClasses = Play.classloader.getAssignableClasses(clazz); - if (assignableClasses.size() == 0) { + if (assignableClasses.isEmpty()) { invokedClass = clazz; } else { invokedClass = assignableClasses.get(0); @@ -241,37 +241,21 @@ public static String rawMethodSignature(Method method) { } public static String rawJavaType(Class clazz) { - if (clazz.getName().equals("void")) { - return "V"; - } - if (clazz.getName().equals("boolean")) { - return "Z"; - } - if (clazz.getName().equals("byte")) { - return "B"; - } - if (clazz.getName().equals("char")) { - return "C"; - } - if (clazz.getName().equals("double")) { - return "D"; - } - if (clazz.getName().equals("float")) { - return "F"; - } - if (clazz.getName().equals("int")) { - return "I"; - } - if (clazz.getName().equals("long")) { - return "J"; - } - if (clazz.getName().equals("short")) { - return "S"; - } - if (clazz.getName().startsWith("[")) { - return clazz.getName().replace('.', '/'); - } - return "L" + (clazz.getName().replace('.', '/')) + ";"; + var className = clazz.getName(); + return switch (className) { + case "void" -> "V"; + case "boolean" -> "Z"; + case "byte" -> "B"; + case "char" -> "C"; + case "double" -> "D"; + case "float" -> "F"; + case "int" -> "I"; + case "long" -> "J"; + case "short" -> "S"; + default -> className.startsWith("[") + ? className.replace('.', '/') + : "L" + (className.replace('.', '/')) + ";"; + }; } /** diff --git a/framework/src/play/utils/Properties.java b/framework/src/play/utils/Properties.java index a12fd9d9b1..c540f66dbe 100644 --- a/framework/src/play/utils/Properties.java +++ b/framework/src/play/utils/Properties.java @@ -74,7 +74,7 @@ public synchronized void store(OutputStream out, String encoding) throws IOExcep } BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(out, encoding)); for (String key : keySet()) { - if (key.length() > 0) { + if (!key.isEmpty()) { wr.write(key + "=" + get(key) + System.getProperties().getProperty("line.separator")); } } @@ -84,7 +84,7 @@ public synchronized void store(OutputStream out, String encoding) throws IOExcep public boolean getBoolean(String key) throws IllegalArgumentException { String s = get(key); - if (s == null || "".equals(s)) { + if (s == null || s.isEmpty()) { throw new IllegalArgumentException("Setting must be an boolean (values:true/false/yes/no/on/off) : " + key); } s = s.trim().toLowerCase(); @@ -93,7 +93,7 @@ public boolean getBoolean(String key) throws IllegalArgumentException { public boolean getBoolean(String key, boolean defval) { String s = get(key); - if (s == null || "".equals(s)) { + if (s == null || s.isEmpty()) { return defval; } s = s.trim().toLowerCase(); @@ -102,7 +102,7 @@ public boolean getBoolean(String key, boolean defval) { public Object getClassInstance(String key) throws IllegalArgumentException { String s = get(key); - if (s == null || "".equals(s)) { + if (s == null || s.isEmpty()) { throw new IllegalArgumentException("Setting " + key + " must be a valid classname : " + key); } try { diff --git a/framework/src/play/vfs/VirtualFile.java b/framework/src/play/vfs/VirtualFile.java index 22ed932fd3..8d05ec3676 100644 --- a/framework/src/play/vfs/VirtualFile.java +++ b/framework/src/play/vfs/VirtualFile.java @@ -118,7 +118,7 @@ public OutputStream outputstream() { } } - public Long lastModified() { + public long lastModified() { if (realFile != null) { return realFile.lastModified(); } @@ -221,7 +221,7 @@ public static VirtualFile fromRelativePath(String relativePath) { if (matcher.matches()) { String path = matcher.group(3); String module = matcher.group(2); - if (module == null || module.equals("?") || module.equals("")) { + if (module == null || module.equals("?") || module.isEmpty()) { return new VirtualFile(Play.applicationPath).child(path); } else { if (module.equals("play")) { diff --git a/framework/test-src/play/InvokerTest.java b/framework/test-src/play/InvokerTest.java new file mode 100644 index 0000000000..799ba2a7e0 --- /dev/null +++ b/framework/test-src/play/InvokerTest.java @@ -0,0 +1,105 @@ +package play; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.util.Arrays; +import java.util.List; +import java.util.function.Consumer; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; + +class InvokerTest { + + @Nested + class InvocationContextTest { + + @Test void constructorStringShouldCreateInvocationContextWithEmptyAnnotationsCollection() { + String invocationType = "constructorString"; + var context = new Invoker.InvocationContext(invocationType); + assertThat(context.getInvocationType()).isSameAs(invocationType); + assertThat(context.getAnnotations()).isEmpty(); + } + + @Test void constructorStringAndListShouldCreateInvocationContextWithSameAnnotationsCollection() { + String invocationType = "constructorStringAndList"; + var annotations = List.of(stubAnnotationsFor(A.class, B.class, C.class, D.class)); + var context = new Invoker.InvocationContext(invocationType, annotations); + assertThat(context.getInvocationType()).isSameAs(invocationType); + assertThat(context.getAnnotations()).isSameAs(annotations); + } + + @Test void constructorStringAndOneDimensionArrayShouldCreateInvocationContextWithAnnotationsCollectionFromArray() { + String invocationType = "constructorStringAndOneDimensionArray"; + var annotations = stubAnnotationsFor(A.class, B.class, C.class, D.class); + var context = new Invoker.InvocationContext(invocationType, annotations); + + assertThat(context.getInvocationType()).isSameAs(invocationType); + assertThat(context.getAnnotations()).satisfiesExactly( + Arrays.stream(annotations) + .>map(annotation -> actual -> assertThat(actual).isSameAs(annotation)) + .toArray(Consumer[]::new) + ); + } + + @Test void constructorStringAndTwoDimensionsArrayShouldCreateInvocationContextWithAnnotationsCollectionFromArray() { + String invocationType = "constructorStringAndTwoDimensionsArray"; + var abAnnotations = stubAnnotationsFor(A.class, B.class); + var cdAnnotations = stubAnnotationsFor(C.class, D.class); + var context = new Invoker.InvocationContext(invocationType, abAnnotations, cdAnnotations); + + assertThat(context.getInvocationType()).isSameAs(invocationType); + assertThat(context.getAnnotations()).satisfiesExactly( + Stream.concat(Arrays.stream(abAnnotations), Arrays.stream(cdAnnotations)) + .>map(annotation -> actual -> assertThat(actual).isSameAs(annotation)) + .toArray(Consumer[]::new) + ); + } + + @Test void getAnnotationShouldReturnFirstAnnotationFromList() { + var annotations = stubAnnotationsFor(A.class, B.class, C.class, B.class); + var context = new Invoker.InvocationContext("someInvocationType", annotations); + assertThat(context.getAnnotation(B.class)).isSameAs(annotations[1]); + } + + @Test void getAnnotationShouldReturnNull() { + var context = new Invoker.InvocationContext("someInvocationType", stubAnnotationsFor(A.class, B.class, C.class)); + assertThat(context.getAnnotation(D.class)).isNull(); + } + + @Test void isAnnotationPresentShouldReturnTrue() { + var annotations = stubAnnotationsFor(A.class, B.class, C.class, B.class); + var context = new Invoker.InvocationContext("someInvocationType", annotations); + assertThat(context.isAnnotationPresent(C.class)).isTrue(); + } + + @Test void isAnnotationPresentShouldReturnFalse() { + var context = new Invoker.InvocationContext("someInvocationType", stubAnnotationsFor(A.class, B.class, C.class)); + assertThat(context.isAnnotationPresent(D.class)).isFalse(); + } + + @SafeVarargs + private Annotation[] stubAnnotationsFor(Class... annotations) { + return Arrays.stream(annotations).map(this::stubAnnotationFor).toArray(Annotation[]::new); + } + + private T stubAnnotationFor(Class annotation) { + InvocationHandler handler = (proxy, method, args) -> + method.getName().equals("annotationType") ? annotation : method.invoke(proxy, args); + + return (T) Proxy.newProxyInstance(annotation.getClassLoader(), new Class[] { annotation }, handler); + } + + private @interface A {} + private @interface B {} + private @interface C {} + private @interface D {} + + } + + +} \ No newline at end of file diff --git a/framework/test-src/play/data/FileUploadTest.java b/framework/test-src/play/data/FileUploadTest.java index d403e87607..75e4843bce 100644 --- a/framework/test-src/play/data/FileUploadTest.java +++ b/framework/test-src/play/data/FileUploadTest.java @@ -2,11 +2,11 @@ import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; public class FileUploadTest { @Test - public void sizeIsNullForMissingFile() { - assertNull(new FileUpload().getSize()); + public void sizeIsZeroForMissingFile() { + assertEquals(0L, new FileUpload().getSize()); } } diff --git a/framework/test-src/play/libs/TestHttpResponse.java b/framework/test-src/play/libs/TestHttpResponse.java index e8ac1d3c65..c3d86c55e7 100644 --- a/framework/test-src/play/libs/TestHttpResponse.java +++ b/framework/test-src/play/libs/TestHttpResponse.java @@ -1,9 +1,8 @@ package play.libs; - import java.io.ByteArrayInputStream; import java.io.InputStream; -import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.util.List; import play.libs.WS.HttpResponse; @@ -18,9 +17,8 @@ public class TestHttpResponse extends HttpResponse { } @Override - public Integer getStatus() { - // TODO Auto-generated method stub - return null; + public int getStatus() { + return 200; } @Override @@ -53,13 +51,7 @@ public String getString(String encoding) { @Override public InputStream getStream() { - try { - return new ByteArrayInputStream(this.queryContent.getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return null; + return new ByteArrayInputStream(this.queryContent.getBytes(StandardCharsets.UTF_8)); } } diff --git a/framework/test-src/play/libs/TestXMLHttpResponse.java b/framework/test-src/play/libs/TestXMLHttpResponse.java index 93e05781a6..eb91bf1d6c 100644 --- a/framework/test-src/play/libs/TestXMLHttpResponse.java +++ b/framework/test-src/play/libs/TestXMLHttpResponse.java @@ -13,8 +13,8 @@ public TestXMLHttpResponse(final String body) { } @Override - public Integer getStatus() { - return null; + public int getStatus() { + return 200; } @Override diff --git a/framework/test-src/play/templates/JavaExtensionsTest.java b/framework/test-src/play/templates/JavaExtensionsTest.java index 986f8b26ec..010b044abb 100755 --- a/framework/test-src/play/templates/JavaExtensionsTest.java +++ b/framework/test-src/play/templates/JavaExtensionsTest.java @@ -13,22 +13,6 @@ public class JavaExtensionsTest { - @BeforeAll - public static void setUpBeforeClass() throws Exception { - } - - @AfterAll - public static void tearDownAfterClass() throws Exception { - } - - @BeforeEach - public void setUp() throws Exception { - } - - @AfterEach - public void tearDown() throws Exception { - } - //Trivial no test @Test public void testEnumValues() {} @Test @@ -43,14 +27,14 @@ public void testContains() { @Test public void testAdd() { final String[] items = JavaExtensions.add(new String[]{"a", "b"}, "c"); - assertThat(items).hasSize(3).contains(new String[] {"a", "b", "c"}); + assertThat(items).containsExactly("a", "b", "c"); } @Test public void testRemove() { - String[] testArray = {"a", "b", "c"}; - assertThat(JavaExtensions.remove(testArray, "c")).hasSize(2).contains("a", "b"); + String[] testArray = {"a", "b", "c", "c", "d"}; + assertThat(JavaExtensions.remove(testArray, "c")).containsExactly("a", "b", "c", "d"); } //TODO @Test public void testToStringClosure() {} diff --git a/framework/test-src/play/test/FixturesTest.java b/framework/test-src/play/test/FixturesTest.java index 5e1702821b..fa4ba121e6 100755 --- a/framework/test-src/play/test/FixturesTest.java +++ b/framework/test-src/play/test/FixturesTest.java @@ -47,7 +47,7 @@ public static class MockModel implements Model { public List fetch(int offset, int length, String orderBy, String orderDirection, List properties, String keywords, String where) { return null; } @Override - public Long count(List properties, String keywords, String where) { return null; } + public long count(List properties, String keywords, String where) { return 0L; } @Override public void deleteAll() { /* Do nothing */ } @Override diff --git a/resources/application-skel/conf/application.conf b/resources/application-skel/conf/application.conf index 37d827751a..2b289b159a 100644 --- a/resources/application-skel/conf/application.conf +++ b/resources/application-skel/conf/application.conf @@ -225,11 +225,11 @@ mail.smtp=mock # You can default netty settings by overriding the following line. Each handler must be comma separated. # The last value must be the PlayHandler class (or your own that extends PlayHandler) # Default values are -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For example, to enable Netty response compression -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For SSL, use the play.ssl.netty.pipeline property -# play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler +# play.ssl.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler # # X509 certificates # # the following values are default values diff --git a/samples-and-tests/fast-tag/conf/application.conf b/samples-and-tests/fast-tag/conf/application.conf index a4ce43b33a..00764f3623 100644 --- a/samples-and-tests/fast-tag/conf/application.conf +++ b/samples-and-tests/fast-tag/conf/application.conf @@ -225,11 +225,11 @@ mail.smtp=mock # You can default netty settings by overriding the following line. Each handler must be comma separated. # The last value must be the PlayHandler class (or your own that extends PlayHandler) # Default values are -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For example, to enable Netty response compression -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For SSL, use the play.ssl.netty.pipeline property -# play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler +# play.ssl.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler # # X509 certificates # # the following values are default values diff --git a/samples-and-tests/i-am-a-developer/tests.py b/samples-and-tests/i-am-a-developer/tests.py index 080504bed4..3800bd3111 100755 --- a/samples-and-tests/i-am-a-developer/tests.py +++ b/samples-and-tests/i-am-a-developer/tests.py @@ -123,7 +123,7 @@ def skipTest_testSSLConfig(self): edit(app, "conf/application.conf", 32, 'http.port=-1') edit(app, "conf/application.conf", 33, 'https.port=' + DEFAULTS['http.port']) edit(app, "conf/application.conf", 232, - 'play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler') + 'play.ssl.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler') create(app, 'conf/host.key') insert(app, "conf/host.key", 1, '-----BEGIN RSA PRIVATE KEY-----') insert(app, "conf/host.key", 2, 'MIIEpQIBAAKCAQEAoOx9pCR7rZ50S9FotKVD2+aC36Hj4TkXZTZwEnh/fWyuiH2O') diff --git a/samples-and-tests/java8Support/conf/application.conf b/samples-and-tests/java8Support/conf/application.conf index 3379f3a0ea..49dded927a 100644 --- a/samples-and-tests/java8Support/conf/application.conf +++ b/samples-and-tests/java8Support/conf/application.conf @@ -203,11 +203,11 @@ mail.smtp=mock # You can default netty settings by overriding the following line. Each handler must be comma separated. # The last value must be the PlayHandler class (or your own that extends PlayHandler) # Default values are -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For example, to enable Netty response compression -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For SSL, use the play.ssl.netty.pipeline property -# play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler +# play.ssl.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler # Open file from errors pages diff --git a/samples-and-tests/multi-db/conf/application.conf b/samples-and-tests/multi-db/conf/application.conf index fc9dc95f6a..70fc8c60c4 100644 --- a/samples-and-tests/multi-db/conf/application.conf +++ b/samples-and-tests/multi-db/conf/application.conf @@ -217,11 +217,11 @@ mail.smtp=mock # You can default netty settings by overriding the following line. Each handler must be comma separated. # The last value must be the PlayHandler class (or your own that extends PlayHandler) # Default values are -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For example, to enable Netty response compression -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For SSL, use the play.ssl.netty.pipeline property -# play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler +# play.ssl.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler # Open file from errors pages diff --git a/samples-and-tests/nonstatic-app/conf/application.conf b/samples-and-tests/nonstatic-app/conf/application.conf index 5dececb2a8..9fdb35fa00 100644 --- a/samples-and-tests/nonstatic-app/conf/application.conf +++ b/samples-and-tests/nonstatic-app/conf/application.conf @@ -215,11 +215,11 @@ mail.smtp=mock # You can default netty settings by overriding the following line. Each handler must be comma separated. # The last value must be the PlayHandler class (or your own that extends PlayHandler) # Default values are -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For example, to enable Netty response compression -# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler +# play.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler # For SSL, use the play.ssl.netty.pipeline property -# play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler +# play.ssl.netty.pipeline = org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler # Open file from errors pages