You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2021/07/28 11:08:22 UTC
[tomcat] branch main updated: Remove JreCompat from EL API as it is
no longer required.
This is an automated email from the ASF dual-hosted git repository.
markt 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 335bed0 Remove JreCompat from EL API as it is no longer required.
335bed0 is described below
commit 335bed06af17759de0fcb46235f257bbea301299
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Jul 28 12:08:10 2021 +0100
Remove JreCompat from EL API as it is no longer required.
---
java/jakarta/el/ELProcessor.java | 6 +--
java/jakarta/el/ImportHandler.java | 14 +++--
java/jakarta/el/Jre9Compat.java | 83 ------------------------------
java/jakarta/el/JreCompat.java | 73 --------------------------
java/jakarta/el/StaticFieldELResolver.java | 6 +--
java/jakarta/el/Util.java | 6 +--
6 files changed, 16 insertions(+), 172 deletions(-)
diff --git a/java/jakarta/el/ELProcessor.java b/java/jakarta/el/ELProcessor.java
index aea604a..61d8a2a 100644
--- a/java/jakarta/el/ELProcessor.java
+++ b/java/jakarta/el/ELProcessor.java
@@ -113,13 +113,12 @@ public class ELProcessor {
// Only returns public methods. Java 9+ access is checked below.
Method methods[] = clazz.getMethods();
- JreCompat jreCompat = JreCompat.getInstance();
for (Method method : methods) {
if (!Modifier.isStatic(method.getModifiers())) {
continue;
}
- if (!jreCompat.canAccess(null, method)) {
+ if (!method.canAccess(null)) {
continue;
}
if (method.getName().equals(sig.getName())) {
@@ -193,8 +192,7 @@ public class ELProcessor {
int modifiers = method.getModifiers();
// Check for static, public method and module access for Java 9+
- JreCompat jreCompat = JreCompat.getInstance();
- if (!Modifier.isStatic(modifiers) || !jreCompat.canAccess(null, method)) {
+ if (!Modifier.isStatic(modifiers) || !method.canAccess(null)) {
throw new NoSuchMethodException(Util.message(context,
"elProcessor.defineFunctionInvalidMethod", method.getName(),
method.getDeclaringClass().getName()));
diff --git a/java/jakarta/el/ImportHandler.java b/java/jakarta/el/ImportHandler.java
index 018f53d..899da78 100644
--- a/java/jakarta/el/ImportHandler.java
+++ b/java/jakarta/el/ImportHandler.java
@@ -479,12 +479,11 @@ public class ImportHandler {
return null;
}
- // Class must be public, non-abstract, not an interface and (for
- // Java 9+) in an exported package
- JreCompat jreCompat = JreCompat.getInstance();
+ // Class must be public, non-abstract, not an interface and in an
+ // exported package
int modifiers = clazz.getModifiers();
if (!Modifier.isPublic(modifiers) || Modifier.isAbstract(modifiers) ||
- Modifier.isInterface(modifiers) || !jreCompat.isExported(clazz)) {
+ Modifier.isInterface(modifiers) || !isExported(clazz)) {
if (throwException) {
throw new ELException(Util.message(
null, "importHandler.invalidClass", name));
@@ -497,6 +496,13 @@ public class ImportHandler {
}
+ public static boolean isExported(Class<?> type) {
+ String packageName = type.getPackage().getName();
+ Module module = type.getModule();
+ return module.isExported(packageName);
+ }
+
+
/*
* Marker class used because null values are not permitted in a
* ConcurrentHashMap.
diff --git a/java/jakarta/el/Jre9Compat.java b/java/jakarta/el/Jre9Compat.java
deleted file mode 100644
index a4451ff..0000000
--- a/java/jakarta/el/Jre9Compat.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package jakarta.el;
-
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Method;
-
-/*
- * This is a cut down version of org.apache.tomcat.util.Jre9Compat that provides
- * only the methods required by the EL implementation.
- *
- * This class is duplicated in org.apache.el.util
- * When making changes keep the two in sync.
- */
-class Jre9Compat extends JreCompat {
-
- private static final Method canAccessMethod;
- private static final Method getModuleMethod;
- private static final Method isExportedMethod;
-
- static {
- Method m1 = null;
- Method m2 = null;
- Method m3 = null;
-
- try {
- m1 = AccessibleObject.class.getMethod("canAccess", Object.class);
- m2 = Class.class.getMethod("getModule");
- Class<?> moduleClass = Class.forName("java.lang.Module");
- m3 = moduleClass.getMethod("isExported", String.class);
- } catch (NoSuchMethodException e) {
- // Expected for Java 8
- } catch (ClassNotFoundException e) {
- // Can't log this so...
- throw new RuntimeException(e);
- }
-
- canAccessMethod = m1;
- getModuleMethod = m2;
- isExportedMethod = m3;
- }
-
-
- public static boolean isSupported() {
- return canAccessMethod != null;
- }
-
-
- @Override
- public boolean canAccess(Object base, AccessibleObject accessibleObject) {
- try {
- return ((Boolean) canAccessMethod.invoke(accessibleObject, base)).booleanValue();
- } catch (ReflectiveOperationException | IllegalArgumentException e) {
- return false;
- }
- }
-
-
- @Override
- public boolean isExported(Class<?> type) {
- try {
- String packageName = type.getPackage().getName();
- Object module = getModuleMethod.invoke(type);
- return ((Boolean) isExportedMethod.invoke(module, packageName)).booleanValue();
- } catch (ReflectiveOperationException e) {
- return false;
- }
- }
-}
diff --git a/java/jakarta/el/JreCompat.java b/java/jakarta/el/JreCompat.java
deleted file mode 100644
index 1bfb934..0000000
--- a/java/jakarta/el/JreCompat.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package jakarta.el;
-
-import java.lang.reflect.AccessibleObject;
-
-/*
- * This is cut down version of org.apache.tomcat.util.JreCompat that provides
- * only the methods required by the EL implementation.
- *
- * This class is duplicated in org.apache.el.util
- * When making changes keep the two in sync.
- */
-class JreCompat {
-
- private static final JreCompat instance;
-
- static {
- if (Jre9Compat.isSupported()) {
- instance = new Jre9Compat();
- } else {
- instance = new JreCompat();
- }
- }
-
-
- public static JreCompat getInstance() {
- return instance;
- }
-
-
- /**
- * Is the accessibleObject accessible (as a result of appropriate module
- * exports) on the provided instance?
- *
- * @param base The specific instance to be tested.
- * @param accessibleObject The method/field/constructor to be tested.
- *
- * @return {code true} if the AccessibleObject can be accessed otherwise
- * {code false}
- */
- public boolean canAccess(Object base, AccessibleObject accessibleObject) {
- // Java 8 doesn't support modules so default to true
- return true;
- }
-
-
- /**
- * Is the given class in an exported package?
- *
- * @param type The class to test
- *
- * @return Always {@code true} for Java 8. {@code true} if the enclosing
- * package is exported for Java 9+
- */
- public boolean isExported(Class<?> type) {
- return true;
- }
-}
diff --git a/java/jakarta/el/StaticFieldELResolver.java b/java/jakarta/el/StaticFieldELResolver.java
index 473c414..84cb871 100644
--- a/java/jakarta/el/StaticFieldELResolver.java
+++ b/java/jakarta/el/StaticFieldELResolver.java
@@ -43,10 +43,9 @@ public class StaticFieldELResolver extends ELResolver {
try {
Field field = clazz.getField(name);
int modifiers = field.getModifiers();
- JreCompat jreCompat = JreCompat.getInstance();
if (Modifier.isStatic(modifiers) &&
Modifier.isPublic(modifiers) &&
- jreCompat.canAccess(null, field)) {
+ field.canAccess(null)) {
return field.get(null);
}
} catch (IllegalArgumentException | IllegalAccessException |
@@ -157,10 +156,9 @@ public class StaticFieldELResolver extends ELResolver {
try {
Field field = clazz.getField(name);
int modifiers = field.getModifiers();
- JreCompat jreCompat = JreCompat.getInstance();
if (Modifier.isStatic(modifiers) &&
Modifier.isPublic(modifiers) &&
- jreCompat.canAccess(null, field)) {
+ field.canAccess(field)) {
return field.getType();
}
} catch (IllegalArgumentException | NoSuchFieldException |
diff --git a/java/jakarta/el/Util.java b/java/jakarta/el/Util.java
index 80a6ee0..3bfd267 100644
--- a/java/jakarta/el/Util.java
+++ b/java/jakarta/el/Util.java
@@ -543,12 +543,11 @@ class Util {
* making changes keep the code in sync.
*/
static Method getMethod(Class<?> type, Object base, Method m) {
- JreCompat jreCompat = JreCompat.getInstance();
// If base is null, method MUST be static
// If base is non-null, method may be static or non-static
if (m == null ||
(Modifier.isPublic(type.getModifiers()) &&
- (jreCompat.canAccess(base, m) || base != null && jreCompat.canAccess(null, m)))) {
+ (m.canAccess(base) || base != null && m.canAccess(null)))) {
return m;
}
Class<?>[] interfaces = type.getInterfaces();
@@ -603,8 +602,7 @@ class Util {
Constructor<?> constructor = wrapper.unWrap();
- JreCompat jreCompat = JreCompat.getInstance();
- if (!Modifier.isPublic(clazz.getModifiers()) || !jreCompat.canAccess(null, constructor)) {
+ if (!Modifier.isPublic(clazz.getModifiers()) || !constructor.canAccess(null)) {
throw new MethodNotFoundException(message(
null, "util.method.notfound", clazz, methodName,
paramString(paramTypes)));
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org