framework.src.org.checkerframework.qualframework.base.QualifierMapVisitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of checker-qual Show documentation
Show all versions of checker-qual Show documentation
Checker Qual is the set of annotations (qualifiers) and supporting classes
used by the Checker Framework to type check Java source code. Please
see artifact:
org.checkerframework:checker
package org.checkerframework.qualframework.base;
import java.util.*;
import org.checkerframework.qualframework.base.QualifiedTypeMirror;
import org.checkerframework.qualframework.base.QualifiedTypeMirror.*;
import org.checkerframework.qualframework.base.QualifiedTypeVisitor;
/** Visitor that maps a function over every qualifier in a {@link
* QualifiedTypeMirror}. */
public abstract class QualifierMapVisitor implements QualifiedTypeVisitor, P> {
public abstract R process(Q qual, P p);
@Override
public QualifiedTypeMirror visit(QualifiedTypeMirror type) {
return visit(type, null);
}
@Override
public QualifiedTypeMirror visit(QualifiedTypeMirror type, P p) {
if (type == null) {
return null;
}
return type.accept(this, p);
}
private List> visitTypes(List> types, P p) {
List> results = new ArrayList<>();
for (QualifiedTypeMirror type : types) {
results.add(visit(type, p));
}
return results;
}
@SuppressWarnings("unchecked")
private List> visitTypeParameters(List> types, P p) {
return (List>)(List)visitTypes(types, p);
}
@Override
public QualifiedTypeMirror visitArray(QualifiedArrayType type, P p) {
return new QualifiedArrayType(type.getUnderlyingType(),
process(type.getQualifier(), p),
visit(type.getComponentType(), p)
);
}
@Override
public QualifiedTypeMirror visitDeclared(QualifiedDeclaredType type, P p) {
return new QualifiedDeclaredType(type.getUnderlyingType(),
process(type.getQualifier(), p),
visitTypes(type.getTypeArguments(), p)
);
}
@Override
public QualifiedTypeMirror visitExecutable(QualifiedExecutableType type, P p) {
return new QualifiedExecutableType(type.getUnderlyingType(),
visitTypes(type.getParameterTypes(), p),
visit(type.getReceiverType(), p),
visit(type.getReturnType(), p),
visitTypes(type.getThrownTypes(), p),
visitTypeParameters(type.getTypeParameters(), p)
);
}
@Override
public QualifiedTypeMirror visitIntersection(QualifiedIntersectionType type, P p) {
return new QualifiedIntersectionType(type.getUnderlyingType(),
process(type.getQualifier(), p),
visitTypes(type.getBounds(), p)
);
}
@Override
public QualifiedTypeMirror visitNoType(QualifiedNoType type, P p) {
return new QualifiedNoType(type.getUnderlyingType(),
process(type.getQualifier(), p)
);
}
@Override
public QualifiedTypeMirror visitNull(QualifiedNullType type, P p) {
return new QualifiedNullType(type.getUnderlyingType(),
process(type.getQualifier(), p)
);
}
@Override
public QualifiedTypeMirror visitPrimitive(QualifiedPrimitiveType type, P p) {
return new QualifiedPrimitiveType(type.getUnderlyingType(),
process(type.getQualifier(), p)
);
}
@Override
public QualifiedTypeMirror visitTypeVariable(QualifiedTypeVariable type, P p) {
return new QualifiedTypeVariable(type.getUnderlyingType(),
process(type.getQualifier(), p)
);
}
@Override
public QualifiedTypeMirror visitUnion(QualifiedUnionType type, P p) {
return new QualifiedUnionType(type.getUnderlyingType(),
process(type.getQualifier(), p),
visitTypes(type.getAlternatives(), p)
);
}
@Override
public QualifiedTypeMirror visitWildcard(QualifiedWildcardType type, P p) {
return new QualifiedWildcardType(type.getUnderlyingType(),
visit(type.getExtendsBound(), p),
visit(type.getSuperBound(), p)
);
}
@Override
public QualifiedTypeMirror visitTypeDeclaration(QualifiedTypeDeclaration type, P p) {
return new QualifiedTypeDeclaration(type.getUnderlyingType(),
process(type.getQualifier(), p),
visitTypeParameters(type.getTypeParameters(), p)
);
}
@Override
public QualifiedTypeMirror visitParameterDeclaration(QualifiedParameterDeclaration type, P p) {
return new QualifiedParameterDeclaration(type.getUnderlyingType());
}
}