Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove custom array handling already covered by Class.forName() #4250

Merged
merged 1 commit into from
Jan 20, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -126,21 +126,6 @@ public enum HierarchyTraversalMode {
BOTTOM_UP
}

// Pattern: "[Ljava.lang.String;", "[[[[Ljava.lang.String;", etc.
private static final Pattern VM_INTERNAL_OBJECT_ARRAY_PATTERN = Pattern.compile("^(\\[+)L(.+);$");

/**
* Pattern: "[x", "[[[[x", etc., where x is Z, B, C, D, F, I, J, S, etc.
*
* <p>The pattern intentionally captures the last bracket with the
* capital letter so that the combination can be looked up via
* {@link #classNameToTypeMap}. For example, the last matched group
* will contain {@code "[I"} instead of {@code "I"}.
*
* @see Class#getName()
*/
private static final Pattern VM_INTERNAL_PRIMITIVE_ARRAY_PATTERN = Pattern.compile("^(\\[+)(\\[[ZBCDFIJS])$");

// Pattern: "java.lang.String[]", "int[]", "int[][][][]", etc.
// ?> => non-capturing atomic group
// ++ => possessive quantifier
Expand Down Expand Up @@ -856,32 +841,8 @@ public static Try<Class<?>> tryToLoadClass(String name, ClassLoader classLoader)
}

return Try.call(() -> {
Matcher matcher;

// Primitive arrays such as "[I", "[[[[D", etc.
matcher = VM_INTERNAL_PRIMITIVE_ARRAY_PATTERN.matcher(trimmedName);
if (matcher.matches()) {
String brackets = matcher.group(1);
String componentTypeName = matcher.group(2);
// Calculate dimensions by counting brackets.
int dimensions = brackets.length();

return loadArrayType(classLoader, componentTypeName, dimensions);
}

// Object arrays such as "[Ljava.lang.String;", "[[[[Ljava.lang.String;", etc.
matcher = VM_INTERNAL_OBJECT_ARRAY_PATTERN.matcher(trimmedName);
if (matcher.matches()) {
String brackets = matcher.group(1);
String componentTypeName = matcher.group(2);
// Calculate dimensions by counting brackets.
int dimensions = brackets.length();

return loadArrayType(classLoader, componentTypeName, dimensions);
}

// Arrays such as "java.lang.String[]", "int[]", "int[][][][]", etc.
matcher = SOURCE_CODE_SYNTAX_ARRAY_PATTERN.matcher(trimmedName);
Matcher matcher = SOURCE_CODE_SYNTAX_ARRAY_PATTERN.matcher(trimmedName);
if (matcher.matches()) {
String componentTypeName = matcher.group(1);
String bracketPairs = matcher.group(2);
Expand Down
Loading