Correct handling of external references (static imports, same package etc)

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@618588 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
index ee3d4d5..db58728 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
@@ -145,44 +145,61 @@
      */
     public JavaField getExternalFieldByName(String name)
     throws MojoExecutionException {
-        JavaField field = this.searchExternalFieldByName(name);
-        if ( field == null ) {
-            field = this.searchExternalFieldByName(this.javaClass.getSource().getPackage() + '.' + name);
-        }
-        return field;
-    }
-
-    protected JavaField searchExternalFieldByName(String name)
-    throws MojoExecutionException {
-        int sep = name.lastIndexOf('.');
-        final String className = name.substring(0, sep);
-        final String constantName = name.substring(sep+1);
-        // we know that the name is external, so let's scan imports first
-        // for a fully qualified static import
-        boolean isStatic = this.searchImport(name);
-        if ( isStatic ) {
-            final JavaClassDescription jcd = this.manager.getJavaClassDescription(className);
-            if ( jcd != null ) {
-                return jcd.getFieldByName(constantName);
+        int lastDot = name.lastIndexOf('.');
+        // if there is no dot, this should be a static import
+        if ( lastDot == -1 ) {
+            final String importDef = this.searchImport('.' + name);
+            if ( importDef != null ) {
+                int sep = importDef.lastIndexOf('.');
+                final String className = importDef.substring(0, sep);
+                final String constantName = importDef.substring(sep+1);
+                final JavaClassDescription jcd = this.manager.getJavaClassDescription(className);
+                if ( jcd != null ) {
+                    return jcd.getFieldByName(constantName);
+                }
             }
-        }
-        final JavaClassDescription jcd = this.manager.getJavaClassDescription(className);
-        if ( jcd != null ) {
-            return jcd.getFieldByName(constantName);
+        } else {
+            // check for fully qualified
+            int firstDot = name.indexOf('.');
+            if ( firstDot == lastDot ) {
+                // we only have one dot, so either the class is imported or in the same package
+                final String className = name.substring(0, lastDot);
+                final String constantName = name.substring(lastDot+1);
+                final String importDef = this.searchImport('.' + className);
+                if ( importDef != null ) {
+                    final JavaClassDescription jcd = this.manager.getJavaClassDescription(importDef);
+                    if ( jcd != null ) {
+                        return jcd.getFieldByName(constantName);
+                    }
+                }
+                final JavaClassDescription jcd = this.manager.getJavaClassDescription(this.javaClass.getSource().getPackage() + '.' + className);
+                if ( jcd != null ) {
+                    return jcd.getFieldByName(constantName);
+                }
+
+            } else {
+                // we have more than one dot, so this is a fully qualified class
+                final String className = name.substring(0, lastDot);
+                final String constantName = name.substring(lastDot+1);
+                final JavaClassDescription jcd = this.manager.getJavaClassDescription(className);
+                if ( jcd != null ) {
+                    return jcd.getFieldByName(constantName);
+                }
+            }
         }
         return null;
     }
 
-    protected boolean searchImport(String name) {
+    protected String searchImport(String name) {
         final String[] imports = this.javaClass.getSource().getImports();
         if ( imports != null ) {
             for(int i=0; i<imports.length; i++ ) {
-                if ( imports[i].equals(name) ) {
-                    return true;
+                if ( imports[i].endsWith(name) ) {
+                    return imports[i];
                 }
             }
         }
-        return false;
+        return null;
     }
 
     /**