From 4fc7e7aae7f57cfd5d154364867970e62dffa664 Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Thu, 19 Dec 2002 14:05:04 +0000 Subject: [PATCH] Detect more class references, particularly the ones used to create Class instances Suggested by: Frank-Michael Moser git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273674 13f79535-47bb-0310-9956-ffa450edef68 --- .../util/depend/bcel/DependencyVisitor.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java b/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java index 2c6c3e8b7..3187723ba 100644 --- a/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java +++ b/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java @@ -62,6 +62,7 @@ import org.apache.bcel.classfile.EmptyVisitor; import org.apache.bcel.classfile.Field; import org.apache.bcel.classfile.JavaClass; import org.apache.bcel.classfile.Method; +import org.apache.bcel.classfile.ConstantNameAndType; /** * A BCEL visitor implementation to collect class dependency information @@ -113,6 +114,26 @@ public class DependencyVisitor extends EmptyVisitor { addSlashClass(classname); } + /** + * Visit a name and type ref + * + * Look for class references in this + */ + public void visitConstantNameAndType(ConstantNameAndType obj) { + String name = obj.getName(constantPool); + if (obj.getSignature(constantPool).equals("Ljava/lang/Class;") + && name.startsWith("class$")) { + String classname = name.substring(6).replace('$', '.'); + addClass(classname); + int index = classname.lastIndexOf("."); + if (index != -1) { + classname = classname.substring(0, index) + "$" + + classname.substring(index + 1); + addClass(classname); + } + } + } + /** * Visit a field of the class. * @@ -170,7 +191,7 @@ public class DependencyVisitor extends EmptyVisitor { } /** - * Adds a class name in slash format + * Adds a class name in slash format * (for example org/apache/tools/ant/Main). * * @param classname the class name in slash format