diff options
author | Jesse Stockall <jesse@apache.org> | 2003-04-15 03:34:11 +0000 |
---|---|---|
committer | Jesse Stockall <jesse@apache.org> | 2003-04-15 03:34:11 +0000 |
commit | 5722812dbe0cfda11a528c3e6c32b2b2b67b7960 (patch) | |
tree | b0f482182ce44048cbcb3ec4cbf4a40ba5be9d0a /src/main/org/apache/tools/ant/util/depend/bcel | |
parent | ffd2a2d7c25b78eb5f50c182312acb9dcf01ccda (diff) | |
download | ant-5722812dbe0cfda11a528c3e6c32b2b2b67b7960.tar.gz |
Better detection of classes passed as method params like 'System.out.println(Outer.Inner.class);'
PR: 13273
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274456 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/main/org/apache/tools/ant/util/depend/bcel')
-rw-r--r-- | src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java | 34 |
1 files changed, 29 insertions, 5 deletions
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 ddee618c0..77dc85093 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 @@ -124,11 +124,35 @@ public class DependencyVisitor extends EmptyVisitor { 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); + // does the class have a package structure + int index = classname.lastIndexOf("."); + if (index > 0) { + char start; + // check if the package structure is more than 1 level deep + int index2 = classname.lastIndexOf(".", index -1); + if (index2 != -1) { + // class name has more than 1 package level 'com.company.Class' + start = classname.charAt(index2 + 1); + } + else { + // class name has only 1 package level 'package.Class' + start = classname.charAt(0); + } + // Check to see if it's an inner class 'com.company.Class$Inner' + if ((start > 0x40) && (start < 0x5B)) { + // first letter of the previous segment of the class name 'Class' + // is upper case ascii. so according to the spec it's an inner class + classname = classname.substring(0, index) + "$" + + classname.substring(index + 1); + addClass(classname); + } + else { + // Add the class in dotted notation 'com.company.Class' + addClass(classname); + } + } + else { + // Add a class with no package 'Class' addClass(classname); } } |