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 Show documentation
Show all versions of checker Show documentation
The Checker Framework enhances Java’s type system to
make it more powerful and useful. This lets software developers
detect and prevent errors in their Java programs.
The Checker Framework includes compiler plug-ins ("checkers")
that find bugs or verify their absence. It also permits you to
write your own compiler plug-ins.
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());
}
}