summaryrefslogtreecommitdiffstats
path: root/bundle-plugin/src/main/scala/com/yahoo/container/plugin/classanalysis/AnnotationVisitorTrait.scala
diff options
context:
space:
mode:
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.scala39
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)
+}