Package com.buschmais.jqassistant.core.scanner.impl.visitor

Source Code of com.buschmais.jqassistant.core.scanner.impl.visitor.AnnotationDefaultVisitor

package com.buschmais.jqassistant.core.scanner.impl.visitor;

import com.buschmais.jqassistant.core.model.api.descriptor.MethodDescriptor;
import com.buschmais.jqassistant.core.model.api.descriptor.TypeDescriptor;
import com.buschmais.jqassistant.core.model.api.descriptor.value.ClassValueDescriptor;
import com.buschmais.jqassistant.core.model.api.descriptor.value.PrimitiveValueDescriptor;
import org.objectweb.asm.*;
import org.objectweb.asm.AnnotationVisitor;

/**
* Visitor for default values of annotation methods.
* <p>Creates dependencies of the method to the type of the default value.</p>
*/
public class AnnotationDefaultVisitor extends org.objectweb.asm.AnnotationVisitor {

    private MethodDescriptor methodDescriptor;
    private VisitorHelper visitorHelper;

    public AnnotationDefaultVisitor(MethodDescriptor methodDescriptor, VisitorHelper visitorHelper) {
        super(Opcodes.ASM4);
        this.methodDescriptor = methodDescriptor;
        this.visitorHelper = visitorHelper;
    }

    @Override
    public void visit(String name, Object value) {
        TypeDescriptor typeDescriptor;
        if (value instanceof Type) {
            String type = visitorHelper.getType((Type) value);
            typeDescriptor = visitorHelper.getTypeDescriptor(type);
        } else {
            typeDescriptor = visitorHelper.getTypeDescriptor(value.getClass().getName());
        }
        methodDescriptor.getDependencies().add(typeDescriptor);
    }

    @Override
    public void visitEnum(String name, String desc, String value) {
        TypeDescriptor typeDescriptor = visitorHelper.getTypeDescriptor(visitorHelper.getType(desc));
        methodDescriptor.getDependencies().add(typeDescriptor);
    }

    @Override
    public AnnotationVisitor visitAnnotation(String name, String desc) {
        TypeDescriptor typeDescriptor = visitorHelper.getTypeDescriptor(visitorHelper.getType(desc));
        methodDescriptor.getDependencies().add(typeDescriptor);
        return this;
    }

    @Override
    public AnnotationVisitor visitArray(String name) {
        return this;
    }

    @Override
    public void visitEnd() {
    }
}
TOP

Related Classes of com.buschmais.jqassistant.core.scanner.impl.visitor.AnnotationDefaultVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.