Bug 27658

Summary: Infinite loop when checking cycle
Product: [Eclipse Project] JDT Reporter: Philipe Mulet <philippe_mulet>
Component: CoreAssignee: JDT-Core-Inbox <jdt-core-inbox>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3    
Version: 2.1   
Target Milestone: 2.1 M4   
Hardware: PC   
OS: Windows 2000   
Whiteboard:

Description Philipe Mulet CLA 2002-12-04 09:02:14 EST
Build 2.1-M3

Defined following source implementation of java.lang.Object:
[package java.lang;

public class Object implements I {
}

interface I {
}
]

then defined another type in same project, inheriting from Object, and built it 
incrementally:

INCREMENTAL build
Compile this changed source file src/Compile.java
About to compile src/Compile.java
java.lang.StackOverflowError
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:724)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:748)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectCycle
(ClassScope.java:731)
Comment 1 Philipe Mulet CLA 2002-12-04 09:28:30 EST
Steps to reproduce:

- in Project P, define type java/lang/Object.java in src source folder
- perform a full build
- add one type X:
   public class X extends Exception {
   }
- incremental build (X)

There is no check for circularity on Object superinterface hierarchy (Object 
should not be allowed to have any)
Comment 2 Philipe Mulet CLA 2002-12-04 09:52:16 EST
Suggested fix, add following to ClassScope#connectSuperinterfaces

			if (isJavaLangObject(sourceType)) {
				problemReporter().hierarchyCircularity
(sourceType, superInterface, referenceContext.superInterfaces[i]);
				sourceType.tagBits |= HierarchyHasProblems;
				superInterface.tagBits |= HierarchyHasProblems;
				return false;
			}
Comment 3 Kent Johnson CLA 2002-12-04 15:39:58 EST
Replaced with a check up front to detect java.lang.Object... if it has 
supertypes, we now report an error against it, but do not propagate the 
hierarchy problem to every subtype.
Comment 4 David Audel CLA 2002-12-18 04:12:45 EST
Verified.