Bug 329967 - [otmodel] stack overflow if role extends itself
Summary: [otmodel] stack overflow if role extends itself
Status: NEW
Alias: None
Product: Objectteams
Classification: Tools
Component: OTJ (show other bugs)
Version: 0.7.1   Edit
Hardware: Other Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-10 19:21 EST by Stephan Herrmann CLA
Modified: 2010-11-10 19:21 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 Stephan Herrmann CLA 2010-11-10 19:21:59 EST
By accidentally writing "protected class R extends R { }" I triggered
the following stack overflow:

java.lang.StackOverflowError
at org.eclipse.core.internal.resources.Resource.hashCode(Resource.java:1293)
at org.eclipse.jdt.internal.core.PackageFragmentRoot.hashCode(PackageFragmentRoot.java:707)
at org.eclipse.jdt.internal.core.PackageFragment.hashCode(PackageFragment.java:360)
at org.eclipse.jdt.internal.core.JavaElement.hashCode(JavaElement.java:532)
at org.eclipse.jdt.internal.core.JavaElement.hashCode(JavaElement.java:532)
at org.eclipse.jdt.internal.core.JavaElement.hashCode(JavaElement.java:532)
at java.util.HashMap.get(HashMap.java:300)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getCachedFlags$orig(TypeHierarchy.java:536)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getCachedFlags$chain(TypeHierarchy.java)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies$__OT__OTTypeHierarchyImpl._OT$ensureJavaType$base(OTTypeHierarchies.java)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies$__OT__OTTypeHierarchyImpl.ensureJavaType(OTTypeHierarchies.java:568)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies._OT$OTTypeHierarchyImpl$ensureJavaType$getCachedFlags(OTTypeHierarchies.java:201)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getCachedFlags$chain(TypeHierarchy.java)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.getCachedFlags(TypeHierarchy.java)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.isInterface(TypeHierarchy.java:1061)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getSuperclass$orig(TypeHierarchy.java:670)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getSuperclass$chain(TypeHierarchy.java)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getSuperclass$chain(TypeHierarchy.java)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies$__OT__OTTypeHierarchyImpl._OT$getSuperclassLinearized$base(OTTypeHierarchies.java)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies$__OT__OTTypeHierarchyImpl.getSuperclassLinearized(OTTypeHierarchies.java:492)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies._OT$OTTypeHierarchyImpl$getSuperclassLinearized$getSuperclass(OTTypeHierarchies.java:161)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getSuperclass$chain(TypeHierarchy.java)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies$__OT__OTTypeHierarchyImpl._OT$ensureJavaType$base(OTTypeHierarchies.java)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies$__OT__OTTypeHierarchyImpl.ensureJavaType(OTTypeHierarchies.java:568)
at org.eclipse.objectteams.otdt.core.hierarchy.OTTypeHierarchies._OT$OTTypeHierarchyImpl$ensureJavaType$getSuperclass(OTTypeHierarchies.java:201)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy._OT$getSuperclass$chain(TypeHierarchy.java)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.getSuperclass(TypeHierarchy.java)
at org.eclipse.objectteams.otdt.internal.core.RoleType.findSuperBaseClass(RoleType.java:265)
at org.eclipse.objectteams.otdt.internal.core.RoleType.findBaseClass(RoleType.java:237)
at org.eclipse.objectteams.otdt.internal.core.RoleType.getBaseClass(RoleType.java:157)
at org.eclipse.objectteams.otdt.internal.core.RoleType.getBaseOf(RoleType.java:286)
at org.eclipse.objectteams.otdt.internal.core.RoleType.findSuperBaseClass(RoleType.java:267)
at org.eclipse.objectteams.otdt.internal.core.RoleType.findBaseClass(RoleType.java:237)
at org.eclipse.objectteams.otdt.internal.core.RoleType.getBaseClass(RoleType.java:157)
at org.eclipse.objectteams.otdt.internal.core.RoleType.getBaseOf(RoleType.java:286)
at org.eclipse.objectteams.otdt.internal.core.RoleType.findSuperBaseClass(RoleType.java:267)
...

Actually, R was overriding an inherited role, not sure if that's relevant
for reproducing the bug.