Index: dom/org/eclipse/jdt/core/dom/TypeBinding.java =================================================================== RCS file: /home/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java,v retrieving revision 1.104 diff -u -r1.104 TypeBinding.java --- dom/org/eclipse/jdt/core/dom/TypeBinding.java 15 Jun 2005 16:29:45 -0000 1.104 +++ dom/org/eclipse/jdt/core/dom/TypeBinding.java 22 Jun 2005 09:14:42 -0000 @@ -48,6 +48,7 @@ import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding; import org.eclipse.jdt.internal.compiler.lookup.WildcardBinding; +import org.eclipse.jdt.internal.compiler.util.SuffixConstants; import org.eclipse.jdt.internal.compiler.util.Util; import org.eclipse.jdt.internal.core.ClassFile; import org.eclipse.jdt.internal.core.JavaElement; @@ -397,8 +398,20 @@ referenceBinding = (ReferenceBinding) typeBinding; char[] fileName = referenceBinding.getFileName(); if (Util.isClassFileName(fileName)) { - ClassFile classFile = (ClassFile) getClassFile(fileName); - if (classFile == null) return null; + int lastSlash = CharOperation.lastIndexOf('/', fileName); + if (lastSlash == -1) + lastSlash = CharOperation.lastIndexOf(File.separatorChar, fileName); + if (lastSlash == -1) + return null; + IPackageFragment pkg = getPackageFragment(fileName, lastSlash); + char[] constantPoolName = referenceBinding.constantPoolName(); + if (constantPoolName == null) { + ClassFile classFile = (ClassFile) getClassFile(fileName); + return classFile == null ? null : (JavaElement) classFile.getType(); + } + lastSlash = CharOperation.lastIndexOf('/', constantPoolName); + char[] classFileName = CharOperation.subarray(constantPoolName, lastSlash+1, constantPoolName.length); + ClassFile classFile = (ClassFile) pkg.getClassFile(new String(classFileName) + SuffixConstants.SUFFIX_STRING_class); return (JavaElement) classFile.getType(); } if (referenceBinding.isLocalType() || referenceBinding.isAnonymousType()) {