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;
}
/**