You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2008/02/05 10:31:47 UTC

svn commit: r618588 - /felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java

Author: cziegeler
Date: Tue Feb  5 01:31:46 2008
New Revision: 618588

URL: http://svn.apache.org/viewvc?rev=618588&view=rev
Log:
Correct handling of external references (static imports, same package etc)

Modified:
    felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java

Modified: felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
URL: http://svn.apache.org/viewvc/felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java?rev=618588&r1=618587&r2=618588&view=diff
==============================================================================
--- felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java (original)
+++ felix/trunk/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java Tue Feb  5 01:31:46 2008
@@ -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;
-    }
+        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);
+                }
+            }
+        } 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);
+                }
 
-    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);
+            } 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);
+                }
             }
         }
-        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;
     }
 
     /**