Author: jgbutler
Date: Mon Jun 22 14:59:46 2009
New Revision: 787263

URL: http://svn.apache.org/viewvc?rev=787263&view=rev
Log:
[Ibator] more updates to the Java type parser

Modified:
    ibatis/trunk/java/tools/ibator/core/build/version.properties
    
ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaType.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
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/build/version.properties?rev=787263&r1=787262&r2=787263&view=diff
==============================================================================
--- ibatis/trunk/java/tools/ibator/core/build/version.properties (original)
+++ ibatis/trunk/java/tools/ibator/core/build/version.properties Mon Jun 22 
14:59:46 2009
@@ -1,4 +1,4 @@
 #Ibator build version info
-#Thu Jun 18 16:12:32 CDT 2009
+#Fri Jun 19 11:52:10 CDT 2009
 version=1.2.2
-buildNum=752
+buildNum=753

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=787263&r1=787262&r2=787263&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
 Mon Jun 22 14:59:46 2009
@@ -93,20 +93,21 @@
             }
         } else {
             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());
-            
+        }
+        
+        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('>');
+                sb.append(fqjt.getFullyQualifiedName());
+            
             }
+            sb.append('>');
         }
         
         return sb.toString();
@@ -154,20 +155,21 @@
             }
         } else {
             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());
-            
+        }
+        
+        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('>');
+                sb.append(fqjt.getShortName());
+            
             }
+            sb.append('>');
         }
         
         return sb.toString();
@@ -306,17 +308,31 @@
     }
     
     private void parse(String fullTypeSpecification) {
-        int index = fullTypeSpecification.indexOf('<');
-        if (index == -1) {
-            index = fullTypeSpecification.indexOf('?');
+        String spec = fullTypeSpecification.trim();
+        
+        if (spec.startsWith("?")) {
+            wildcardType = true;
+            spec = spec.substring(1).trim();
+            if (spec.startsWith("extends ")) {
+                boundedWildcard = true;
+                extendsBoundedWildcard = true;
+                spec = spec.substring(8);
+            } else if (spec.startsWith("super ")) {
+                boundedWildcard = true;
+                extendsBoundedWildcard = false;
+                spec = spec.substring(6);
+            } else {
+                boundedWildcard = false;
+            }
+            parse(spec);
+        } else {
+            int index = fullTypeSpecification.indexOf('<');
             if (index == -1) {
                 simpleParse(fullTypeSpecification);
             } else {
-                wildCardParse(fullTypeSpecification);
+                simpleParse(fullTypeSpecification.substring(0, index));
+                genericParse(fullTypeSpecification.substring(index));
             }
-        } else {
-            simpleParse(fullTypeSpecification.substring(0, index));
-            genericParse(fullTypeSpecification.substring(index));
         }
     }
     
@@ -406,27 +422,4 @@
             typeArguments.add(new FullyQualifiedJavaType(finalType));
         }
     }
-    
-    private void wildCardParse(String wildCardSpecification) {
-        StringTokenizer st = new StringTokenizer(wildCardSpecification, " "); 
//$NON-NLS-1$
-        int tokenCount = st.countTokens();
-        if (tokenCount != 1 && tokenCount != 3) {
-            throw new RuntimeException(Messages.getString("RuntimeError.22", 
wildCardSpecification)); //$NON-NLS-1$
-        }
-        
-        String token = st.nextToken();
-        if (!"?".equals(token)) {
-            throw new RuntimeException(Messages.getString("RuntimeError.22", 
wildCardSpecification)); //$NON-NLS-1$
-        }
-        
-        wildcardType = true;
-        
-        if (tokenCount == 1) {
-            boundedWildcard = false;
-        } else {
-            boundedWildcard = true;
-            extendsBoundedWildcard = "extends".equals(st.nextToken());
-            simpleParse(st.nextToken());
-        }
-    }
 }

Modified: 
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=787263&r1=787262&r2=787263&view=diff
==============================================================================
--- 
ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java
 (original)
+++ 
ibatis/trunk/java/tools/ibator/core/test/org/apache/ibatis/ibator/api/dom/java/FullyQualifiedJavaTypeTests.java
 Mon Jun 22 14:59:46 2009
@@ -123,4 +123,37 @@
         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
         assertEquals(1, fqjt.getImportList().size());
     }
+
+    @Test
+    public void testWildcardType3() {
+        FullyQualifiedJavaType fqjt =
+            new FullyQualifiedJavaType("java.util.Map<? extends 
java.util.List<?>, ?>");
+        assertTrue(fqjt.isExplicitlyImported());
+        assertEquals("Map<? extends List<?>, ?>", fqjt.getShortName()); 
//$NON-NLS-1$
+        assertEquals("java.util.Map<? extends java.util.List<?>, ?>", 
fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+        assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
+        assertEquals(2, fqjt.getImportList().size());
+    }
+
+    @Test
+    public void testWildcardType4() {
+        FullyQualifiedJavaType fqjt =
+            new FullyQualifiedJavaType("java.util.Map<?, ?>");
+        assertTrue(fqjt.isExplicitlyImported());
+        assertEquals("Map<?, ?>", fqjt.getShortName()); //$NON-NLS-1$
+        assertEquals("java.util.Map<?, ?>", fqjt.getFullyQualifiedName()); 
//$NON-NLS-1$
+        assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
+        assertEquals(1, fqjt.getImportList().size());
+    }
+
+    @Test
+    public void testWildcardType5() {
+        FullyQualifiedJavaType fqjt =
+            new FullyQualifiedJavaType("java.util.List<? extends 
java.util.Map<? super java.lang.Object, ?>>");
+        assertTrue(fqjt.isExplicitlyImported());
+        assertEquals("List<? extends Map<? super Object, ?>>", 
fqjt.getShortName()); //$NON-NLS-1$
+        assertEquals("java.util.List<? extends java.util.Map<? super 
java.lang.Object, ?>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
+        assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
+        assertEquals(2, fqjt.getImportList().size());
+    }
 }


Reply via email to