diff options
Diffstat (limited to 'bundle-plugin/src/main/scala/com/yahoo/container/plugin/classanalysis/AnnotationVisitorTrait.scala')
-rw-r--r-- | bundle-plugin/src/main/scala/com/yahoo/container/plugin/classanalysis/AnnotationVisitorTrait.scala | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/bundle-plugin/src/main/scala/com/yahoo/container/plugin/classanalysis/AnnotationVisitorTrait.scala b/bundle-plugin/src/main/scala/com/yahoo/container/plugin/classanalysis/AnnotationVisitorTrait.scala new file mode 100644 index 00000000000..8beb47c765f --- /dev/null +++ b/bundle-plugin/src/main/scala/com/yahoo/container/plugin/classanalysis/AnnotationVisitorTrait.scala @@ -0,0 +1,39 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.container.plugin.classanalysis + +import org.objectweb.asm.{Opcodes, AnnotationVisitor, Type} + +/** + * Picks up classes used in annotations. + * @author tonytv + */ +private trait AnnotationVisitorTrait { + protected val imports: ImportsSet + + def visitAnnotation(desc: String, visible: Boolean): AnnotationVisitor = { + imports ++= getClassName(Type.getType(desc)).toList + + visitAnnotationDefault() + } + + def visitAnnotationDefault(): AnnotationVisitor = + new AnnotationVisitor(Opcodes.ASM5) { + override def visit(name: String, value: AnyRef) {} + + override def visitEnum(name: String, desc: String, value: String) { + imports ++= getClassName(Type.getType(desc)).toList + } + + override def visitArray(name: String): AnnotationVisitor = this + + override def visitAnnotation(name: String, desc: String): AnnotationVisitor = { + imports ++= getClassName(Type.getType(desc)).toList + this + } + + override def visitEnd() {} + } + + def visitParameterAnnotation(parameter: Int, desc: String, visible: Boolean): AnnotationVisitor = + visitAnnotation(desc, visible) +} |