Skip to content

Commit

Permalink
Fix Util.getSignature for union/intersection
Browse files Browse the repository at this point in the history
  • Loading branch information
mickaelistria authored and akurtakov committed Mar 13, 2024
1 parent b7b0871 commit 5664513
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@
import org.eclipse.jdt.core.IJavaModelStatusConstants;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.IntersectionType;
import org.eclipse.jdt.core.dom.NameQualifiedType;
import org.eclipse.jdt.core.dom.QualifiedType;
import org.eclipse.jdt.core.dom.SimpleType;
import org.eclipse.jdt.core.dom.UnionType;
import org.eclipse.jdt.internal.core.JavaModelManager;
import org.eclipse.jdt.internal.core.JavaModelStatus;
import org.eclipse.jdt.internal.core.util.Util;
Expand Down Expand Up @@ -122,5 +124,19 @@ public void testQualifiedTypeTypeSignature() {
QualifiedType qualifiedType = ast.newQualifiedType(parentType, ast.newSimpleName("ChildType"));
assertEquals("QParentType.ChildType;", Util.getSignature(qualifiedType));
}
public void testIntersectionTypeSignature() {
AST ast = AST.newAST(AST.getJLSLatest(), false);
IntersectionType type = ast.newIntersectionType();
type.types().add(ast.newSimpleType(ast.newSimpleName("A")));
type.types().add(ast.newSimpleType(ast.newSimpleName("B")));
assertEquals("|QA;:QB;", Util.getSignature(type));
}
public void testUnionTypeSignature() {
AST ast = AST.newAST(AST.getJLSLatest(), false);
UnionType type = ast.newUnionType();
type.types().add(ast.newSimpleType(ast.newSimpleName("A")));
type.types().add(ast.newSimpleType(ast.newSimpleName("B")));
assertEquals("&QA;:QB;", Util.getSignature(type));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,14 @@
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ArrayType;
import org.eclipse.jdt.core.dom.IntersectionType;
import org.eclipse.jdt.core.dom.NameQualifiedType;
import org.eclipse.jdt.core.dom.ParameterizedType;
import org.eclipse.jdt.core.dom.PrimitiveType;
import org.eclipse.jdt.core.dom.QualifiedType;
import org.eclipse.jdt.core.dom.SimpleType;
import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.UnionType;
import org.eclipse.jdt.core.dom.WildcardType;
import org.eclipse.jdt.core.util.IClassFileAttribute;
import org.eclipse.jdt.core.util.IClassFileReader;
Expand Down Expand Up @@ -1209,6 +1211,16 @@ public static char[] getResourceContentsAsCharArray(IFile file, String encoding)
* Returns the signature of the given type.
*/
public static String getSignature(Type type) {
if (type instanceof UnionType union) {
return Signature.createUnionTypeSignature(((List<Type>)union.types()).stream()
.map(Util::getSignature)
.toArray(String[]::new));
}
if (type instanceof IntersectionType intersection) {
return Signature.createIntersectionTypeSignature(((List<Type>)intersection.types()).stream()
.map(Util::getSignature)
.toArray(String[]::new));
}
StringBuilder buffer = new StringBuilder();
getFullyQualifiedName(type, buffer);
return Signature.createTypeSignature(buffer.toString(), false/*not resolved in source*/);
Expand Down

0 comments on commit 5664513

Please sign in to comment.