Bug 157035 - "Open Type Hierarchy" fails if subtype is anonymous or local class and location for this subtype contains ".class"
Summary: "Open Type Hierarchy" fails if subtype is anonymous or local class and locati...
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.3 M5   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-09-12 09:57 EDT by Ilya Klyuchnikov CLA
Modified: 2007-02-05 11:23 EST (History)
0 users

See Also:


Attachments
"bugged" java project (2.07 KB, application/zip)
2006-09-12 10:00 EDT, Ilya Klyuchnikov CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ilya Klyuchnikov CLA 2006-09-12 09:57:14 EDT
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
Comment 1 Ilya Klyuchnikov CLA 2006-09-12 10:00:40 EDT
Created attachment 49933 [details]
"bugged" java project
Comment 2 Jerome Lanneluc CLA 2007-01-10 07:27:31 EST
Changed IndexBasedHierarchyBuilder#searchAllPossibleSubTypes(...) to use lastIndexOf(".class") instead of indexOf(".class").
Added regression test TypeHierarchyTests#testBinaryTypeInDotClassJar().

Released for 3.3M5 in HEAD.
Comment 3 Olivier Thomann CLA 2007-02-05 11:23:21 EST
Verified for 3.3M5 using I20070205-0009.