pkgEnd = CharOperation.lastIndexOf('/', constantPoolName);
char[] classFileName = CharOperation.subarray(constantPoolName, pkgEnd+1, constantPoolName.length);
ClassFile classFile = (ClassFile) pkg.getClassFile(new String(classFileName) + SuffixConstants.SUFFIX_STRING_class);
return (JavaElement) classFile.getType();
}
ICompilationUnit cu = getCompilationUnit(fileName);
if (cu == null) return null;
// must use getElementAt(...) as there is no back pointer to the defining method (scope is null after resolution has ended)
try {
int sourceStart = ((LocalTypeBinding) referenceBinding).sourceStart;
return (JavaElement) cu.getElementAt(sourceStart);
} catch (JavaModelException e) {
// does not exist
return null;
}
} else if (referenceBinding.isTypeVariable()) {
// type parameter
final String typeVariableName = new String(referenceBinding.sourceName());
Binding declaringElement = ((TypeVariableBinding) referenceBinding).declaringElement;
IBinding declaringTypeBinding = null;
if (declaringElement instanceof MethodBinding) {
declaringTypeBinding = this.resolver.getMethodBinding((MethodBinding) declaringElement);
IMethod declaringMethod = (IMethod) declaringTypeBinding.getJavaElement();
return (JavaElement) declaringMethod.getTypeParameter(typeVariableName);
} else {
ITypeBinding typeBinding2 = this.resolver.getTypeBinding((org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding) declaringElement);
if (typeBinding2 == null) return null;
declaringTypeBinding = typeBinding2;
IType declaringType = (IType) declaringTypeBinding.getJavaElement();
return (JavaElement) declaringType.getTypeParameter(typeVariableName);
}
} else {
if (fileName == null) return null; // case of a WilCardBinding that doesn't have a corresponding Java element
// member or top level type
ITypeBinding declaringTypeBinding = null;
if (this.isArray()) {
declaringTypeBinding = this.getElementType().getDeclaringClass();
} else {
declaringTypeBinding = this.getDeclaringClass();
}
if (declaringTypeBinding == null) {
// top level type
if (Util.isClassFileName(fileName)) {
ClassFile classFile = (ClassFile) getClassFile(fileName);
if (classFile == null) return null;
return (JavaElement) classFile.getType();
}
ICompilationUnit cu = getCompilationUnit(fileName);
if (cu == null) return null;
return (JavaElement) cu.getType(new String(referenceBinding.sourceName()));
} else {
// member type
IType declaringType = (IType) declaringTypeBinding.getJavaElement();
if (declaringType == null) return null;
return (JavaElement) declaringType.getType(new String(referenceBinding.sourceName()));