Skip to content

Commit 8485c2d

Browse files
committed
Add JavaClassCyclicTest
1 parent 9b12a98 commit 8485c2d

4 files changed

Lines changed: 1191 additions & 296 deletions

File tree

src/main/java/org/apache/bcel/classfile/JavaClass.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,9 +467,13 @@ private Field findFieldVisit(final String fieldName, final Type fieldType, final
467467
public JavaClass[] getAllInterfaces() throws ClassNotFoundException {
468468
final ClassQueue queue = new ClassQueue();
469469
final Set<JavaClass> allInterfaces = new TreeSet<>();
470+
final Set<JavaClass> visited = new HashSet<>();
470471
queue.enqueue(this);
471472
while (!queue.empty()) {
472473
final JavaClass clazz = queue.dequeue();
474+
if (!visited.add(clazz)) {
475+
continue;
476+
}
473477
final JavaClass souper = clazz.getSuperClass();
474478
final JavaClass[] interfaces = clazz.getInterfaces();
475479
if (clazz.isInterface()) {
@@ -693,7 +697,12 @@ public JavaClass getSuperClass() throws ClassNotFoundException {
693697
public JavaClass[] getSuperClasses() throws ClassNotFoundException {
694698
JavaClass clazz = this;
695699
final List<JavaClass> allSuperClasses = new ArrayList<>();
700+
final Set<JavaClass> visited = new HashSet<>();
701+
visited.add(this);
696702
for (clazz = clazz.getSuperClass(); clazz != null; clazz = clazz.getSuperClass()) {
703+
if (!visited.add(clazz)) {
704+
throw new ClassCircularityError(clazz.getClassName());
705+
}
697706
allSuperClasses.add(clazz);
698707
}
699708
return allSuperClasses.toArray(EMPTY_ARRAY);

0 commit comments

Comments
 (0)