/** * Return the string representation of the name */ public static String nameAsString(Node name) { if (!isAName(name)) { throw new IllegalArgumentException("A name was expected"); } if (name instanceof Name) { return ((Name) name).asString(); } else if (name instanceof SimpleName) { return ((SimpleName) name).getIdentifier(); } else if (name instanceof ClassOrInterfaceType) { return ((ClassOrInterfaceType) name).asString(); } else if (name instanceof FieldAccessExpr) { FieldAccessExpr fieldAccessExpr = (FieldAccessExpr) name; if (isAName(fieldAccessExpr.getScope())) { return nameAsString(fieldAccessExpr.getScope()) + "." + nameAsString(fieldAccessExpr.getName()); } else { throw new IllegalArgumentException(); } } else if (name instanceof NameExpr) { return ((NameExpr) name).getNameAsString(); } else { throw new UnsupportedOperationException("Unknown type of name found: " + name + " (" + name.getClass().getCanonicalName() + ")"); } }
private ResolvedReferenceType toReferenceType(ClassOrInterfaceType classOrInterfaceType) { SymbolReference<? extends ResolvedTypeDeclaration> ref = null; String typeName = classOrInterfaceType.getName().getId(); if (classOrInterfaceType.getScope().isPresent()) { typeName = classOrInterfaceType.getScope().get().asString() + "." + typeName; } if (typeName.indexOf('.') > -1) { ref = typeSolver.tryToSolveType(typeName); } if (ref == null || !ref.isSolved()) { ref = solveType(typeName); } if (!ref.isSolved() && classOrInterfaceType.getScope().isPresent()) { ref = solveType(classOrInterfaceType.getName().getId()); } if (!ref.isSolved()) { throw new UnsolvedSymbolException(classOrInterfaceType.getName().getId()); } if (!classOrInterfaceType.getTypeArguments().isPresent()) { return new ReferenceTypeImpl(ref.getCorrespondingDeclaration().asReferenceType(), typeSolver); } List<ResolvedType> superClassTypeParameters = classOrInterfaceType.getTypeArguments().get() .stream().map(ta -> new LazyType(v -> JavaParserFacade.get(typeSolver).convert(ta, ta))) .collect(Collectors.toList()); return new ReferenceTypeImpl(ref.getCorrespondingDeclaration().asReferenceType(), superClassTypeParameters, typeSolver); } }