This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push:
new 14d16064f6 Fix unneeded/wrong substring calls in expression evaluation
and put back weak references in cache (#1258)
14d16064f6 is described below
commit 14d16064f69aeac554ebc8469bc44f6dec75d1ca
Author: Guillaume Nodet <[email protected]>
AuthorDate: Wed Sep 27 09:28:31 2023 +0200
Fix unneeded/wrong substring calls in expression evaluation and put back
weak references in cache (#1258)
---
.../plugin/PluginParameterExpressionEvaluator.java | 18 +++++++++---------
.../plugin/PluginParameterExpressionEvaluatorV4.java | 18 +++++++++---------
.../apache/maven/plugin/ReflectionValueExtractor.java | 9 ++++++---
3 files changed, 24 insertions(+), 21 deletions(-)
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
index 47bf555345..a9ed4be3be 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
@@ -172,11 +172,11 @@ public class PluginParameterExpressionEvaluator
implements TypeAwareExpressionEv
int pathSeparator = expression.indexOf('/');
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
session);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), session);
+ value = ReflectionValueExtractor.evaluate(expression,
session);
}
} catch (Exception e) {
// TODO don't catch exception
@@ -198,7 +198,7 @@ public class PluginParameterExpressionEvaluator implements
TypeAwareExpressionEv
value = ReflectionValueExtractor.evaluate(pathExpression,
project);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), project);
+ value = ReflectionValueExtractor.evaluate(expression,
project);
}
} catch (Exception e) {
// TODO don't catch exception
@@ -214,11 +214,11 @@ public class PluginParameterExpressionEvaluator
implements TypeAwareExpressionEv
int pathSeparator = expression.indexOf('/');
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
mojoExecution);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), mojoExecution);
+ value = ReflectionValueExtractor.evaluate(expression,
mojoExecution);
}
} catch (Exception e) {
// TODO don't catch exception
@@ -234,11 +234,11 @@ public class PluginParameterExpressionEvaluator
implements TypeAwareExpressionEv
PluginDescriptor pluginDescriptor =
mojoDescriptor.getPluginDescriptor();
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
pluginDescriptor);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), pluginDescriptor);
+ value = ReflectionValueExtractor.evaluate(expression,
pluginDescriptor);
}
} catch (Exception e) {
throw new ExpressionEvaluationException(
@@ -251,11 +251,11 @@ public class PluginParameterExpressionEvaluator
implements TypeAwareExpressionEv
int pathSeparator = expression.indexOf('/');
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
session.getSettings());
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1),
session.getSettings());
+ value = ReflectionValueExtractor.evaluate(expression,
session.getSettings());
}
} catch (Exception e) {
// TODO don't catch exception
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4.java
b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4.java
index 56532bc051..2357af54ef 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4.java
@@ -175,11 +175,11 @@ public class PluginParameterExpressionEvaluatorV4
implements TypeAwareExpression
int pathSeparator = expression.indexOf('/');
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
session);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), session);
+ value = ReflectionValueExtractor.evaluate(expression,
session);
}
} catch (Exception e) {
// TODO don't catch exception
@@ -206,7 +206,7 @@ public class PluginParameterExpressionEvaluatorV4
implements TypeAwareExpression
value = ReflectionValueExtractor.evaluate(pathExpression,
project);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), project);
+ value = ReflectionValueExtractor.evaluate(expression,
project);
}
} catch (Exception e) {
// TODO don't catch exception
@@ -223,11 +223,11 @@ public class PluginParameterExpressionEvaluatorV4
implements TypeAwareExpression
int pathSeparator = expression.indexOf('/');
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
mojoExecution);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), mojoExecution);
+ value = ReflectionValueExtractor.evaluate(expression,
mojoExecution);
}
} catch (Exception e) {
// TODO don't catch exception
@@ -246,11 +246,11 @@ public class PluginParameterExpressionEvaluatorV4
implements TypeAwareExpression
mojoExecution.getMojoDescriptor().getPluginDescriptor();
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
pluginDescriptor);
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1), pluginDescriptor);
+ value = ReflectionValueExtractor.evaluate(expression,
pluginDescriptor);
}
} catch (Exception e) {
throw new ExpressionEvaluationException(
@@ -263,11 +263,11 @@ public class PluginParameterExpressionEvaluatorV4
implements TypeAwareExpression
int pathSeparator = expression.indexOf('/');
if (pathSeparator > 0) {
- String pathExpression = expression.substring(1,
pathSeparator);
+ String pathExpression = expression.substring(0,
pathSeparator);
value = ReflectionValueExtractor.evaluate(pathExpression,
session.getSettings());
value = value + expression.substring(pathSeparator);
} else {
- value =
ReflectionValueExtractor.evaluate(expression.substring(1),
session.getSettings());
+ value = ReflectionValueExtractor.evaluate(expression,
session.getSettings());
}
} catch (Exception e) {
// TODO don't catch exception
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/ReflectionValueExtractor.java
b/maven-core/src/main/java/org/apache/maven/plugin/ReflectionValueExtractor.java
index 6590ca6099..64d5453661 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/ReflectionValueExtractor.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/ReflectionValueExtractor.java
@@ -18,6 +18,8 @@
*/
package org.apache.maven.plugin;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -41,7 +43,7 @@ class ReflectionValueExtractor {
* This approach prevents permgen space overflows due to retention of
discarded
* classloaders.
*/
- private static final Map<Class<?>, ClassMap> CLASS_MAPS = new
WeakHashMap<>();
+ private static final Map<Class<?>, WeakReference<ClassMap>> CLASS_MAPS =
new WeakHashMap<>();
static final int EOF = -1;
@@ -285,12 +287,13 @@ class ReflectionValueExtractor {
}
private static ClassMap getClassMap(Class<?> clazz) {
- ClassMap classMap = CLASS_MAPS.get(clazz);
+ Reference<ClassMap> ref = CLASS_MAPS.get(clazz);
+ ClassMap classMap = ref != null ? ref.get() : null;
if (classMap == null) {
classMap = new ClassMap(clazz);
- CLASS_MAPS.put(clazz, classMap);
+ CLASS_MAPS.put(clazz, new WeakReference<>(classMap));
}
return classMap;