Bug 186781 - StackOverflowError while computing launch button tooltip
Summary: StackOverflowError while computing launch button tooltip
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.3   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.4 M2   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-05-14 09:35 EDT by Philipe Mulet CLA
Modified: 2007-09-18 05:29 EDT (History)
1 user (show)

See Also:


Attachments
Proposed patch (4.73 KB, patch)
2007-08-16 06:40 EDT, Frederic Fusier CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Philipe Mulet CLA 2007-05-14 09:35:08 EDT
Build 3.3RC0

Had defined the following file in default package X.java, containing the source:

-------------------
package p;
import static p.Super.A.*;

class Super<T> {
	static class A<U> {}
}

public class X extends Super<A<X>> {
}
-------------------

Moved mouse cursor onto the run button, got an error dialog asking to exit workbench.


!ENTRY org.eclipse.core.jobs 4 2 2007-05-14 15:25:31.411
!MESSAGE An internal error occurred during: "Compute launch button tooltip".
!STACK 0
java.lang.StackOverflowError
        at org.eclipse.jdt.internal.core.PackageFragmentRoot.equals(PackageFragmentRoot.java:333)
        at org.eclipse.jdt.internal.core.PackageFragment.equals(PackageFragment.java:175)
        at java.util.Hashtable$HashtableCacheHashEntry.equalsKey(Hashtable.java:65)
        at java.util.Hashtable.get(Hashtable.java:486)
        at org.eclipse.jdt.internal.core.util.LRUCache.get(LRUCache.java:206)
        at org.eclipse.jdt.internal.core.JavaModelCache.getInfo(JavaModelCache.java:101)
        at org.eclipse.jdt.internal.core.JavaModelManager.getInfo(JavaModelManager.java:1566)
        at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:247)
        at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:235)
        at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:190)
        at org.eclipse.jdt.internal.core.NameLookup.seekTypesInSourcePackage(NameLookup.java:1037)
        at org.eclipse.jdt.internal.core.NameLookup.seekTypes(NameLookup.java:952)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:746)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:630)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:589)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.find(SearchableEnvironment.java:96)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.findType(SearchableEnvironment.java:282)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:124)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)

        ....

        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:136)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:447)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.checkAndSetImports(CompilationUnitScope.java:182)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:275)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:718)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:550)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyBuilder.buildSupertypes(HierarchyBuilder.java:115)
        at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:135)
        at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:300)
        at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1234)
        at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:90)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:780)
        at org.eclipse.jdt.internal.core.SourceType.newSupertypeHierarchy(SourceType.java:697)
        at org.eclipse.jdt.internal.core.SourceType.newSupertypeHierarchy(SourceType.java:649)
        at org.eclipse.jdt.internal.launching.JavaLaunchableTester.hasSuperclass(JavaLaunchableTester.java:470)
        at org.eclipse.jdt.internal.launching.JavaLaunchableTester.test(JavaLaunchableTester.java:613)
        at org.eclipse.core.internal.expressions.Property.test(Property.java:58)
        at org.eclipse.core.internal.expressions.TestExpression.evaluate(TestExpression.java:98)
        at org.eclipse.core.internal.expressions.CompositeExpression.evaluateOr(CompositeExpression.java:68)
        at org.eclipse.core.internal.expressions.OrExpression.evaluate(OrExpression.java:21)
        at org.eclipse.core.internal.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:53)
        at org.eclipse.core.internal.expressions.IterateExpression.evaluate(IterateExpression.java:150)
        at org.eclipse.core.internal.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:53)
        at org.eclipse.core.internal.expressions.WithExpression.evaluate(WithExpression.java:69)
        at org.eclipse.core.internal.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:53)
        at org.eclipse.core.internal.expressions.EnablementExpression.evaluate(EnablementExpression.java:43)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension.evalEnablementExpression(LaunchShortcutExtension.java:282)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager.getApplicableConfigurationTypes(LaunchConfigurationManager.java:693)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager.getApplicableLaunchConfigurations(LaunchConfigurationManager.java:726
        at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.getResourceLabel(LaunchingResourceManager.java:272)
        at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.computeLabels(LaunchingResourceManager.java:194)
        at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager$2.run(LaunchingResourceManager.java:120)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Comment 1 Philipe Mulet CLA 2007-05-14 09:36:29 EDT
Kent - can you look at it pls ? 
Comment 2 Philipe Mulet CLA 2007-05-14 09:41:20 EDT
Actually, hovering onto the DEBUG button is required (not RUN).
Comment 3 Philipe Mulet CLA 2007-05-14 09:48:45 EDT
Kent - to reproduce, pls get 'Crap' project v_001, and open X.java from default package. There must be sthg extra required to reproduce from my original testcase (likely some existing type).
Comment 4 Philipe Mulet CLA 2007-05-14 09:57:42 EDT
Other case (maybe same):
package p;
import static p.Super.*;

class Top<T> {}

class Super<T> extends Top<T>{
}

public class X extends Super<java.util.List<X>> {
}
Comment 5 Kent Johnson CLA 2007-05-14 13:07:48 EDT
I think the secondary type cache is attaching Super to the package p even tho
the file X.java is defined in the default package.

We should never find Super in the first place to cause the stack overflow.
Comment 6 Frederic Fusier CLA 2007-08-16 06:40:32 EDT
Created attachment 76207 [details]
Proposed patch
Comment 7 Frederic Fusier CLA 2007-08-16 06:41:01 EDT
Released for 3.4M1 in HEAD stream.
Comment 8 Eric Jodet CLA 2007-09-18 05:28:40 EDT
Verified for 3.4 M2 using build I20070917-0010.