You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/11/13 07:32:43 UTC

svn commit: r835756 - /openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/util/SourceCode.java

Author: ppoddar
Date: Fri Nov 13 06:32:43 2009
New Revision: 835756

URL: http://svn.apache.org/viewvc?rev=835756&view=rev
Log:
OPENJPA-1386: Support field types that can hide each other

Modified:
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/util/SourceCode.java

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/util/SourceCode.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/util/SourceCode.java?rev=835756&r1=835755&r2=835756&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/util/SourceCode.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/util/SourceCode.java Fri Nov 13 06:32:43 2009
@@ -99,6 +99,12 @@
 		String pkgName = name.getPackageName();
 		if ("java.lang".equals(pkgName))
 			return false;
+		for (Import i : imports) {
+		    if (i.getClassName().hides(name)) {
+		        i.getClassName().useFullName();
+		        name.useFullName();
+		    }
+		}
 		return imports.add(new Import(name));
 	}
 	
@@ -584,6 +590,8 @@
 		}
 		
 		public void write(PrintWriter out, int tab) {
+		    if (name.usingFullName())
+		        return;
 		    String pkg = name.getPackageName();
 		    if (pkg.length() == 0 || pkg.equals(getPackage().name))
 		        return;
@@ -597,6 +605,10 @@
 			}
 			return false;
 		}
+		
+		ClassName getClassName() {
+		    return name;
+		}
 	}
 	
 	/**
@@ -729,6 +741,7 @@
         public final String simpleName;
         public final String pkgName;
         private String  arrayMarker = BLANK;
+        private boolean useFullName = false;
         
 	    ClassName(String name) {
 	    	while (isArray(name)) {
@@ -769,10 +782,10 @@
 	    }
 	    
 	    /**
-	     * Gets the simple name of this receiver.
+	     * Gets the full or simple name of this receiver based on useFullName flag.
 	     */
 	    public String toString() {
-	        return getSimpleName();
+	        return (useFullName ? fullName : simpleName) + arrayMarker;
 	    }
 	    
 	    /**
@@ -806,6 +819,19 @@
 	    		name.substring(0, name.length()-"[]".length());
 	    }
 	    
+	    boolean hides(ClassName other) {
+	        return this.getSimpleName().equals(other.getSimpleName())
+	            && !this.fullName.equals(other.fullName);
+	    }
+	    
+	    void useFullName() {
+	        useFullName = true;
+	    }
+	    
+	    boolean usingFullName() {
+	        return useFullName;
+	    }
+	    
 	}
 	
 	static {