This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new 20921725f2 jakarta.el cleanup
20921725f2 is described below

commit 20921725f201bc2749235ad8f9caf0ca86f0bf8b
Author: remm <r...@apache.org>
AuthorDate: Mon Mar 24 14:23:36 2025 +0100

    jakarta.el cleanup
---
 java/jakarta/el/BeanELResolver.java               |  6 +-
 java/jakarta/el/BeanNameELResolver.java           | 26 +++-----
 java/jakarta/el/BeanSupportFull.java              | 18 +++---
 java/jakarta/el/BeanSupportStandalone.java        | 22 +++----
 java/jakarta/el/ELContext.java                    | 12 +---
 java/jakarta/el/ELContextEvent.java               |  2 +
 java/jakarta/el/ELException.java                  |  3 +
 java/jakarta/el/ELProcessor.java                  | 78 +++++++++--------------
 java/jakarta/el/ELResolver.java                   |  4 +-
 java/jakarta/el/Expression.java                   |  2 +
 java/jakarta/el/ExpressionFactory.java            | 13 ++--
 java/jakarta/el/ImportHandler.java                | 25 +++-----
 java/jakarta/el/ListELResolver.java               |  9 +--
 java/jakarta/el/MapELResolver.java                |  3 +-
 java/jakarta/el/MethodExpression.java             |  3 +
 java/jakarta/el/MethodInfo.java                   |  9 +--
 java/jakarta/el/MethodNotFoundException.java      |  3 +
 java/jakarta/el/MethodReference.java              |  9 +--
 java/jakarta/el/OptionalELResolver.java           |  6 +-
 java/jakarta/el/PropertyNotFoundException.java    |  3 +
 java/jakarta/el/PropertyNotWritableException.java |  3 +
 java/jakarta/el/RecordELResolver.java             |  2 +-
 java/jakarta/el/StaticFieldELResolver.java        | 17 ++---
 java/jakarta/el/Util.java                         | 36 +++--------
 java/jakarta/el/ValueExpression.java              |  3 +
 java/jakarta/el/ValueReference.java               |  2 +
 26 files changed, 132 insertions(+), 187 deletions(-)

diff --git a/java/jakarta/el/BeanELResolver.java 
b/java/jakarta/el/BeanELResolver.java
index 7577163539..4d1b0ea210 100644
--- a/java/jakarta/el/BeanELResolver.java
+++ b/java/jakarta/el/BeanELResolver.java
@@ -138,7 +138,7 @@ public class BeanELResolver extends ELResolver {
         Object[] parameters =
                 Util.buildParameters(context, 
matchingMethod.getParameterTypes(), matchingMethod.isVarArgs(), params);
 
-        Object result = null;
+        Object result;
         try {
             result = matchingMethod.invoke(base, parameters);
         } catch (IllegalArgumentException | IllegalAccessException e) {
@@ -222,7 +222,7 @@ public class BeanELResolver extends ELResolver {
                 this.write = Util.getMethod(this.owner, base, 
getWriteMethod());
                 if (this.write == null) {
                     throw new PropertyNotWritableException(
-                            Util.message(ctx, "propertyNotWritable", new 
Object[] { owner.getName(), getName() }));
+                            Util.message(ctx, "propertyNotWritable", 
owner.getName(), getName()));
                 }
             }
             return this.write;
@@ -233,7 +233,7 @@ public class BeanELResolver extends ELResolver {
                 this.read = Util.getMethod(this.owner, base, getReadMethod());
                 if (this.read == null) {
                     throw new PropertyNotFoundException(
-                            Util.message(ctx, "propertyNotReadable", new 
Object[] { owner.getName(), getName() }));
+                            Util.message(ctx, "propertyNotReadable", 
owner.getName(), getName()));
                 }
             }
             return this.read;
diff --git a/java/jakarta/el/BeanNameELResolver.java 
b/java/jakarta/el/BeanNameELResolver.java
index 9ef745150a..8331e310f4 100644
--- a/java/jakarta/el/BeanNameELResolver.java
+++ b/java/jakarta/el/BeanNameELResolver.java
@@ -32,16 +32,14 @@ public class BeanNameELResolver extends ELResolver {
     @Override
     public Object getValue(ELContext context, Object base, Object property) {
         Objects.requireNonNull(context);
-        if (base != null || !(property instanceof String)) {
+        if (base != null || !(property instanceof String beanName)) {
             return null;
         }
 
-        String beanName = (String) property;
-
         if (beanNameResolver.isNameResolved(beanName)) {
             try {
                 Object result = beanNameResolver.getBean(beanName);
-                context.setPropertyResolved(base, property);
+                context.setPropertyResolved(null, property);
                 return result;
             } catch (Throwable t) {
                 Util.handleThrowable(t);
@@ -55,17 +53,15 @@ public class BeanNameELResolver extends ELResolver {
     @Override
     public void setValue(ELContext context, Object base, Object property, 
Object value) {
         Objects.requireNonNull(context);
-        if (base != null || !(property instanceof String)) {
+        if (base != null || !(property instanceof String beanName)) {
             return;
         }
 
-        String beanName = (String) property;
-
         boolean isResolved = context.isPropertyResolved();
 
         boolean isReadOnly;
         try {
-            isReadOnly = isReadOnly(context, base, property);
+            isReadOnly = isReadOnly(context, null, property);
         } catch (Throwable t) {
             Util.handleThrowable(t);
             throw new ELException(t);
@@ -80,7 +76,7 @@ public class BeanNameELResolver extends ELResolver {
         if (beanNameResolver.isNameResolved(beanName) || 
beanNameResolver.canCreateBean(beanName)) {
             try {
                 beanNameResolver.setBeanValue(beanName, value);
-                context.setPropertyResolved(base, property);
+                context.setPropertyResolved(null, property);
             } catch (Throwable t) {
                 Util.handleThrowable(t);
                 throw new ELException(t);
@@ -91,16 +87,14 @@ public class BeanNameELResolver extends ELResolver {
     @Override
     public Class<?> getType(ELContext context, Object base, Object property) {
         Objects.requireNonNull(context);
-        if (base != null || !(property instanceof String)) {
+        if (base != null || !(property instanceof String beanName)) {
             return null;
         }
 
-        String beanName = (String) property;
-
         try {
             if (beanNameResolver.isNameResolved(beanName)) {
                 Class<?> result = 
beanNameResolver.getBean(beanName).getClass();
-                context.setPropertyResolved(base, property);
+                context.setPropertyResolved(null, property);
 
                 /*
                  * No resolver level isReadOnly property for this resolver
@@ -122,13 +116,11 @@ public class BeanNameELResolver extends ELResolver {
     @Override
     public boolean isReadOnly(ELContext context, Object base, Object property) 
{
         Objects.requireNonNull(context);
-        if (base != null || !(property instanceof String)) {
+        if (base != null || !(property instanceof String beanName)) {
             // Return value undefined
             return false;
         }
 
-        String beanName = (String) property;
-
         if (beanNameResolver.isNameResolved(beanName)) {
             boolean result;
             try {
@@ -137,7 +129,7 @@ public class BeanNameELResolver extends ELResolver {
                 Util.handleThrowable(t);
                 throw new ELException(t);
             }
-            context.setPropertyResolved(base, property);
+            context.setPropertyResolved(null, property);
             return result;
         }
 
diff --git a/java/jakarta/el/BeanSupportFull.java 
b/java/jakarta/el/BeanSupportFull.java
index eea3e189e9..ac35a3b1ff 100644
--- a/java/jakarta/el/BeanSupportFull.java
+++ b/java/jakarta/el/BeanSupportFull.java
@@ -55,18 +55,16 @@ class BeanSupportFull extends BeanSupport {
         }
 
         private void populateFromInterfaces(Class<?> aClass) throws 
IntrospectionException {
-            Class<?> interfaces[] = aClass.getInterfaces();
-            if (interfaces.length > 0) {
-                for (Class<?> ifs : interfaces) {
-                    BeanInfo info = Introspector.getBeanInfo(ifs);
-                    PropertyDescriptor[] pds = info.getPropertyDescriptors();
-                    for (PropertyDescriptor pd : pds) {
-                        if (!this.properties.containsKey(pd.getName())) {
-                            this.properties.put(pd.getName(), new 
BeanPropertyFull(this.type, pd));
-                        }
+            Class<?>[] interfaces = aClass.getInterfaces();
+            for (Class<?> ifs : interfaces) {
+                BeanInfo info = Introspector.getBeanInfo(ifs);
+                PropertyDescriptor[] pds = info.getPropertyDescriptors();
+                for (PropertyDescriptor pd : pds) {
+                    if (!this.properties.containsKey(pd.getName())) {
+                        this.properties.put(pd.getName(), new 
BeanPropertyFull(this.type, pd));
                     }
-                    populateFromInterfaces(ifs);
                 }
+                populateFromInterfaces(ifs);
             }
             Class<?> superclass = aClass.getSuperclass();
             if (superclass != null) {
diff --git a/java/jakarta/el/BeanSupportStandalone.java 
b/java/jakarta/el/BeanSupportStandalone.java
index e4db4b5589..c32c89e2b8 100644
--- a/java/jakarta/el/BeanSupportStandalone.java
+++ b/java/jakarta/el/BeanSupportStandalone.java
@@ -84,7 +84,7 @@ class BeanSupportStandalone extends BeanSupport {
 
 
     private static String getPropertyName(String input) {
-        if (input.length() == 0) {
+        if (input.isEmpty()) {
             return null;
         }
         if (!Character.isUpperCase(input.charAt(0))) {
@@ -104,7 +104,7 @@ class BeanSupportStandalone extends BeanSupport {
         private boolean usesIs;
         private Method readMethod;
         private Method writeMethod;
-        private List<Method> writeMethods = new ArrayList<>();
+        private final List<Method> writeMethods = new ArrayList<>();
 
         String getName() {
             return name;
@@ -146,7 +146,7 @@ class BeanSupportStandalone extends BeanSupport {
                     if (writeMethods.size() > 1) {
                         writeMethods.sort(WRITE_METHOD_COMPARATOR);
                     }
-                    type = writeMethods.get(0).getParameterTypes()[0];
+                    type = writeMethods.getFirst().getParameterTypes()[0];
                 }
                 for (Method candidate : writeMethods) {
                     if 
(type.isAssignableFrom(candidate.getParameterTypes()[0])) {
@@ -179,17 +179,15 @@ class BeanSupportStandalone extends BeanSupport {
         }
 
         private void populateFromInterfaces(Class<?> aClass) {
-            Class<?> interfaces[] = aClass.getInterfaces();
-            if (interfaces.length > 0) {
-                for (Class<?> ifs : interfaces) {
-                    PropertyDescriptor[] pds = getPropertyDescriptors(type);
-                    for (PropertyDescriptor pd : pds) {
-                        if (!this.properties.containsKey(pd.getName())) {
-                            this.properties.put(pd.getName(), new 
BeanPropertyStandalone(this.type, pd));
-                        }
+            Class<?>[] interfaces = aClass.getInterfaces();
+            for (Class<?> ifs : interfaces) {
+                PropertyDescriptor[] pds = getPropertyDescriptors(type);
+                for (PropertyDescriptor pd : pds) {
+                    if (!this.properties.containsKey(pd.getName())) {
+                        this.properties.put(pd.getName(), new 
BeanPropertyStandalone(this.type, pd));
                     }
-                    populateFromInterfaces(ifs);
                 }
+                populateFromInterfaces(ifs);
             }
             Class<?> superclass = aClass.getSuperclass();
             if (superclass != null) {
diff --git a/java/jakarta/el/ELContext.java b/java/jakarta/el/ELContext.java
index 98f0856796..f99f82c0f7 100644
--- a/java/jakarta/el/ELContext.java
+++ b/java/jakarta/el/ELContext.java
@@ -365,22 +365,16 @@ public abstract class ELContext {
         if ("equals".equals(method.getName())) {
             if (method.getReturnType().equals(boolean.class)) {
                 if (method.getParameterCount() == 1) {
-                    if (method.getParameterTypes()[0].equals(Object.class)) {
-                        return true;
-                    }
+                    return method.getParameterTypes()[0].equals(Object.class);
                 }
             }
         } else if ("hashCode".equals(method.getName())) {
             if (method.getReturnType().equals(int.class)) {
-                if (method.getParameterCount() == 0) {
-                    return true;
-                }
+                return method.getParameterCount() == 0;
             }
         } else if ("toString".equals(method.getName())) {
             if (method.getReturnType().equals(String.class)) {
-                if (method.getParameterCount() == 0) {
-                    return true;
-                }
+                return method.getParameterCount() == 0;
             }
         }
 
diff --git a/java/jakarta/el/ELContextEvent.java 
b/java/jakarta/el/ELContextEvent.java
index 651eeeab0a..b5bfda0e68 100644
--- a/java/jakarta/el/ELContextEvent.java
+++ b/java/jakarta/el/ELContextEvent.java
@@ -16,10 +16,12 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
 import java.util.EventObject;
 
 public class ELContextEvent extends EventObject {
 
+    @Serial
     private static final long serialVersionUID = 1255131906285426769L;
 
     /**
diff --git a/java/jakarta/el/ELException.java b/java/jakarta/el/ELException.java
index ab18aeeef6..315fd21abb 100644
--- a/java/jakarta/el/ELException.java
+++ b/java/jakarta/el/ELException.java
@@ -16,6 +16,8 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
+
 /**
  * Represents any of the exception conditions that can arise during expression 
evaluation.
  *
@@ -23,6 +25,7 @@ package jakarta.el;
  */
 public class ELException extends RuntimeException {
 
+    @Serial
     private static final long serialVersionUID = -6228042809457459161L;
 
     /**
diff --git a/java/jakarta/el/ELProcessor.java b/java/jakarta/el/ELProcessor.java
index 1e91022dc2..d3f10f17b9 100644
--- a/java/jakarta/el/ELProcessor.java
+++ b/java/jakarta/el/ELProcessor.java
@@ -100,12 +100,12 @@ public class ELProcessor {
 
         MethodSignature sig = new MethodSignature(context, methodName, 
className);
 
-        if (function.length() == 0) {
+        if (function.isEmpty()) {
             function = sig.getName();
         }
 
         // Only returns public methods. Module access is checked below.
-        Method methods[] = clazz.getMethods();
+        Method[] methods = clazz.getMethods();
 
         for (Method method : methods) {
             if (!Modifier.isStatic(method.getModifiers())) {
@@ -130,28 +130,26 @@ public class ELProcessor {
                 } else {
                     Class<?>[] types = method.getParameterTypes();
                     String[] typeNames = sig.getParamTypeNames();
-                    if (types.length == typeNames.length) {
-                        boolean match = true;
-                        for (int i = 0; i < types.length; i++) {
-                            if (i == types.length - 1 && method.isVarArgs()) {
-                                String typeName = typeNames[i];
-                                if (typeName.endsWith("...")) {
-                                    typeName = typeName.substring(0, 
typeName.length() - 3);
-                                    if (!typeName.equals(types[i].getName())) {
-                                        match = false;
-                                    }
-                                } else {
+                    boolean match = true;
+                    for (int i = 0; i < types.length; i++) {
+                        if (i == types.length - 1 && method.isVarArgs()) {
+                            String typeName = typeNames[i];
+                            if (typeName.endsWith("...")) {
+                                typeName = typeName.substring(0, 
typeName.length() - 3);
+                                if (!typeName.equals(types[i].getName())) {
                                     match = false;
                                 }
-                            } else if 
(!types[i].getName().equals(typeNames[i])) {
+                            } else {
                                 match = false;
-                                break;
                             }
+                        } else if (!types[i].getName().equals(typeNames[i])) {
+                            match = false;
+                            break;
                         }
-                        if (match) {
-                            manager.mapFunction(prefix, function, method);
-                            return;
-                        }
+                    }
+                    if (match) {
+                        manager.mapFunction(prefix, function, method);
+                        return;
                     }
                 }
             }
@@ -236,7 +234,7 @@ public class ELProcessor {
                 }
                 // Trim '(' and ')'
                 paramString = paramString.substring(1, paramString.length() - 
1).trim();
-                if (paramString.length() == 0) {
+                if (paramString.isEmpty()) {
                     parameterTypeNames = EMPTY_STRING_ARRAY;
                 } else {
                     parameterTypeNames = paramString.split(",");
@@ -263,33 +261,17 @@ public class ELProcessor {
                         if (isPrimitive && dimension > 0) {
                             // When in an array, class name changes for 
primitive
                             switch (parameterTypeName) {
-                                case "boolean":
-                                    parameterTypeName = "Z";
-                                    break;
-                                case "byte":
-                                    parameterTypeName = "B";
-                                    break;
-                                case "char":
-                                    parameterTypeName = "C";
-                                    break;
-                                case "double":
-                                    parameterTypeName = "D";
-                                    break;
-                                case "float":
-                                    parameterTypeName = "F";
-                                    break;
-                                case "int":
-                                    parameterTypeName = "I";
-                                    break;
-                                case "long":
-                                    parameterTypeName = "J";
-                                    break;
-                                case "short":
-                                    parameterTypeName = "S";
-                                    break;
-                                default:
+                                case "boolean" -> parameterTypeName = "Z";
+                                case "byte" -> parameterTypeName = "B";
+                                case "char" -> parameterTypeName = "C";
+                                case "double" -> parameterTypeName = "D";
+                                case "float" -> parameterTypeName = "F";
+                                case "int" -> parameterTypeName = "I";
+                                case "long" -> parameterTypeName = "J";
+                                case "short" -> parameterTypeName = "S";
+                                default -> {
                                     // Should never happen
-                                    break;
+                                }
                             }
                         } else if (!isPrimitive && 
!parameterTypeName.contains(".")) {
                             Class<?> clazz = 
importHandler.resolveClass(parameterTypeName);
@@ -303,9 +285,7 @@ public class ELProcessor {
                         if (dimension > 0) {
                             // Convert to array form of class name
                             StringBuilder sb = new StringBuilder();
-                            for (int j = 0; j < dimension; j++) {
-                                sb.append('[');
-                            }
+                            sb.append("[".repeat(dimension));
                             if (!isPrimitive) {
                                 sb.append('L');
                             }
diff --git a/java/jakarta/el/ELResolver.java b/java/jakarta/el/ELResolver.java
index 2bd3dd9280..0b9be0327a 100644
--- a/java/jakarta/el/ELResolver.java
+++ b/java/jakarta/el/ELResolver.java
@@ -39,7 +39,7 @@ public abstract class ELResolver {
     public abstract Object getValue(ELContext context, Object base, Object 
property);
 
     /**
-     * Invokes a method on the the given object.
+     * Invokes a method on the given object.
      *
      * @param context    The EL context for this evaluation
      * @param base       The base object on which the method is to be found
@@ -113,7 +113,7 @@ public abstract class ELResolver {
      * @param context The context in which the examination takes place
      * @param base    The object to examine
      *
-     * @return {code null} if the most common type cannot be determine, 
otherwise the most common type
+     * @return {code null} if the most common type cannot be determined, 
otherwise the most common type
      */
     public abstract Class<?> getCommonPropertyType(ELContext context, Object 
base);
 
diff --git a/java/jakarta/el/Expression.java b/java/jakarta/el/Expression.java
index bc8950a5d7..9c833768d4 100644
--- a/java/jakarta/el/Expression.java
+++ b/java/jakarta/el/Expression.java
@@ -16,6 +16,7 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
 import java.io.Serializable;
 
 /**
@@ -23,6 +24,7 @@ import java.io.Serializable;
  */
 public abstract class Expression implements Serializable {
 
+    @Serial
     private static final long serialVersionUID = -6663767980471823812L;
 
     public abstract String getExpressionString();
diff --git a/java/jakarta/el/ExpressionFactory.java 
b/java/jakarta/el/ExpressionFactory.java
index b05488ea6c..bd48c822da 100644
--- a/java/jakarta/el/ExpressionFactory.java
+++ b/java/jakarta/el/ExpressionFactory.java
@@ -66,12 +66,11 @@ public abstract class ExpressionFactory {
      * Create a new {@link ExpressionFactory} passing in the provided {@link 
Properties}. Search order is the same as
      * {@link #newInstance()}.
      *
-     * @param properties the properties to be passed to the new instance (may 
be null)
+     * @param properties the properties to be passed to the new instance 
(might be null)
      *
      * @return the new ExpressionFactory
      */
     public static ExpressionFactory newInstance(Properties properties) {
-        ExpressionFactory result = null;
 
         ClassLoader tccl = Thread.currentThread().getContextClassLoader();
 
@@ -125,6 +124,8 @@ public abstract class ExpressionFactory {
             }
         }
 
+        ExpressionFactory result;
+
         try {
             Constructor<?> constructor = null;
             // Do we need to look for a constructor that will take properties?
@@ -289,10 +290,8 @@ public abstract class ExpressionFactory {
      * @return Class name. There is default, so it is never {@code null}.
      */
     private static String discoverClassName(ClassLoader tccl) {
-        String className = null;
-
         // First services API
-        className = getClassNameServices(tccl);
+        String className = getClassNameServices(tccl);
         if (className == null) {
             // Second el.properties file
             className = getClassNameJreDir();
@@ -332,7 +331,7 @@ public abstract class ExpressionFactory {
                 Properties props = new Properties();
                 props.load(is);
                 String value = props.getProperty(PROPERTY_NAME);
-                if (value != null && value.trim().length() > 0) {
+                if (value != null && !value.trim().isEmpty()) {
                     return value.trim();
                 }
             } catch (FileNotFoundException e) {
@@ -346,7 +345,7 @@ public abstract class ExpressionFactory {
 
     private static String getClassNameSysProp() {
         String value = System.getProperty(PROPERTY_NAME);
-        if (value != null && value.trim().length() > 0) {
+        if (value != null && !value.trim().isEmpty()) {
             return value.trim();
         }
         return null;
diff --git a/java/jakarta/el/ImportHandler.java 
b/java/jakarta/el/ImportHandler.java
index 54b72f839b..ac2e9e492a 100644
--- a/java/jakarta/el/ImportHandler.java
+++ b/java/jakarta/el/ImportHandler.java
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -279,10 +280,10 @@ public class ImportHandler {
 
     }
 
-    private Map<String,Set<String>> packageNames = new ConcurrentHashMap<>();
-    private Map<String,String> classNames = new ConcurrentHashMap<>();
-    private Map<String,Class<?>> clazzes = new ConcurrentHashMap<>();
-    private Map<String,Class<?>> statics = new ConcurrentHashMap<>();
+    private final Map<String,Set<String>> packageNames = new 
ConcurrentHashMap<>();
+    private final Map<String,String> classNames = new ConcurrentHashMap<>();
+    private final Map<String,Class<?>> clazzes = new ConcurrentHashMap<>();
+    private final Map<String,Class<?>> statics = new ConcurrentHashMap<>();
 
 
     public ImportHandler() {
@@ -369,11 +370,7 @@ public class ImportHandler {
         // b) java.lang.Package.getPackage(name) is not reliable (BZ 57574),
         // c) such check is not required by specification.
         Set<String> preloaded = standardPackages.get(name);
-        if (preloaded == null) {
-            packageNames.put(name, Collections.emptySet());
-        } else {
-            packageNames.put(name, preloaded);
-        }
+        packageNames.put(name, Objects.requireNonNullElse(preloaded, 
Collections.emptySet()));
     }
 
 
@@ -425,13 +422,9 @@ public class ImportHandler {
                 result = clazz;
             }
         }
-        if (result == null) {
-            // Cache NotFound results to save repeated calls to findClass()
-            // which is relatively slow
-            clazzes.put(name, NotFound.class);
-        } else {
-            clazzes.put(name, result);
-        }
+        // Cache NotFound results to save repeated calls to findClass()
+        // which is relatively slow
+        clazzes.put(name, Objects.requireNonNullElse(result, NotFound.class));
 
         return result;
     }
diff --git a/java/jakarta/el/ListELResolver.java 
b/java/jakarta/el/ListELResolver.java
index 6cbcab7b85..13c73e16f6 100644
--- a/java/jakarta/el/ListELResolver.java
+++ b/java/jakarta/el/ListELResolver.java
@@ -41,9 +41,8 @@ public class ListELResolver extends ELResolver {
     public Class<?> getType(ELContext context, Object base, Object property) {
         Objects.requireNonNull(context);
 
-        if (base instanceof List<?>) {
+        if (base instanceof List<?> list) {
             context.setPropertyResolved(base, property);
-            List<?> list = (List<?>) base;
             int idx = coerce(property);
             if (idx < 0 || idx >= list.size()) {
                 throw new PropertyNotFoundException(new 
ArrayIndexOutOfBoundsException(idx).getMessage());
@@ -66,9 +65,8 @@ public class ListELResolver extends ELResolver {
     public Object getValue(ELContext context, Object base, Object property) {
         Objects.requireNonNull(context);
 
-        if (base instanceof List<?>) {
+        if (base instanceof List<?> list) {
             context.setPropertyResolved(base, property);
-            List<?> list = (List<?>) base;
             int idx = coerce(property);
             if (idx < 0 || idx >= list.size()) {
                 return null;
@@ -108,9 +106,8 @@ public class ListELResolver extends ELResolver {
     public boolean isReadOnly(ELContext context, Object base, Object property) 
{
         Objects.requireNonNull(context);
 
-        if (base instanceof List<?>) {
+        if (base instanceof List<?> list) {
             context.setPropertyResolved(base, property);
-            List<?> list = (List<?>) base;
             try {
                 int idx = coerce(property);
                 if (idx < 0 || idx >= list.size()) {
diff --git a/java/jakarta/el/MapELResolver.java 
b/java/jakarta/el/MapELResolver.java
index 8b4dfa5cad..3609f16566 100644
--- a/java/jakarta/el/MapELResolver.java
+++ b/java/jakarta/el/MapELResolver.java
@@ -39,10 +39,9 @@ public class MapELResolver extends ELResolver {
     public Class<?> getType(ELContext context, Object base, Object property) {
         Objects.requireNonNull(context);
 
-        if (base instanceof Map<?,?>) {
+        if (base instanceof Map<?, ?> map) {
             context.setPropertyResolved(base, property);
 
-            Map<?,?> map = (Map<?,?>) base;
             if (readOnly || map.getClass() == UNMODIFIABLE) {
                 return null;
             }
diff --git a/java/jakarta/el/MethodExpression.java 
b/java/jakarta/el/MethodExpression.java
index e8a91c4fb8..715cf43bb9 100644
--- a/java/jakarta/el/MethodExpression.java
+++ b/java/jakarta/el/MethodExpression.java
@@ -16,8 +16,11 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
+
 public abstract class MethodExpression extends Expression {
 
+    @Serial
     private static final long serialVersionUID = 8163925562047324656L;
 
     /**
diff --git a/java/jakarta/el/MethodInfo.java b/java/jakarta/el/MethodInfo.java
index 8b977a6a9b..3dbcfe75a1 100644
--- a/java/jakarta/el/MethodInfo.java
+++ b/java/jakarta/el/MethodInfo.java
@@ -77,12 +77,9 @@ public class MethodInfo {
             return false;
         }
         if (returnType == null) {
-            if (other.returnType != null) {
-                return false;
-            }
-        } else if (!returnType.equals(other.returnType)) {
-            return false;
+            return other.returnType == null;
+        } else {
+            return returnType.equals(other.returnType);
         }
-        return true;
     }
 }
diff --git a/java/jakarta/el/MethodNotFoundException.java 
b/java/jakarta/el/MethodNotFoundException.java
index 74446f8346..8a92baf0f3 100644
--- a/java/jakarta/el/MethodNotFoundException.java
+++ b/java/jakarta/el/MethodNotFoundException.java
@@ -16,8 +16,11 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
+
 public class MethodNotFoundException extends ELException {
 
+    @Serial
     private static final long serialVersionUID = -3631968116081480328L;
 
     public MethodNotFoundException() {
diff --git a/java/jakarta/el/MethodReference.java 
b/java/jakarta/el/MethodReference.java
index 30065c5768..6f86ffcbea 100644
--- a/java/jakarta/el/MethodReference.java
+++ b/java/jakarta/el/MethodReference.java
@@ -122,12 +122,9 @@ public class MethodReference {
             return false;
         }
         if (methodInfo == null) {
-            if (other.methodInfo != null) {
-                return false;
-            }
-        } else if (!methodInfo.equals(other.methodInfo)) {
-            return false;
+            return other.methodInfo == null;
+        } else {
+            return methodInfo.equals(other.methodInfo);
         }
-        return true;
     }
 }
diff --git a/java/jakarta/el/OptionalELResolver.java 
b/java/jakarta/el/OptionalELResolver.java
index 0d82293039..9600e1abca 100644
--- a/java/jakarta/el/OptionalELResolver.java
+++ b/java/jakarta/el/OptionalELResolver.java
@@ -175,11 +175,9 @@ public class OptionalELResolver extends ELResolver {
             }
 
             try {
-                Object convertedValue = context.convertToType(value, type);
+                T convertedValue = context.convertToType(value, type);
                 context.setPropertyResolved(true);
-                @SuppressWarnings("unchecked")
-                T result = (T) convertedValue;
-                return result;
+                return convertedValue;
             } catch (ELException e) {
                 /*
                  * TODO: This isn't pretty but it works. Significant 
refactoring would be required to avoid the
diff --git a/java/jakarta/el/PropertyNotFoundException.java 
b/java/jakarta/el/PropertyNotFoundException.java
index 5c4b484c23..45aff2e48b 100644
--- a/java/jakarta/el/PropertyNotFoundException.java
+++ b/java/jakarta/el/PropertyNotFoundException.java
@@ -16,8 +16,11 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
+
 public class PropertyNotFoundException extends ELException {
 
+    @Serial
     private static final long serialVersionUID = -3799200961303506745L;
 
     public PropertyNotFoundException() {
diff --git a/java/jakarta/el/PropertyNotWritableException.java 
b/java/jakarta/el/PropertyNotWritableException.java
index 63399845e2..58f28e9c34 100644
--- a/java/jakarta/el/PropertyNotWritableException.java
+++ b/java/jakarta/el/PropertyNotWritableException.java
@@ -16,8 +16,11 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
+
 public class PropertyNotWritableException extends ELException {
 
+    @Serial
     private static final long serialVersionUID = 827987155471214717L;
 
     public PropertyNotWritableException() {
diff --git a/java/jakarta/el/RecordELResolver.java 
b/java/jakarta/el/RecordELResolver.java
index e9cbae380f..a09b22a293 100644
--- a/java/jakarta/el/RecordELResolver.java
+++ b/java/jakarta/el/RecordELResolver.java
@@ -28,7 +28,7 @@ import java.util.Objects;
  * <p>
  * This resolver is always read-only since {@link Record}s are always 
read-only.
  * <p>
- * {@code ELResolver}s are combined together using {@link 
CompositeELResolver}s to define rich semantics for evaluating
+ * {@code ELResolver}s are combined using {@link CompositeELResolver}s to 
define rich semantics for evaluating
  * an expression. See the javadocs for {@link ELResolver} for details.
  *
  * @since EL 6.0
diff --git a/java/jakarta/el/StaticFieldELResolver.java 
b/java/jakarta/el/StaticFieldELResolver.java
index 5b5c908392..c69e306005 100644
--- a/java/jakarta/el/StaticFieldELResolver.java
+++ b/java/jakarta/el/StaticFieldELResolver.java
@@ -32,11 +32,10 @@ public class StaticFieldELResolver extends ELResolver {
     public Object getValue(ELContext context, Object base, Object property) {
         Objects.requireNonNull(context);
 
-        if (base instanceof ELClass && property instanceof String) {
+        if (base instanceof ELClass && property instanceof String name) {
             context.setPropertyResolved(base, property);
 
             Class<?> clazz = ((ELClass) base).getKlass();
-            String name = (String) property;
             Exception exception = null;
             try {
                 Field field = clazz.getField(name);
@@ -62,9 +61,8 @@ public class StaticFieldELResolver extends ELResolver {
     public void setValue(ELContext context, Object base, Object property, 
Object value) {
         Objects.requireNonNull(context);
 
-        if (base instanceof ELClass && property instanceof String) {
+        if (base instanceof ELClass && property instanceof String name) {
             Class<?> clazz = ((ELClass) base).getKlass();
-            String name = (String) property;
 
             throw new PropertyNotWritableException(
                     Util.message(context, "staticFieldELResolver.notWritable", 
name, clazz.getName()));
@@ -76,11 +74,10 @@ public class StaticFieldELResolver extends ELResolver {
     public Object invoke(ELContext context, Object base, Object method, 
Class<?>[] paramTypes, Object[] params) {
         Objects.requireNonNull(context);
 
-        if (base instanceof ELClass && method instanceof String) {
+        if (base instanceof ELClass && method instanceof String methodName) {
             context.setPropertyResolved(base, method);
 
             Class<?> clazz = ((ELClass) base).getKlass();
-            String methodName = (String) method;
 
             if ("<init>".equals(methodName)) {
                 Constructor<?> match = Util.findConstructor(context, clazz, 
paramTypes, params);
@@ -88,8 +85,7 @@ public class StaticFieldELResolver extends ELResolver {
                 Object[] parameters =
                         Util.buildParameters(context, 
match.getParameterTypes(), match.isVarArgs(), params);
 
-                Object result = null;
-
+                Object result;
                 try {
                     result = match.newInstance(parameters);
                 } catch (InvocationTargetException e) {
@@ -113,7 +109,7 @@ public class StaticFieldELResolver extends ELResolver {
                 Object[] parameters =
                         Util.buildParameters(context, 
match.getParameterTypes(), match.isVarArgs(), params);
 
-                Object result = null;
+                Object result;
                 try {
                     result = match.invoke(null, parameters);
                 } catch (IllegalArgumentException | IllegalAccessException e) {
@@ -133,11 +129,10 @@ public class StaticFieldELResolver extends ELResolver {
     public Class<?> getType(ELContext context, Object base, Object property) {
         Objects.requireNonNull(context);
 
-        if (base instanceof ELClass && property instanceof String) {
+        if (base instanceof ELClass && property instanceof String name) {
             context.setPropertyResolved(base, property);
 
             Class<?> clazz = ((ELClass) base).getKlass();
-            String name = (String) property;
             Exception exception = null;
             try {
                 Field field = clazz.getField(name);
diff --git a/java/jakarta/el/Util.java b/java/jakarta/el/Util.java
index 63f6f3fba3..2935bc88b2 100644
--- a/java/jakarta/el/Util.java
+++ b/java/jakarta/el/Util.java
@@ -420,7 +420,7 @@ class Util {
             return EMPTY_CLASS_ARRAY;
         }
 
-        Class<?> result[] = new Class<?>[values.length];
+        Class<?>[] result = new Class<?>[values.length];
         for (int i = 0; i < values.length; i++) {
             if (values[i] == null) {
                 result[i] = null;
@@ -441,7 +441,7 @@ class Util {
             return m;
         }
         Class<?>[] interfaces = type.getInterfaces();
-        Method mp = null;
+        Method mp;
         for (Class<?> iface : interfaces) {
             try {
                 mp = iface.getMethod(m.getName(), m.getParameterTypes());
@@ -631,24 +631,8 @@ class Util {
     /*
      * This class duplicates code in org.apache.el.util.ReflectionUtil. When 
making changes keep the code in sync.
      */
-    private static class MatchResult implements Comparable<MatchResult> {
-
-        private final boolean varArgs;
-        private final int exactCount;
-        private final int assignableCount;
-        private final int coercibleCount;
-        private final int varArgsCount;
-        private final boolean bridge;
-
-        MatchResult(boolean varArgs, int exactCount, int assignableCount, int 
coercibleCount, int varArgsCount,
-                boolean bridge) {
-            this.varArgs = varArgs;
-            this.exactCount = exactCount;
-            this.assignableCount = assignableCount;
-            this.coercibleCount = coercibleCount;
-            this.varArgsCount = varArgsCount;
-            this.bridge = bridge;
-        }
+    private record MatchResult(boolean varArgs, int exactCount, int 
assignableCount, int coercibleCount, int varArgsCount,
+                               boolean bridge) implements 
Comparable<MatchResult> {
 
         public boolean isVarArgs() {
             return varArgs;
@@ -716,12 +700,12 @@ class Util {
         public int hashCode() {
             final int prime = 31;
             int result = 1;
-            result = prime * result + assignableCount;
-            result = prime * result + (bridge ? 1231 : 1237);
-            result = prime * result + coercibleCount;
-            result = prime * result + exactCount;
-            result = prime * result + (varArgs ? 1231 : 1237);
-            result = prime * result + varArgsCount;
+            result = prime * result + getAssignableCount();
+            result = prime * result + (isBridge() ? 1231 : 1237);
+            result = prime * result + getCoercibleCount();
+            result = prime * result + getExactCount();
+            result = prime * result + (isVarArgs() ? 1231 : 1237);
+            result = prime * result + getVarArgsCount();
             return result;
         }
     }
diff --git a/java/jakarta/el/ValueExpression.java 
b/java/jakarta/el/ValueExpression.java
index 33b04eb906..892c96128c 100644
--- a/java/jakarta/el/ValueExpression.java
+++ b/java/jakarta/el/ValueExpression.java
@@ -16,8 +16,11 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
+
 public abstract class ValueExpression extends Expression {
 
+    @Serial
     private static final long serialVersionUID = 8577809572381654673L;
 
     /**
diff --git a/java/jakarta/el/ValueReference.java 
b/java/jakarta/el/ValueReference.java
index 9148f26443..b7b2cee9ed 100644
--- a/java/jakarta/el/ValueReference.java
+++ b/java/jakarta/el/ValueReference.java
@@ -16,6 +16,7 @@
  */
 package jakarta.el;
 
+import java.io.Serial;
 import java.io.Serializable;
 
 /**
@@ -23,6 +24,7 @@ import java.io.Serializable;
  */
 public class ValueReference implements Serializable {
 
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final Object base;


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org


Reply via email to