Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2187,7 +2187,7 @@ public void test0070() throws JavaModelException {
SimpleName simpleName2 = (SimpleName) name;
typeBinding = simpleName2.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong name 3", "test0070.Outer", typeBinding.getQualifiedName());
assertEquals("Wrong name 3", "test0070.Outer<java.lang.String>", typeBinding.getQualifiedName());
}

/**
Expand Down Expand Up @@ -4001,7 +4001,7 @@ public void test0130() throws CoreException {
simpleName = qualifiedType.getName();
typeBinding = simpleName.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong qualified name 5", "Outer.Inner", typeBinding.getQualifiedName());
assertEquals("Wrong qualified name 5", "Outer<java.lang.String>.Inner", typeBinding.getQualifiedName());
type = qualifiedType.getQualifier();
assertTrue("Not a parameterized type", type.isParameterizedType());
parameterizedType = (ParameterizedType) type;
Expand All @@ -4019,7 +4019,7 @@ public void test0130() throws CoreException {
simpleName = (SimpleName) name;
typeBinding = simpleName.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong qualified name 8", "Outer", typeBinding.getQualifiedName());
assertEquals("Wrong qualified name 8", "Outer<java.lang.String>", typeBinding.getQualifiedName());
}

// https://bugs.eclipse.org/bugs/show_bug.cgi?id=84140
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2183,7 +2183,7 @@ public void test0070() throws JavaModelException {
SimpleName simpleName2 = (SimpleName) name;
typeBinding = simpleName2.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong name 3", "test0070.Outer", typeBinding.getQualifiedName());
assertEquals("Wrong name 3", "test0070.Outer<java.lang.String>", typeBinding.getQualifiedName());
}

/**
Expand Down Expand Up @@ -3997,7 +3997,7 @@ public void test0130() throws CoreException {
simpleName = qualifiedType.getName();
typeBinding = simpleName.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong qualified name 5", "Outer.Inner", typeBinding.getQualifiedName());
assertEquals("Wrong qualified name 5", "Outer<java.lang.String>.Inner", typeBinding.getQualifiedName());
type = qualifiedType.getQualifier();
assertTrue("Not a parameterized type", type.isParameterizedType());
parameterizedType = (ParameterizedType) type;
Expand All @@ -4015,7 +4015,7 @@ public void test0130() throws CoreException {
simpleName = (SimpleName) name;
typeBinding = simpleName.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong qualified name 8", "Outer", typeBinding.getQualifiedName());
assertEquals("Wrong qualified name 8", "Outer<java.lang.String>", typeBinding.getQualifiedName());
}

// https://bugs.eclipse.org/bugs/show_bug.cgi?id=84140
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2199,7 +2199,7 @@ public void test0070() throws JavaModelException {
SimpleName simpleName2 = (SimpleName) name;
typeBinding = simpleName2.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong name 3", "test0070.Outer", typeBinding.getQualifiedName());
assertEquals("Wrong name 3", "test0070.Outer<java.lang.String>", typeBinding.getQualifiedName());
}

/**
Expand Down Expand Up @@ -4013,7 +4013,7 @@ public void test0130() throws CoreException {
simpleName = qualifiedType.getName();
typeBinding = simpleName.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong qualified name 5", "Outer.Inner", typeBinding.getQualifiedName());
assertEquals("Wrong qualified name 5", "Outer<java.lang.String>.Inner", typeBinding.getQualifiedName());
type = qualifiedType.getQualifier();
assertTrue("Not a parameterized type", type.isParameterizedType());
parameterizedType = (ParameterizedType) type;
Expand All @@ -4031,7 +4031,7 @@ public void test0130() throws CoreException {
simpleName = (SimpleName) name;
typeBinding = simpleName.resolveTypeBinding();
assertNotNull("No binding", typeBinding);
assertEquals("Wrong qualified name 8", "Outer", typeBinding.getQualifiedName());
assertEquals("Wrong qualified name 8", "Outer<java.lang.String>", typeBinding.getQualifiedName());
}

// https://bugs.eclipse.org/bugs/show_bug.cgi?id=84140
Expand Down Expand Up @@ -11883,4 +11883,52 @@ public void testBug540313() throws JavaModelException {
assertNull("Binding", typeBinding);
}

public void testGH4344() throws CoreException {
this.workingCopy = getWorkingCopy("/Converter15/src/X.java", true/* resolve */);
String contents = """
class Sandwich {}
class Outer<X> {
public class Inner {
public class InnerInner<Y> {
}
}
}
public class X {
public Outer<Sandwich> method1() {
return null;
}
public Outer<Sandwich>.Inner.InnerInner<Sandwich> method2() {
return null;
}
}
""";
ASTNode node = buildAST(contents, this.workingCopy);
assertNotNull("No node", node);
assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, node.getNodeType());
CompilationUnit compilationUnit = (CompilationUnit) node;
assertProblemsSize(compilationUnit, 0);

node = getASTNode(compilationUnit, 2, 0);
assertEquals("Not a method declaration", ASTNode.METHOD_DECLARATION, node.getNodeType());
MethodDeclaration firstMethodDeclaration = (MethodDeclaration) node;
SimpleType firstSimpleType = (SimpleType) ((ParameterizedType) firstMethodDeclaration.getReturnType2())
.getType();
ITypeBinding firstSimpleTypeBinding = (ITypeBinding) firstSimpleType.getName().resolveBinding();
assertEquals("Outer<Sandwich>", firstSimpleTypeBinding.getQualifiedName());

node = getASTNode(compilationUnit, 2, 1);
assertEquals("Not a method declaration", ASTNode.METHOD_DECLARATION, node.getNodeType());
MethodDeclaration secondMethodDeclaration = (MethodDeclaration) node;
SimpleType secondSimpleType = (SimpleType) //
((ParameterizedType) //
((QualifiedType) //
((QualifiedType) //
((ParameterizedType)secondMethodDeclaration.getReturnType2()).getType()) //
.getQualifier()) //
.getQualifier()) //
.getType();
ITypeBinding secondSimpleTypeBinding = (ITypeBinding) secondSimpleType.getName().resolveBinding();
assertEquals("Outer<Sandwich>", secondSimpleTypeBinding.getQualifiedName());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -1080,25 +1080,42 @@ synchronized ITypeBinding resolveTypeBindingForName(Name name) {
return this.getTypeBinding(qualifiedTypeReference.resolvedType.leafComponentType());
} else {
if (index >= 0) {
BlockScope internalScope = (BlockScope) this.astNodesToBlockScope.get(name);
Binding binding = null;
try {
if (internalScope == null) {
if (this.scope == null) return null;
binding = this.scope.getTypeOrPackage(CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
} else {
binding = internalScope.getTypeOrPackage(CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
Binding binding = qualifiedTypeReference.resolvedType;
for (int i = 0; i < (qualifiedTypeReference.tokens.length - index); i++) {
if (!(binding instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding)) {
binding = null;
break;
}
binding = typeBinding.enclosingType();
if (binding == null) {
break;
}
} catch (AbortCompilation e) {
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=53357
}
if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.PackageBinding) {
return null;
} else if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding) {
// it is a type
return this.getTypeBinding((org.eclipse.jdt.internal.compiler.lookup.TypeBinding)binding);
if (binding != null) {
return this.getTypeBinding((org.eclipse.jdt.internal.compiler.lookup.TypeBinding) binding);
} else {
return null;
BlockScope internalScope = (BlockScope) this.astNodesToBlockScope.get(name);
try {
if (internalScope == null) {
if (this.scope == null)
return null;
binding = this.scope.getTypeOrPackage(
CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
} else {
binding = internalScope.getTypeOrPackage(
CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
}
} catch (AbortCompilation e) {
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=53357
}
if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.PackageBinding) {
return null;
} else if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding) {
// it is a type
return this.getTypeBinding((org.eclipse.jdt.internal.compiler.lookup.TypeBinding) binding);
} else {
return null;
}
}
}
}
Expand Down Expand Up @@ -1313,25 +1330,42 @@ synchronized IBinding resolveName(Name name) {
return this.getTypeBinding(qualifiedTypeReference.resolvedType.leafComponentType());
} else {
if (index >= 0) {
BlockScope internalScope = (BlockScope) this.astNodesToBlockScope.get(name);
Binding binding = null;
try {
if (internalScope == null) {
if (this.scope == null) return null;
binding = this.scope.getTypeOrPackage(CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
} else {
binding = internalScope.getTypeOrPackage(CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
Binding binding = qualifiedTypeReference.resolvedType;
for (int i = 0; i < (qualifiedTypeReference.tokens.length - index); i++) {
if (!(binding instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding)) {
binding = null;
break;
}
binding = typeBinding.enclosingType();
if (binding == null) {
break;
}
} catch (AbortCompilation e) {
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=53357
}
if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.PackageBinding) {
return getPackageBinding((org.eclipse.jdt.internal.compiler.lookup.PackageBinding)binding);
} else if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding) {
// it is a type
if (binding != null) {
return this.getTypeBinding((org.eclipse.jdt.internal.compiler.lookup.TypeBinding)binding);
} else {
return null;
BlockScope internalScope = (BlockScope) this.astNodesToBlockScope.get(name);
try {
if (internalScope == null) {
if (this.scope == null)
return null;
binding = this.scope.getTypeOrPackage(
CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
} else {
binding = internalScope.getTypeOrPackage(
CharOperation.subarray(qualifiedTypeReference.tokens, 0, index));
}
} catch (AbortCompilation e) {
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=53357
}
if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.PackageBinding) {
return getPackageBinding((org.eclipse.jdt.internal.compiler.lookup.PackageBinding) binding);
} else if (binding instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding) {
// it is a type
return this.getTypeBinding((org.eclipse.jdt.internal.compiler.lookup.TypeBinding) binding);
} else {
return null;
}
}
}
}
Expand Down
Loading