com.googlecode.japi.checker.model.JavaItem.java Source code

Java tutorial

Introduction

Here is the source code for com.googlecode.japi.checker.model.JavaItem.java

Source

/*
 * Copyright 2011 William Bernardet
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.googlecode.japi.checker.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.objectweb.asm.Opcodes;

import com.googlecode.japi.checker.ClassDataLoader;
import com.googlecode.japi.checker.Scope;

public abstract class JavaItem {
    private Scope visibility = Scope.PROTECTED;
    private ClassData owner;
    private String name;
    private boolean isAbstract;
    private boolean isInterface;
    private boolean isFinal;
    private boolean isStatic;
    private boolean isTransient;
    private boolean isVariableArity;
    private ClassDataLoader classDataLoader;
    private List<AnnotationData> annotations = new ArrayList<AnnotationData>();

    protected JavaItem(ClassDataLoader loader, ClassData owner, int access, String name) {
        this.setOwner(owner);
        this.setName(name);
        this.setVisibility(toScope(access));
        this.setAbstract((access & Opcodes.ACC_ABSTRACT) == Opcodes.ACC_ABSTRACT);
        this.setInterface((access & Opcodes.ACC_INTERFACE) == Opcodes.ACC_INTERFACE);
        this.setFinal((access & Opcodes.ACC_FINAL) == Opcodes.ACC_FINAL);
        this.setStatic((access & Opcodes.ACC_STATIC) == Opcodes.ACC_STATIC);
        this.setTransient((access & Opcodes.ACC_TRANSIENT) == Opcodes.ACC_TRANSIENT);
        this.setVariableArity((access & Opcodes.ACC_VARARGS) == Opcodes.ACC_VARARGS);
        this.setClassDataLoader(loader);
    }

    protected void setVisibility(Scope visibility) {
        this.visibility = visibility;
    }

    public Scope getVisibility() {
        return visibility;
    }

    public static Scope toScope(int access) {
        if ((access & Opcodes.ACC_PRIVATE) == Opcodes.ACC_PRIVATE) {
            return Scope.PRIVATE;
        } else if ((access & Opcodes.ACC_PROTECTED) == Opcodes.ACC_PROTECTED) {
            return Scope.PROTECTED;
        }
        if ((access & Opcodes.ACC_PUBLIC) == Opcodes.ACC_PUBLIC) {
            return Scope.PUBLIC;
        } else {
            return Scope.NO_SCOPE;
        }
    }

    /**
     * @param isAbstract the isAbstract to set
     */
    protected void setAbstract(boolean isAbstract) {
        this.isAbstract = isAbstract;
    }

    /**
     * @return the isAbstract
     */
    public boolean isAbstract() {
        return isAbstract;
    }

    /**
     * @param isInterface the isInterface to set
     */
    protected void setInterface(boolean isInterface) {
        this.isInterface = isInterface;
    }

    /**
     * @return the isInterface
     */
    public boolean isInterface() {
        return isInterface;
    }

    /**
     * @param isFinal the isFinal to set
     */
    protected void setFinal(boolean isFinal) {
        this.isFinal = isFinal;
    }

    /**
     * @return the isFinal
     */
    public boolean isFinal() {
        return isFinal;
    }

    /**
     * @param isStatic the isStatic to set
     */
    protected void setStatic(boolean isStatic) {
        this.isStatic = isStatic;
    }

    /**
     * @return the isStatic
     */
    public boolean isStatic() {
        return isStatic;
    }

    /**
     * @param isTransient the isTransient to set
     */
    protected void setTransient(boolean isTransient) {
        this.isTransient = isTransient;
    }

    /**
     * @return the isTransient
     */
    public boolean isTransient() {
        return isTransient;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    protected void setName(String name) {
        this.name = name;
    }

    public boolean isVariableArity() {
        return isVariableArity;
    }

    protected void setVariableArity(boolean isVariableArity) {
        this.isVariableArity = isVariableArity;
    }

    /**
     * @return the owner
     */
    public ClassData getOwner() {
        return owner;
    }

    /**
     * @param owner the owner to set
     */
    protected void setOwner(ClassData owner) {
        this.owner = owner;
    }

    public abstract String getType();

    /**
     * Display the item name.
     * {@inheritDoc}
     */
    public String toString() {
        return name;
    }

    /**
     * Get the ClassDataLoader associated with this instance.
     * {@inheritDoc}
     */
    public ClassDataLoader getClassDataLoader() {
        return classDataLoader;
    }

    /**
     * Get the ClassDataLoader associated with this instance.
     * {@inheritDoc}
     */
    protected void setClassDataLoader(ClassDataLoader loader) {
        classDataLoader = loader;
    }

    /**
     * 
     * @return
     */
    public List<AnnotationData> getAnnotations() {
        return Collections.<AnnotationData>unmodifiableList(annotations);
    }

    /**
     * 
     * @param annotations
     */
    public void add(AnnotationData annotation) {
        this.annotations.add(annotation);
    }

    public AnnotationData getAnnotation(String desc) {
        for (AnnotationData annotation : this.annotations) {
            if (desc != null && desc.equals(annotation.getDesc())) {
                return annotation;
            }
        }
        return null;
    }
}