Community
Participate
Working Groups
If type for which "Open Type Hierarchy" runs is local/anonymous and has location containing ".class" (e.g /example/bug.classic.example.jar|bug/example/Main$1.class) "Open Type Hierarchy" fails: ... Root exception: java.lang.StringIndexOutOfBoundsException: String index out of range: -38 at java.lang.String.substring(String.java:1768) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder$1.acceptIndexMatch(IndexBasedHierarchyBuilder.java:456) at org.eclipse.jdt.internal.core.search.matching.InternalSearchPattern.acceptMatch(InternalSearchPattern.java:45) at org.eclipse.jdt.internal.core.search.matching.InternalSearchPattern.findIndexMatches(InternalSearchPattern.java:89) at org.eclipse.jdt.internal.core.search.matching.MatchLocator.findIndexMatches(MatchLocator.java:325) at org.eclipse.jdt.internal.core.search.PatternSearchJob.search(PatternSearchJob.java:114) at org.eclipse.jdt.internal.core.search.SubTypeSearchJob.search(SubTypeSearchJob.java:37) at org.eclipse.jdt.internal.core.search.PatternSearchJob.execute(PatternSearchJob.java:64) at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:261) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.searchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:501) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.determinePossibleSubTypes(IndexBasedHierarchyBuilder.java:384) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:118) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:300) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1235) 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:779) at org.eclipse.jdt.internal.core.BinaryType.newTypeHierarchy(BinaryType.java:877) at org.eclipse.jdt.internal.core.BinaryType.newTypeHierarchy(BinaryType.java:896) at org.eclipse.jdt.internal.core.BinaryType.newTypeHierarchy(BinaryType.java:866) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.createTypeHierarchy(TypeHierarchyLifeCycle.java:118) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle.doHierarchyRefresh(TypeHierarchyLifeCycle.java:157) at org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle$1.run(TypeHierarchyLifeCycle.java:98) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113) How to reprodeuce: 1)create supertype: package bug.example; public interface MyInterface { void doIt(); } 2) create anonymous subtype: package bug.example; public class Main { public static void main(String[] args) { MyInterface myInterface = new MyInterface() { public void doIt() { } }; myInterface.doIt(); } } 3) pack it in jar "bug.classic.example.jar" 4) create java project in eclipse, add this jar to project build path 5) try to open type hierarchy for bug.example.MyInterface
Created attachment 49933 [details] "bugged" java project
Changed IndexBasedHierarchyBuilder#searchAllPossibleSubTypes(...) to use lastIndexOf(".class") instead of indexOf(".class"). Added regression test TypeHierarchyTests#testBinaryTypeInDotClassJar(). Released for 3.3M5 in HEAD.
Verified for 3.3M5 using I20070205-0009.