/** Returns an enclosing instance for the specified type if it is thread-safe. */ public Type mutableEnclosingInstance(Optional<ClassTree> tree, ClassType type) { if (tree.isPresent() && !CanBeStaticAnalyzer.referencesOuter( tree.get(), ASTHelpers.getSymbol(tree.get()), state)) { return null; } Type enclosing = type.getEnclosingType(); while (!Type.noType.equals(enclosing)) { if (getMarkerOrAcceptedAnnotation(enclosing.tsym, state) == null && isThreadSafeType( /* allowContainerTypeParameters= */ false, /* containerTypeParameters= */ ImmutableSet.of(), enclosing) .isPresent()) { return enclosing; } enclosing = enclosing.getEnclosingType(); } return null; }
@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 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.unannotatedType() && tsym.type.isErroneous(); }
@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; }
public Type constType(Object constValue) { final Object value = constValue; return new ClassType(getEnclosingType(), typarams_field, tsym) { @Override public Object constValue() { return value; } @Override public Type baseType() { return tsym.type; } }; }
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 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; }
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 t, Void aVoid) { for (Type a : t.getTypeArguments()) { a.accept(this, null); } if (t.getEnclosingType() != null) { t.getEnclosingType().accept(this, null); } return null; }