Ensure only immediate member classes are only included
Update `ClassFileClassMetadata` so that member classes only include immediate children. This aligns with the other `ClassMetadata` implementations. Closes gh-34869
This commit is contained in:
committed by
Brian Clozel
parent
ead80ce2f5
commit
13b09e6f3c
@@ -268,18 +268,16 @@ class ClassFileClassMetadata implements AnnotationMetadata {
|
||||
void nestMembers(String currentClassName, InnerClassesAttribute innerClasses) {
|
||||
for (InnerClassInfo classInfo : innerClasses.classes()) {
|
||||
String innerClassName = classInfo.innerClass().name().stringValue();
|
||||
// skip parent inner classes
|
||||
if (!innerClassName.startsWith(currentClassName)) {
|
||||
continue;
|
||||
}
|
||||
// the current class is an inner class
|
||||
else if (currentClassName.equals(innerClassName)) {
|
||||
if (currentClassName.equals(innerClassName)) {
|
||||
// the current class is an inner class
|
||||
this.innerAccessFlags = classInfo.flags();
|
||||
}
|
||||
// collecting data about actual inner classes
|
||||
else {
|
||||
this.memberClassNames.add(ClassUtils.convertResourcePathToClassName(innerClassName));
|
||||
}
|
||||
classInfo.outerClass().ifPresent(outerClass -> {
|
||||
if (outerClass.name().stringValue().equals(currentClassName)) {
|
||||
// collecting data about actual inner classes
|
||||
this.memberClassNames.add(ClassUtils.convertResourcePathToClassName(innerClassName));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -184,6 +184,13 @@ public abstract class AbstractAnnotationMetadataTests {
|
||||
TestMemberClass.TestMemberClassInnerClass.class.getName(), TestMemberClass.TestMemberClassInnerInterface.class.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getMemberClassNamesWhenHasNestedMemberClassesReturnsOnlyFirstLevel() {
|
||||
assertThat(get(TestNestedMemberClass.class).getMemberClassNames()).containsOnly(
|
||||
TestNestedMemberClass.TestMemberClassInnerClassA.class.getName(),
|
||||
TestNestedMemberClass.TestMemberClassInnerClassB.class.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getMemberClassNamesWhenHasNoMemberClassesReturnsEmptyArray() {
|
||||
assertThat(get(TestClass.class).getMemberClassNames()).isEmpty();
|
||||
@@ -220,6 +227,22 @@ public abstract class AbstractAnnotationMetadataTests {
|
||||
|
||||
}
|
||||
|
||||
public static class TestNestedMemberClass {
|
||||
|
||||
public static class TestMemberClassInnerClassA {
|
||||
|
||||
public static class TestMemberClassInnerClassAA {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class TestMemberClassInnerClassB {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
Reference in New Issue
Block a user