Skip to content

Commit b39388c

Browse files
committed
Address reviewer comments
1 parent 4b96f35 commit b39388c

File tree

4 files changed

+32
-16
lines changed

4 files changed

+32
-16
lines changed

compiler/src/org.graalvm.compiler.java/src/org/graalvm/compiler/java/LambdaUtils.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,11 @@ public static String findStableLambdaName(ClassInitializationPlugin cip, Provide
120120

121121
public static boolean isLambdaType(ResolvedJavaType type) {
122122
String typeName = type.getName();
123-
return type.isFinalFlagSet() && typeName.contains(LAMBDA_CLASS_NAME_SUBSTRING) && lambdaMatcher(type.getName()).find();
123+
return type.isFinalFlagSet() && isLambdaName(typeName);
124+
}
125+
126+
public static boolean isLambdaName(String name) {
127+
return name.contains(LAMBDA_CLASS_NAME_SUBSTRING) && lambdaMatcher(name).find();
124128
}
125129

126130
private static String createStableLambdaName(ResolvedJavaType lambdaType, List<ResolvedJavaMethod> targetMethods) {

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/config/ConfigurationParserUtils.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,6 @@ public static ReflectionConfigurationParser<ConditionalElement<Class<?>>> create
6060
ConfigurationFiles.Options.StrictConfiguration.getValue());
6161
}
6262

63-
public static int parseAndRegisterConfigurations(ConfigurationParser parser, ImageClassLoader classLoader, String featureName,
64-
HostedOptionKey<LocatableMultiOptionValue.Paths> configFilesOption, HostedOptionKey<LocatableMultiOptionValue.Strings> configResourcesOption, String directoryFileName) {
65-
66-
List<Path> paths = configFilesOption.getValue().values();
67-
List<String> resourceValues = configResourcesOption.getValue().values();
68-
var configFilesOptionName = configFilesOption.getName();
69-
return parseAndRegisterConfigurations(parser, classLoader, featureName, configFilesOptionName, configResourcesOption.getName(), directoryFileName, paths, resourceValues);
70-
}
71-
7263
/**
7364
* Parses configurations in files specified by {@code configFilesOption} and resources specified
7465
* by {@code configResourcesOption} and registers the parsed elements using
@@ -78,6 +69,15 @@ public static int parseAndRegisterConfigurations(ConfigurationParser parser, Ima
7869
* @param directoryFileName file name for searches via {@link ConfigurationFiles}.
7970
* @return the total number of successfully parsed configuration files and resources.
8071
*/
72+
public static int parseAndRegisterConfigurations(ConfigurationParser parser, ImageClassLoader classLoader, String featureName,
73+
HostedOptionKey<LocatableMultiOptionValue.Paths> configFilesOption, HostedOptionKey<LocatableMultiOptionValue.Strings> configResourcesOption, String directoryFileName) {
74+
75+
List<Path> paths = configFilesOption.getValue().values();
76+
List<String> resourceValues = configResourcesOption.getValue().values();
77+
var configFilesOptionName = configFilesOption.getName();
78+
return parseAndRegisterConfigurations(parser, classLoader, featureName, configFilesOptionName, configResourcesOption.getName(), directoryFileName, paths, resourceValues);
79+
}
80+
8181
public static int parseAndRegisterConfigurations(ConfigurationParser parser, ImageClassLoader classLoader,
8282
String featureName, String configFilesOptionName, String configResourcesOptionName,
8383
String directoryFileName, List<Path> paths,

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,8 @@ public void registerWithTargetConstructorClass(ConfigurationCondition condition,
528528

529529
private static void registerForSerialization(Class<?> serializationTargetClass) {
530530

531-
if (Serializable.class.isAssignableFrom(serializationTargetClass) || !Proxy.isProxyClass(serializationTargetClass)) {
531+
/* Proxy classes have special treatment so no registration needed */
532+
if (Serializable.class.isAssignableFrom(serializationTargetClass) && !Proxy.isProxyClass(serializationTargetClass)) {
532533
/*
533534
* ObjectStreamClass.computeDefaultSUID is always called at runtime to verify
534535
* serialization class consistency, so need to register all constructors, methods and

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/snippets/SubstrateGraphBuilderPlugins.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,29 +252,40 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
252252
}
253253
}
254254

255-
private static boolean nonNullJavaConstants(ValueNode... clazz) {
256-
for (ValueNode valueNode : clazz) {
255+
private static boolean nonNullJavaConstants(ValueNode... valueNodes) {
256+
for (ValueNode valueNode : valueNodes) {
257257
if (!valueNode.isJavaConstant() || valueNode.isNullConstant()) {
258258
return false;
259259
}
260260
}
261261
return true;
262262
}
263263

264-
private static boolean isParseLimit(String pattern) {
264+
private static boolean isLimitPattern(String pattern) {
265265
int eqNdx = pattern.indexOf('=');
266266
// not a limit pattern
267267
return eqNdx >= 0;
268268
}
269269

270+
/**
271+
* Extract the target class name from the <code>pattern</code>. We support two formats:
272+
* <ul>
273+
* <li>A concrete class name (pattern doesn't end with .* or .**), e.g.:
274+
* <code>com.foo.Bar</code>. In this case we register the concrete class for
275+
* serialization/deserialization.</li>
276+
* <li>A concrete class name that ends with a <code>$$Lambda$*</code>. In this case, we register
277+
* all lambdas that originate in the methods of the target class for
278+
* serialization/deserialization.</li>
279+
* </ul>
280+
*/
270281
private static void parsePatternAndRegister(String pattern) {
271282
String[] patterns = pattern.split(";");
272283
for (String p : patterns) {
273284
int nameLen = p.length();
274285
if (nameLen == 0) {
275286
continue;
276287
}
277-
if (isParseLimit(p)) {
288+
if (isLimitPattern(p)) {
278289
continue;
279290
}
280291
boolean negate = p.charAt(0) == '!';
@@ -293,7 +304,7 @@ private static void parsePatternAndRegister(String pattern) {
293304
// Pattern is a classname (possibly empty) with a trailing wildcard
294305
final String className = p.substring(poffset, nameLen - 1);
295306
if (!negate) {
296-
if (className.contains(LambdaUtils.LAMBDA_CLASS_NAME_SUBSTRING)) {
307+
if (className.endsWith(LambdaUtils.LAMBDA_CLASS_NAME_SUBSTRING)) {
297308
try {
298309
String lambdaHolderName = className.split(LambdaUtils.LAMBDA_SPLIT_PATTERN)[0];
299310
RuntimeSerialization.registerLambdaCapturingClass(Class.forName(lambdaHolderName, false, Thread.currentThread().getContextClassLoader()));

0 commit comments

Comments
 (0)