Bug 27658 - Infinite loop when checking cycle
Summary: Infinite loop when checking cycle
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 2.1   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: 2.1 M4   Edit
Assignee: JDT-Core-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2002-12-04 09:02 EST by Philipe Mulet CLA
Modified: 2002-12-18 04:12 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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.