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

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.

There is a newer version: 3.42.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