All Downloads are FREE. Search and download functionalities are using the official Maven repository.

framework.src.org.checkerframework.qualframework.base.QualifierMapVisitor Maven / Gradle / Ivy

Go to download

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

There is a newer version: 3.45.0
Show newest version
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());
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy