You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by jg...@apache.org on 2009/06/16 23:55:58 UTC
svn commit: r785424 - in /ibatis/trunk/java/tools/ibator/core: build/ doc/
htmldoc/ src/org/apache/ibatis/ibator/api/dom/
src/org/apache/ibatis/ibator/api/dom/java/
test/org/apache/ibatis/ibator/api/ test/org/apache/ibatis/ibator/api/dom/
test/org/apac...
Author: jgbutler
Date: Tue Jun 16 21:55:57 2009
New Revision: 785424
URL: http://svn.apache.org/viewvc?rev=785424&view=rev
Log:
[Ibator] Fix for IBATIS-609 - incorrect parsing of Java generic types
Added:
ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/
ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/
ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/
ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java
Modified:
ibatis/trunk/java/tools/ibator/core/build/version.properties
ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt
ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/OutputUtilities.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/CompilationUnit.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/Interface.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelClass.java
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelEnumeration.java
Modified: ibatis/trunk/java/tools/ibator/core/build/version.properties
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/build/version.properties?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/build/version.properties (original)
+++ ibatis/trunk/java/tools/ibator/core/build/version.properties Tue Jun 16 21:55:57 2009
@@ -1,4 +1,4 @@
#Ibator build version info
-#Mon Jun 08 17:15:58 CDT 2009
+#Tue Jun 16 16:44:16 CDT 2009
version=1.2.2
-buildNum=742
+buildNum=744
Modified: ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt (original)
+++ ibatis/trunk/java/tools/ibator/core/doc/ReleaseNotes.txt Tue Jun 16 21:55:57 2009
@@ -11,6 +11,7 @@
3. Fixed NPE and incorrect calculation in generated equals when certain
fields are null - thanks to Benjamin Klatt for finding this bug
4. Fixed IBATIS-601 - improper validation of <generatedKey>
+5. Fixed IBATIS-609 - incorrect parsing of Java generic types
Enhancements:
1. IBATIS-569 - Make it easier to override IbatorRules in plugins
Modified: ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html (original)
+++ ibatis/trunk/java/tools/ibator/core/htmldoc/whatsNew.html Tue Jun 16 21:55:57 2009
@@ -60,6 +60,7 @@
(from EqualsHashCodePlugin) when certain
fields are null - thanks to Benjamin Klatt for finding this bug.</li>
<li>IBATIS-601 - improper validation of <generatedKey></li>
+ <li>IBATIS-609 - incorrect parsing of Java generic types</li>
</ul>
<h3>Enhancements</h3>
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/OutputUtilities.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/OutputUtilities.java?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/OutputUtilities.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/OutputUtilities.java Tue Jun 16 21:55:57 2009
@@ -15,6 +15,11 @@
*/
package org.apache.ibatis.ibator.api.dom;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType;
+
/**
* @author Jeff Butler
*/
@@ -75,4 +80,25 @@
public static void newLine(StringBuilder sb) {
sb.append(lineSeparator);
}
+
+ /**
+ * returns a unique set of "import xxx;" Strings for the set of types
+ * @param importedTypes
+ * @return
+ */
+ public static Set<String> calculateImports(Set<FullyQualifiedJavaType> importedTypes) {
+ StringBuilder sb = new StringBuilder();
+ Set<String> importStrings = new TreeSet<String>();
+ for (FullyQualifiedJavaType fqjt : importedTypes) {
+ for (String importString : fqjt.getImportList()) {
+ sb.setLength(0);
+ sb.append("import "); //$NON-NLS-1$
+ sb.append(importString);
+ sb.append(';');
+ importStrings.add(sb.toString());
+ }
+ }
+
+ return importStrings;
+ }
}
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/CompilationUnit.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/CompilationUnit.java?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/CompilationUnit.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/CompilationUnit.java Tue Jun 16 21:55:57 2009
@@ -19,7 +19,7 @@
import java.util.Set;
/**
- * This interface describes metods common to all Java compilation
+ * This interface describes methods common to all Java compilation
* units (Java classes, interfaces, and enums).
*
* @author Jeff Butler
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.java Tue Jun 16 21:55:57 2009
@@ -17,6 +17,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.StringTokenizer;
/**
* @author Jeff Butler
@@ -29,12 +30,16 @@
private static FullyQualifiedJavaType dateInstance = null;
private static FullyQualifiedJavaType criteriaInstance = null;
+ /**
+ * The short name without any generic arguments
+ */
private String baseShortName;
- // this is the short name including the parameterized types and wildcards
- private String calculatedShortName;
+ /**
+ * The fully qualified name without any generic arguments
+ */
+ private String baseQualifiedName;
- private String fullyQualifiedName;
private boolean explicitlyImported;
private String packageName;
private boolean primitive;
@@ -47,56 +52,10 @@
*
* @param fullyQualifiedName
*/
- public FullyQualifiedJavaType(String fullyQualifiedName) {
+ public FullyQualifiedJavaType(String fullTypeSpecification) {
super();
typeArguments = new ArrayList<FullyQualifiedJavaType>();
- this.fullyQualifiedName = fullyQualifiedName;
-
- int lastIndex = fullyQualifiedName.lastIndexOf('.');
- if (lastIndex == -1) {
- baseShortName = fullyQualifiedName;
- explicitlyImported = false;
- packageName = ""; //$NON-NLS-1$
-
- if ("byte".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getByteInstance();
- } else if ("short".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getShortInstance();
- } else if ("int".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getIntegerInstance();
- } else if ("long".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getLongInstance();
- } else if ("char".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getCharacterInstance();
- } else if ("float".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getFloatInstance();
- } else if ("double".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getDoubleInstance();
- } else if ("boolean".equals(fullyQualifiedName)) { //$NON-NLS-1$
- primitive = true;
- primitiveTypeWrapper = PrimitiveTypeWrapper.getBooleanInstance();
- } else {
- primitive = false;
- primitiveTypeWrapper = null;
- }
- } else {
- baseShortName = fullyQualifiedName.substring(lastIndex + 1);
- packageName = fullyQualifiedName.substring(0, lastIndex);
- if ("java.lang".equals(packageName)) { //$NON-NLS-1$
- explicitlyImported = false;
- } else {
- explicitlyImported = true;
- }
- }
-
- calculatedShortName = baseShortName;
+ parse(fullTypeSpecification);
}
/**
@@ -106,14 +65,50 @@
return explicitlyImported;
}
/**
- * This method returns the fully qualified name that is suitable
- * for an import statement (i.e. - without the generics specified)
+ * This method returns the fully qualified name - including
+ * any generic type parameters
*
* @return Returns the fullyQualifiedName.
*/
public String getFullyQualifiedName() {
- return fullyQualifiedName;
+ StringBuilder sb = new StringBuilder();
+ sb.append(baseQualifiedName);
+ if (typeArguments.size() > 0) {
+ boolean first = true;
+ sb.append('<');
+ for (FullyQualifiedJavaType fqjt : typeArguments) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(", "); //$NON-NLS-1$
+ }
+ sb.append(fqjt.getFullyQualifiedName());
+
+ }
+ sb.append('>');
+ }
+
+ return sb.toString();
}
+
+ /**
+ * Returns a list of Strings that are the fully qualified names
+ * of this type, and any generic type argument associated
+ * with this type.
+ */
+ public List<String> getImportList() {
+ List<String> answer = new ArrayList<String>();
+ if (isExplicitlyImported()) {
+ answer.add(baseQualifiedName);
+ }
+
+ for (FullyQualifiedJavaType fqjt : typeArguments) {
+ answer.addAll(fqjt.getImportList());
+ }
+
+ return answer;
+ }
+
/**
* @return Returns the packageName.
*/
@@ -121,10 +116,27 @@
return packageName;
}
/**
- * @return Returns the shortName.
+ * @return Returns the shortName - including any type arguments.
*/
public String getShortName() {
- return calculatedShortName;
+ StringBuilder sb = new StringBuilder();
+ sb.append(baseShortName);
+ if (typeArguments.size() > 0) {
+ boolean first = true;
+ sb.append('<');
+ for (FullyQualifiedJavaType fqjt : typeArguments) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(", "); //$NON-NLS-1$
+ }
+ sb.append(fqjt.getShortName());
+
+ }
+ sb.append('>');
+ }
+
+ return sb.toString();
}
/* (non-Javadoc)
@@ -142,7 +154,7 @@
FullyQualifiedJavaType other = (FullyQualifiedJavaType) obj;
- return fullyQualifiedName.equals(other.fullyQualifiedName);
+ return getFullyQualifiedName().equals(other.getFullyQualifiedName());
}
/* (non-Javadoc)
@@ -150,7 +162,7 @@
*/
@Override
public int hashCode() {
- return fullyQualifiedName.hashCode();
+ return getFullyQualifiedName().hashCode();
}
/* (non-Javadoc)
@@ -158,7 +170,7 @@
*/
@Override
public String toString() {
- return fullyQualifiedName;
+ return getFullyQualifiedName();
}
/**
@@ -252,26 +264,77 @@
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(FullyQualifiedJavaType other) {
- return fullyQualifiedName.compareTo(other.fullyQualifiedName);
+ return getFullyQualifiedName().compareTo(other.getFullyQualifiedName());
}
public void addTypeArgument(FullyQualifiedJavaType type) {
typeArguments.add(type);
-
- StringBuilder sb = new StringBuilder();
- sb.append(baseShortName);
- sb.append('<');
-
- boolean comma = false;
- for (FullyQualifiedJavaType fqjt : typeArguments) {
- if (comma) {
- sb.append(", "); //$NON-NLS-1$
+ }
+
+ private void parse(String fullTypeSpecification) {
+ int index = fullTypeSpecification.indexOf('<');
+ if (index == -1) {
+ simpleParse(fullTypeSpecification);
+ } else {
+ simpleParse(fullTypeSpecification.substring(0, index));
+ genericParse(fullTypeSpecification.substring(index));
+ }
+ }
+
+ private void simpleParse(String typeSpecification) {
+ baseQualifiedName = typeSpecification.trim();
+ int lastIndex = baseQualifiedName.lastIndexOf('.');
+ if (lastIndex == -1) {
+ baseShortName = typeSpecification;
+ explicitlyImported = false;
+ packageName = ""; //$NON-NLS-1$
+
+ if ("byte".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getByteInstance();
+ } else if ("short".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getShortInstance();
+ } else if ("int".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getIntegerInstance();
+ } else if ("long".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getLongInstance();
+ } else if ("char".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getCharacterInstance();
+ } else if ("float".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getFloatInstance();
+ } else if ("double".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getDoubleInstance();
+ } else if ("boolean".equals(baseQualifiedName)) { //$NON-NLS-1$
+ primitive = true;
+ primitiveTypeWrapper = PrimitiveTypeWrapper.getBooleanInstance();
+ } else {
+ primitive = false;
+ primitiveTypeWrapper = null;
+ }
+ } else {
+ baseShortName = baseQualifiedName.substring(lastIndex + 1);
+ packageName = baseQualifiedName.substring(0, lastIndex);
+ if ("java.lang".equals(packageName)) { //$NON-NLS-1$
+ explicitlyImported = false;
} else {
- comma = true;
+ explicitlyImported = true;
}
- sb.append(fqjt.getShortName());
}
- sb.append('>');
- calculatedShortName = sb.toString();
+ }
+
+ private void genericParse(String genericSpecification) {
+ int lastIndex = genericSpecification.lastIndexOf('>');
+ String argumentString = genericSpecification.substring(1, lastIndex);
+ StringTokenizer st = new StringTokenizer(argumentString, ","); //$NON-NLS-1$
+ while (st.hasMoreTokens()) {
+ String type = st.nextToken();
+ typeArguments.add(new FullyQualifiedJavaType(type));
+ }
}
}
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/Interface.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/Interface.java?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/Interface.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/Interface.java Tue Jun 16 21:55:57 2009
@@ -83,16 +83,13 @@
OutputUtilities.newLine(sb);
}
- for (FullyQualifiedJavaType fqjt : importedTypes) {
- if (fqjt.isExplicitlyImported()) {
- sb.append("import "); //$NON-NLS-1$
- sb.append(fqjt.getFullyQualifiedName());
- sb.append(';');
- OutputUtilities.newLine(sb);
- }
+ Set<String> importStrings = OutputUtilities.calculateImports(importedTypes);
+ for (String importString : importStrings) {
+ sb.append(importString);
+ OutputUtilities.newLine(sb);
}
- if (importedTypes.size() > 0) {
+ if (importStrings.size() > 0) {
OutputUtilities.newLine(sb);
}
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelClass.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelClass.java?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelClass.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelClass.java Tue Jun 16 21:55:57 2009
@@ -75,16 +75,13 @@
OutputUtilities.newLine(sb);
}
- for (FullyQualifiedJavaType fqjt : importedTypes) {
- if (fqjt.isExplicitlyImported()) {
- sb.append("import "); //$NON-NLS-1$
- sb.append(fqjt.getFullyQualifiedName());
- sb.append(';');
- OutputUtilities.newLine(sb);
- }
+ Set<String> importStrings = OutputUtilities.calculateImports(importedTypes);
+ for (String importString : importStrings) {
+ sb.append(importString);
+ OutputUtilities.newLine(sb);
}
-
- if (importedTypes.size() > 0) {
+
+ if (importStrings.size() > 0) {
OutputUtilities.newLine(sb);
}
Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelEnumeration.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelEnumeration.java?rev=785424&r1=785423&r2=785424&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelEnumeration.java (original)
+++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/TopLevelEnumeration.java Tue Jun 16 21:55:57 2009
@@ -63,16 +63,13 @@
OutputUtilities.newLine(sb);
}
- for (FullyQualifiedJavaType fqjt : importedTypes) {
- if (fqjt.isExplicitlyImported()) {
- sb.append("import "); //$NON-NLS-1$
- sb.append(fqjt.getFullyQualifiedName());
- sb.append(';');
- OutputUtilities.newLine(sb);
- }
+ Set<String> importStrings = OutputUtilities.calculateImports(importedTypes);
+ for (String importString : importStrings) {
+ sb.append(importString);
+ OutputUtilities.newLine(sb);
}
-
- if (importedTypes.size() > 0) {
+
+ if (importStrings.size() > 0) {
OutputUtilities.newLine(sb);
}
Added: ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java?rev=785424&view=auto
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java (added)
+++ ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java Tue Jun 16 21:55:57 2009
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2009 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ibatis.ibator.api.dom.java;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Jeff Butler
+ *
+ */
+public class FullyQualifiedJavaTypeTests extends TestCase {
+
+ public void testJavaType() {
+ FullyQualifiedJavaType fqjt =
+ new FullyQualifiedJavaType("java.lang.String"); //$NON-NLS-1$
+ assertFalse(fqjt.isExplicitlyImported());
+ assertEquals("String", fqjt.getShortName()); //$NON-NLS-1$
+ assertEquals("java.lang.String", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+ assertEquals("java.lang", fqjt.getPackageName()); //$NON-NLS-1$
+ assertEquals(0, fqjt.getImportList().size());
+ }
+
+ public void testSimpleType() {
+ FullyQualifiedJavaType fqjt =
+ new FullyQualifiedJavaType("com.foo.Bar"); //$NON-NLS-1$
+ assertTrue(fqjt.isExplicitlyImported());
+ assertEquals("Bar", fqjt.getShortName()); //$NON-NLS-1$
+ assertEquals("com.foo.Bar", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+ assertEquals("com.foo", fqjt.getPackageName()); //$NON-NLS-1$
+ assertEquals(1, fqjt.getImportList().size());
+ }
+
+ public void testGenericType1() {
+ FullyQualifiedJavaType fqjt =
+ new FullyQualifiedJavaType("java.util.List<java.lang.String>"); //$NON-NLS-1$
+ assertTrue(fqjt.isExplicitlyImported());
+ assertEquals("List<String>", fqjt.getShortName()); //$NON-NLS-1$
+ assertEquals("java.util.List<java.lang.String>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
+ assertEquals(1, fqjt.getImportList().size());
+ }
+
+
+ public void testGenericType2() {
+ FullyQualifiedJavaType fqjt =
+ new FullyQualifiedJavaType("java.util.Map<java.lang.String, java.util.List<java.lang.String>>"); //$NON-NLS-1$
+ assertTrue(fqjt.isExplicitlyImported());
+ assertEquals("Map<String, List<String>>", fqjt.getShortName()); //$NON-NLS-1$
+ assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
+ assertEquals(2, fqjt.getImportList().size());
+ }
+
+
+ public void testGenericType3() {
+ FullyQualifiedJavaType listOfStrings = new FullyQualifiedJavaType("java.util.List"); //$NON-NLS-1$
+ listOfStrings.addTypeArgument(new FullyQualifiedJavaType("java.lang.String")); //$NON-NLS-1$
+
+ FullyQualifiedJavaType fqjt =
+ new FullyQualifiedJavaType("java.util.Map"); //$NON-NLS-1$
+ fqjt.addTypeArgument(new FullyQualifiedJavaType("java.lang.String")); //$NON-NLS-1$
+ fqjt.addTypeArgument(listOfStrings);
+
+ assertTrue(fqjt.isExplicitlyImported());
+ assertEquals("Map<String, List<String>>", fqjt.getShortName()); //$NON-NLS-1$
+ assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+ assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
+ assertEquals(2, fqjt.getImportList().size());
+ }
+}