@Override public String visitClassType(Type.ClassType t, Void s) { StringBuilder sb = new StringBuilder(); sb.append(t.tsym.getSimpleName()); if (t.getTypeArguments().nonEmpty()) { sb.append('<'); sb.append( t.getTypeArguments().stream() .map(a -> a.accept(this, null)) .collect(joining(", "))); sb.append(">"); } return sb.toString(); }
@Override public String visitClassType(Type.ClassType t, Void unused) { StringBuilder sb = new StringBuilder(); if (state == null || fix == null) { sb.append(t.tsym.getSimpleName()); } else { sb.append(qualifyType(state, fix, t.tsym)); } if (t.getTypeArguments().nonEmpty()) { sb.append('<'); sb.append( t.getTypeArguments().stream() .map(a -> a.accept(this, null)) .collect(joining(", "))); sb.append(">"); } return sb.toString(); }
@Override public boolean matches(ExpressionTree tree, VisitorState state) { Types types = state.getTypes(); Type classType = state.getSymtab().classType; Type runtimeExceptionType = state.getSymtab().runtimeExceptionType; Type argType = getType(tree); // Make sure that the argument is a Class<Something> (and not null/bottom). if (!isSubtype(argType, classType, state) || argType.getTag() == BOT) { return false; } List<Type> typeArguments = ((ClassType) argType).getTypeArguments(); Type exceptionType = Iterables.getFirst(typeArguments, null); return types.isSubtype(exceptionType, runtimeExceptionType); } };
@Override public Integer visitClassType(ClassType t, Void ignored) { int result = visit(t.getEnclosingType()); result *= 127; result += t.tsym.flatName().hashCode(); for (Type s : t.getTypeArguments()) { result *= 127; result += visit(s); } return result; }
public List<Type> allparams() { if (allparams_field == null) { allparams_field = getTypeArguments().prependList(getEnclosingType().allparams()); } return allparams_field; }
@Override public Integer visitClassType(ClassType t, Void ignored) { int result = visit(t.getEnclosingType()); result *= 127; result += t.tsym.flatName().hashCode(); for (Type s : t.getTypeArguments()) { result *= 127; result += visit(s); } return result; }
public boolean contains(Type elem) { return elem == this || (isParameterized() && (getEnclosingType().contains(elem) || contains(getTypeArguments(), elem))); }
public Type map(Mapping f) { Type outer = getEnclosingType(); Type outer1 = f.apply(outer); List<Type> typarams = getTypeArguments(); List<Type> typarams1 = map(typarams, f); if (outer1 == outer && typarams1 == typarams) return this; else return new ClassType(outer1, typarams1, tsym); }
public boolean isErroneous() { return getEnclosingType().isErroneous() || isErroneous(getTypeArguments()) || this != tsym.type && tsym.type.isErroneous(); }
@Override public Void visitClassType(Type.ClassType t, Void aVoid) { for (Type a : t.getTypeArguments()) { a.accept(this, null); } if (t.getEnclosingType() != null) { t.getEnclosingType().accept(this, null); } return null; }
@Override public Type visitClassType(ClassType t, Void ignored) { Type outer1 = classBound(t.getEnclosingType()); if (outer1 != t.getEnclosingType()) return new ClassType(outer1, t.getTypeArguments(), t.tsym); else return t; }
@Override public Integer visitClassType(ClassType t, Void ignored) { int result = visit(t.getEnclosingType()); result *= 127; result += t.tsym.flatName().hashCode(); for (Type s : t.getTypeArguments()) { result *= 127; result += visit(s); } return result; }
public boolean isErroneous() { return getEnclosingType().isErroneous() || isErroneous(getTypeArguments()) || this != tsym.type && tsym.type.isErroneous(); }
public boolean contains(Type elem) { return elem == this || (isParameterized() && (getEnclosingType().contains(elem) || contains(getTypeArguments(), elem))) || (isCompound() && (supertype_field.contains(elem) || contains(interfaces_field, elem))); }
public List<Type> allparams() { if (allparams_field == null) { allparams_field = getTypeArguments().prependList(getEnclosingType().allparams()); } return allparams_field; }
@Override public Void visitClassType(Type.ClassType type, Void unused) { if (type instanceof Type.IntersectionClassType) { // TypeVisitor doesn't support intersection types natively visitIntersectionClassType((Type.IntersectionClassType) type); } else { for (Type t : type.getTypeArguments()) { t.accept(this, null); } } return null; }
@Override public boolean matches(ExpressionTree t, VisitorState state) { Type type = ((JCTree) t).type; // Expect a class type. if (!(type instanceof ClassType)) { return false; } // Expect one type argument, the type of the JUnit class runner to use. com.sun.tools.javac.util.List<Type> typeArgs = ((ClassType) type).getTypeArguments(); if (typeArgs.size() != 1) { return false; } Type runnerType = typeArgs.get(0); for (String testRunner : TEST_RUNNERS) { Symbol parent = state.getSymbolFromString(testRunner); if (parent == null) { continue; } if (runnerType.tsym.isSubClass(parent, state.getTypes())) { return true; } } return false; } };
@Override public Void visitClassType(Type.ClassType t, Void aVoid) { for (Type a : t.getTypeArguments()) { a.accept(this, null); } if (t.getEnclosingType() != null) { t.getEnclosingType().accept(this, null); } return null; }
@Override public Choice<Unifier> visitClassType(ClassType classType, Unifier unifier) { return fullyQualifiedClass() .unify(classType.tsym.getQualifiedName(), unifier) .thenChoose(unifications(typeArguments(), classType.getTypeArguments())); }
@Override public Void visitClassType(Type.ClassType type, Void unused) { if (type instanceof Type.IntersectionClassType) { // TypeVisitor doesn't support intersection types natively visitIntersectionClassType((Type.IntersectionClassType) type); } else { for (Type t : type.getTypeArguments()) { t.accept(this, null); } } return null; }