private static Node getQualifier(Node node) { if (node instanceof FieldAccessExpr) { FieldAccessExpr fieldAccessExpr = (FieldAccessExpr) node; return fieldAccessExpr.getScope(); } throw new UnsupportedOperationException(node.getClass().getCanonicalName()); }
private static boolean isRegularFieldAccessExpr(@Nonnull FieldAccessExpr fieldAccessExpr) { Expression scope = fieldAccessExpr.getScope(); if (NameExpr.class.isInstance(scope)) { return true; } else if (FieldAccessExpr.class.isInstance(scope)) { return isRegularFieldAccessExpr(FieldAccessExpr.class.cast(scope)); } return false; }
@Nonnull private static NameExpr getFirstNode(@Nonnull FieldAccessExpr fieldAccessExpr) { Expression scope = fieldAccessExpr.getScope(); if (NameExpr.class.isInstance(scope)) { return NameExpr.class.cast(scope); } else if (FieldAccessExpr.class.isInstance(scope)) { return getFirstNode(FieldAccessExpr.class.cast(scope)); } throw new RuntimeException("Should not have reached this point!"); }
private String name(final FieldAccessExpr n) { LinkedList<String> name = new LinkedList<>(); Expression it = n.getScope(); while (it instanceof FieldAccessExpr) { name.addFirst(((FieldAccessExpr) it).getField()); it = ((FieldAccessExpr) it).getScope(); } name.addFirst(it.toStringWithoutComments()); return name.stream().collect(Collectors.joining(".")); }
@Nullable @Override protected Qualifier<?> getScopeQualifier(@Nonnull FieldAccessExpr reference) { Expression scope = reference.getScope(); return NameExpr.class.isInstance(scope) ? new NameExprQualifier(NameExpr.class.cast(scope), this) : new FieldAccessExprQualifier(FieldAccessExpr.class.cast(scope), this); }
/** * Does the Node represent a Name? * <p> * Note that while most specific AST classes either always represent names or never represent names * there are exceptions as the FieldAccessExpr */ public static boolean isAName(Node node) { if (node instanceof FieldAccessExpr) { FieldAccessExpr fieldAccessExpr = (FieldAccessExpr) node; return isAName(fieldAccessExpr.getScope()); } else { return node instanceof SimpleName || node instanceof Name || node instanceof ClassOrInterfaceType || node instanceof NameExpr; } }
private Qualifier qualifierFor(FieldAccessExpr fieldAccessExpr) { Expression scope = fieldAccessExpr.getScope(); return NameExpr.class.isInstance(scope) ? new NameExprQualifier(NameExpr.class.cast(scope)) : new FieldAccessExprQualifier(FieldAccessExpr.class.cast(scope)); }
private static String getFullQualifier(FieldAccessExpr reference) { StringBuilder buffy = new StringBuilder(reference.getField()); for (FieldAccessExpr loop = reference; loop != null; ) { Expression scope = loop.getScope(); final String qualifier; if (NameExpr.class.isInstance(scope)) { loop = null; qualifier = NameExpr.class.cast(scope).getName(); } else { loop = FieldAccessExpr.class.cast(scope); qualifier = loop.getField(); } buffy.insert(0, '.'); buffy.insert(0, qualifier); } return buffy.toString(); }
private static final String getAnnotationParamValue(String packageName, Object expr, List<String> imports) { String str = expr.toString(); if (expr instanceof FieldAccessExpr) { FieldAccessExpr fae = (FieldAccessExpr) expr; String className = getClassName(packageName, fae.getScope().toString(), imports); return String.format("%s.%s", className, fae.getField()); } else if (expr instanceof IntegerLiteralExpr) { return str; } else if (expr instanceof LongLiteralExpr) { return str; } else if (expr instanceof DoubleLiteralExpr) { return str; } else if (expr instanceof StringLiteralExpr) { return str; } return null; } // =========================================================================
private static final String getAnnotationParamValue(String packageName, Object expr, List<String> imports) { String str = expr.toString(); if (expr instanceof FieldAccessExpr) { FieldAccessExpr fae = (FieldAccessExpr) expr; String className = getClassName(packageName, fae.getScope().toString(), imports); return String.format("%s.%s", className, fae.getField()); } else if (expr instanceof IntegerLiteralExpr) { return str; } else if (expr instanceof LongLiteralExpr) { return str; } else if (expr instanceof DoubleLiteralExpr) { return str; } else if (expr instanceof StringLiteralExpr) { return str; } return null; } // =========================================================================
@Override public boolean doIsEquals(FieldAccessExpr first, FieldAccessExpr second) { if(!isEqualsUseMerger(first.getScope(), second.getScope())) return false; if(!isEqualsUseMerger(first.getTypeArgs(),second.getTypeArgs())) return false; if(!isEqualsUseMerger(first.getFieldExpr(),second.getFieldExpr())) return false; return true; } }
public SymbolReference<ResolvedValueDeclaration> solveField(String name) { Collection<ResolvedReferenceTypeDeclaration> rrtds = findTypeDeclarations(Optional.of(wrappedNode.getScope())); for (ResolvedReferenceTypeDeclaration rrtd : rrtds) { if (rrtd.isEnum()) { Optional<ResolvedEnumConstantDeclaration> enumConstant = rrtd.asEnum().getEnumConstants().stream().filter(c -> c.getName().equals(name)).findFirst(); if (enumConstant.isPresent()) { return SymbolReference.solved(enumConstant.get()); } } try { return SymbolReference.solved(rrtd.getField(wrappedNode.getName().getId())); } catch (Throwable t) { } } return SymbolReference.unsolved(ResolvedFieldDeclaration.class); } }
@Override public String visit(FieldAccessExpr n, String arg) { return visit(n.getFieldExpr(), findClassNamed(n.getScope(), getClassDeclarationOf(n))); }
public SymbolReference<ResolvedFieldDeclaration> solveField(String name, TypeSolver typeSolver) { Collection<ResolvedReferenceTypeDeclaration> rrtds = findTypeDeclarations(Optional.of(wrappedNode.getScope()), typeSolver); for (ResolvedReferenceTypeDeclaration rrtd : rrtds) { try { return SymbolReference.solved(rrtd.getField(wrappedNode.getName().getId())); } catch (Throwable t) { } } return SymbolReference.unsolved(ResolvedFieldDeclaration.class); } }
@Override public FieldAccessExpr doMerge(FieldAccessExpr first, FieldAccessExpr second) { FieldAccessExpr fae = new FieldAccessExpr(); fae.setFieldExpr(mergeSingle(first.getFieldExpr(),second.getFieldExpr())); fae.setScope(mergeSingle(first.getScope(),second.getScope())); fae.setTypeArgs(mergeCollections(first.getTypeArgs(),second.getTypeArgs())); return fae; }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name) { if (wrappedNode.getName().toString().equals(name)) { if (wrappedNode.getScope() instanceof ThisExpr) { ResolvedType typeOfThis = JavaParserFacade.get(typeSolver).getTypeOfThisIn(wrappedNode); return new SymbolSolver(typeSolver).solveSymbolInType(typeOfThis.asReferenceType().getTypeDeclaration(), name); } } return JavaParserFactory.getContext(requireParentNode(wrappedNode), typeSolver).solveSymbol(name); }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { if (wrappedNode.getField().toString().equals(name)) { if (wrappedNode.getScope() instanceof ThisExpr) { ResolvedType typeOfThis = JavaParserFacade.get(typeSolver).getTypeOfThisIn(wrappedNode); return new SymbolSolver(typeSolver).solveSymbolInType(typeOfThis.asReferenceType().getTypeDeclaration(), name); } } return JavaParserFactory.getContext(requireParentNode(wrappedNode), typeSolver).solveSymbol(name, typeSolver); }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { if (wrappedNode.getField().toString().equals(name)) { if (wrappedNode.getScope() instanceof ThisExpr) { ResolvedType typeOfThis = JavaParserFacade.get(typeSolver).getTypeOfThisIn(wrappedNode); return new SymbolSolver(typeSolver).solveSymbolInType(typeOfThis.asReferenceType().getTypeDeclaration(), name); } } return JavaParserFactory.getContext(requireParentNode(wrappedNode), typeSolver).solveSymbol(name, typeSolver); }