Add more support for AnchoredTypes (%ROWTYPE, %TYPE)
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLPackageType.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLPackageType.java
index c860b38..92e870b 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLPackageType.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLPackageType.java
@@ -58,6 +58,9 @@
     }

 

     public List<PLSQLType> getTypes() {

+        if (types == null) {

+            types = new ArrayList<PLSQLType>();

+        }

 		return types;

 	}

 

@@ -71,14 +74,23 @@
     }

 

 	public List<PLSQLCursorType> getCursors() {

+        if (cursors == null) {

+            cursors = new ArrayList<PLSQLCursorType>();

+        }

 		return cursors;

 	}

 

 	public List<ProcedureType> getProcedures() {

+        if (procedures == null) {

+            procedures = new ArrayList<ProcedureType>();

+        }

 		return procedures;

 	}

 

     public List<FieldType> getLocalVariables() {

+        if (localVariables == null) {

+            localVariables = new ArrayList<FieldType>();

+        }

         return localVariables;

     }

 

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/BaseDatabaseTypeVisitor.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/BaseDatabaseTypeVisitor.java
index 6e00da1..522290f 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/BaseDatabaseTypeVisitor.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/BaseDatabaseTypeVisitor.java
@@ -154,17 +154,22 @@
     }

     public void visit(PLSQLPackageType databaseType) {

         beginVisit(databaseType);

-        if (databaseType.getTypes() != null) {

+        if (!databaseType.getTypes().isEmpty()) {

             for (PLSQLType plsqlType : databaseType.getTypes()) {

                 plsqlType.accept(this);

             }

         }

-        if (databaseType.getCursors() != null) {

+        if (!databaseType.getLocalVariables().isEmpty()) {

+            for (FieldType fieldType : databaseType.getLocalVariables()) {

+                fieldType.accept(this);

+            }

+        }

+        if (!databaseType.getCursors().isEmpty()) {

             for (PLSQLCursorType cursorType : databaseType.getCursors()) {

                 cursorType.accept(this);

             }

         }

-        if (databaseType.getProcedures() != null) {

+        if (!databaseType.getProcedures().isEmpty()) {

             for (ProcedureType procType : databaseType.getProcedures()) {

                 procType.accept(this);

             }

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/UnresolvedTypesVisitor.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/UnresolvedTypesVisitor.java
index 94936f3..dace163 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/UnresolvedTypesVisitor.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/visit/UnresolvedTypesVisitor.java
@@ -14,7 +14,9 @@
 

 //javase imports

 import java.util.ArrayList;

+import java.util.HashMap;

 import java.util.List;

+import java.util.Map;

 

 //DDL parser imports

 import org.eclipse.persistence.tools.oracleddl.metadata.UnresolvedSizedType;

@@ -23,16 +25,33 @@
 public class UnresolvedTypesVisitor extends BaseDatabaseTypeVisitor {

 

     protected List<UnresolvedType> unresolvedTypes = new ArrayList<UnresolvedType>();

+    protected Map<String, List<UnresolvedType>> uniq = new HashMap<String, List<UnresolvedType>>();

 

     public List<UnresolvedType> getUnresolvedTypes() {

         return unresolvedTypes;

     }

 

     public void visit(UnresolvedType unresolvedType) {

-        unresolvedTypes.add(unresolvedType);

+        String typeName = unresolvedType.getTypeName();

+        List<UnresolvedType> similarUnresolvedTypes = uniq.get(typeName);

+        if (similarUnresolvedTypes == null) {

+            similarUnresolvedTypes = new ArrayList<UnresolvedType>();

+            uniq.put(typeName, similarUnresolvedTypes);

+        }

+        boolean addToUnresolvedTypes = false;

+        for (UnresolvedType similarUnresolvedType : similarUnresolvedTypes) {

+            if (unresolvedType.getOwningType() != similarUnresolvedType.getOwningType()) {

+                addToUnresolvedTypes = true;

+                break;

+            }

+        }

+        if (addToUnresolvedTypes || similarUnresolvedTypes.isEmpty()) {

+            similarUnresolvedTypes.add(unresolvedType);

+            unresolvedTypes.add(unresolvedType);

+        }

     }

 

     public void visit(UnresolvedSizedType unresolvedType) {

-        unresolvedTypes.add(unresolvedType);

+        visit((UnresolvedType)unresolvedType);

     }

 }
\ No newline at end of file
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
index 4ade00b..d971c98 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
@@ -2009,6 +2009,9 @@
     jj_consume_token(O_SEMICOLON);

       PLSQLSubType newPLSQLSubType = new PLSQLSubType(subtypeName);

       newPLSQLSubType.addCompositeType(subtype);

+      if (subtype instanceof UnresolvedType) {

+          ((UnresolvedType)subtype).setOwningType(newPLSQLSubType);

+      }

       packageType.addType(newPLSQLSubType);

       if (notNull != null) {

           newPLSQLSubType.setNotNull(true);

@@ -2186,7 +2189,13 @@
     default:

       ;

     }

-      cursorType.setDataType(new UnresolvedType(s));

+      DatabaseType localType = localTypes.get(s);

+      if (localType == null) {

+          cursorType.setDataType(new UnresolvedType(s));

+      }

+      else {

+        cursorType.setDataType(localType);

+      }

   }

 

   final public void cursorDeclaration(PLSQLPackageType packageType) throws ParseException {

@@ -2699,13 +2708,18 @@
     return false;

   }

 

+  private boolean jj_3R_11() {

+    if (jj_scan_token(K_TYPE2)) return true;

+    return false;

+  }

+

   private boolean jj_3R_57() {

     if (jj_scan_token(K_VARCHAR2)) return true;

     return false;

   }

 

-  private boolean jj_3R_11() {

-    if (jj_scan_token(K_TYPE2)) return true;

+  private boolean jj_3R_13() {

+    if (jj_scan_token(K_ROWTYPE)) return true;

     return false;

   }

 

@@ -2715,11 +2729,6 @@
     return false;

   }

 

-  private boolean jj_3R_13() {

-    if (jj_scan_token(K_ROWTYPE)) return true;

-    return false;

-  }

-

   private boolean jj_3_5() {

     if (jj_3R_6()) return true;

     if (jj_scan_token(O_DOT)) return true;

@@ -2910,17 +2919,25 @@
     return false;

   }

 

+  private boolean jj_3_18() {

+    if (jj_3R_10()) return true;

+    Token xsp;

+    xsp = jj_scanpos;

+    if (jj_3R_11()) jj_scanpos = xsp;

+    return false;

+  }

+

   private boolean jj_3_10() {

     if (jj_scan_token(K_CHARACTER)) return true;

     if (jj_scan_token(K_SET)) return true;

     return false;

   }

 

-  private boolean jj_3_18() {

-    if (jj_3R_10()) return true;

+  private boolean jj_3_19() {

+    if (jj_3R_12()) return true;

     Token xsp;

     xsp = jj_scanpos;

-    if (jj_3R_11()) jj_scanpos = xsp;

+    if (jj_3R_13()) jj_scanpos = xsp;

     return false;

   }

 

@@ -2940,14 +2957,6 @@
     return false;

   }

 

-  private boolean jj_3_19() {

-    if (jj_3R_12()) return true;

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3R_13()) jj_scanpos = xsp;

-    return false;

-  }

-

   private boolean jj_3_4() {

     if (jj_3R_6()) return true;

     if (jj_scan_token(O_DOT)) return true;

@@ -3049,6 +3058,26 @@
     return false;

   }

 

+  private boolean jj_3R_15() {

+    if (jj_scan_token(S_QUOTED_IDENTIFIER)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_14() {

+    if (jj_scan_token(S_IDENTIFIER)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_6() {

+    Token xsp;

+    xsp = jj_scanpos;

+    if (jj_3R_14()) {

+    jj_scanpos = xsp;

+    if (jj_3R_15()) return true;

+    }

+    return false;

+  }

+

   private boolean jj_3R_41() {

     if (jj_scan_token(K_FLOAT)) return true;

     return false;

@@ -3075,26 +3104,6 @@
     return false;

   }

 

-  private boolean jj_3R_15() {

-    if (jj_scan_token(S_QUOTED_IDENTIFIER)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_14() {

-    if (jj_scan_token(S_IDENTIFIER)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_6() {

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3R_14()) {

-    jj_scanpos = xsp;

-    if (jj_3R_15()) return true;

-    }

-    return false;

-  }

-

   private boolean jj_3_16() {

     if (jj_scan_token(K_CHARACTER)) return true;

     if (jj_scan_token(K_SET)) return true;

@@ -3147,17 +3156,17 @@
     return false;

   }

 

-  private boolean jj_3R_8() {

-    if (jj_3R_6()) return true;

-    return false;

-  }

-

   private boolean jj_3_20() {

     if (jj_scan_token(K_IN)) return true;

     if (jj_scan_token(K_OUT)) return true;

     return false;

   }

 

+  private boolean jj_3R_8() {

+    if (jj_3R_6()) return true;

+    return false;

+  }

+

   private boolean jj_3R_17() {

     if (jj_3R_10()) return true;

     return false;

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
index e9bb809..7bc7840 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
Binary files differ
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
index 2751ac3..4a8c8a1 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
Binary files differ
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
index 782d43e..15bb5b6 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
@@ -502,7 +502,9 @@
         // fix up the databaseType's object-graph

         Stack<UnresolvedType> stac = new Stack<UnresolvedType>();

         for (UnresolvedType uType : unresolvedTypes) {

-            stac.push(uType);

+            if (!stac.contains(uType)) {

+                stac.push(uType);

+            }

         }

         boolean done = false;

         DatabaseTypesRepository typesRepository = parser.getTypesRepository();

@@ -522,14 +524,14 @@
                         if (rowtypeCompositeType == null) {

                             List<TableType> tables = buildTables(conn, null, tableName, false);

                             if (tables != null && tables.size() > 0) {

-                                rowtypeCompositeType = tables.get(0);

-                                typesRepository.setDatabaseType(rowtypeCompositeType.getTypeName(),

-                                    rowtypeCompositeType);

+                                TableType tableType = tables.get(0);

+                                typesRepository.setDatabaseType(tableType.getTableName(), tableType);

+                                ROWTYPEType rType = new ROWTYPEType(typeName);

+                                rType.addCompositeType(tableType);

+                                uType.getOwningType().addCompositeType(rType);

+                                typesRepository.setDatabaseType(rType.getTypeName(), rType);

+                                rowtypeCompositeType = tableType;

                             }

-                            ROWTYPEType rType = new ROWTYPEType(typeName);

-                            rType.addCompositeType(rowtypeCompositeType);

-                            uType.getOwningType().addCompositeType(rType);

-                            typesRepository.setDatabaseType(typeName, rType);

                         }

                         else {

                             uType.getOwningType().addCompositeType(rowtypeCompositeType);

diff --git a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/AnchoredTypesResolutionTestSuite.java b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/AnchoredTypesResolutionTestSuite.java
new file mode 100644
index 0000000..5edc63d
--- /dev/null
+++ b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/AnchoredTypesResolutionTestSuite.java
@@ -0,0 +1,141 @@
+/*******************************************************************************

+ * Copyright (c) 2012 Oracle. All rights reserved.

+ * This program and the accompanying materials are made available under the

+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0

+ * which accompanies this distribution.

+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html

+ * and the Eclipse Distribution License is available at

+ * http://www.eclipse.org/org/documents/edl-v10.php.

+ *

+ * Contributors:

+ *     Mike Norman - Feb 1 2012, created anchored types (%TYPE, %ROWTYPE) tests

+ ******************************************************************************/

+package org.eclipse.persistence.tools.oracleddl.test.databasetypebuilder;

+

+//javase imports

+import java.sql.Connection;

+import java.sql.SQLException;

+import java.util.ArrayList;

+import java.util.List;

+

+//JUnit4 imports

+import org.junit.AfterClass;

+import org.junit.BeforeClass;

+import org.junit.Test;

+import static org.junit.Assert.assertSame;

+import static org.junit.Assert.assertTrue;

+

+//DDL imports

+import org.eclipse.persistence.tools.oracleddl.util.DatabaseTypeBuilder;

+

+//testing imports

+import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLCursorType;

+import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLPackageType;

+import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLType;

+import org.eclipse.persistence.tools.oracleddl.test.AllTests;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_CREATE_KEY;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DEBUG_KEY;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DROP_KEY;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DEFAULT_DATABASE_DDL_CREATE;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DEFAULT_DATABASE_DDL_DEBUG;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DEFAULT_DATABASE_DDL_DROP;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.buildConnection;

+import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.runDdl;

+

+public class AnchoredTypesResolutionTestSuite {

+

+    static final String CREATE_TABLE_PREFIX = "CREATE TABLE ";

+    static final String CREATE_PACKAGE_PREFIX = "CREATE PACKAGE ";

+    static final String ANCHORED_TYPES_TEST4_PACKAGE = "ANCHORED_TYPES_TEST4";

+    static final String ANCHORED_TYPES_TABLE2 = "ANCHORED_TYPES_TABLE2";

+    static final String CREATE_ANCHORED_TYPES_TABLE2 =

+        CREATE_TABLE_PREFIX + ANCHORED_TYPES_TABLE2 + " (" +

+            "\nID NUMBER NOT NULL," +

+            "\nNAME VARCHAR2(80)," +

+            "\nSINCE DATE," +

+            "\nPRIMARY KEY (ID)" +

+        "\n)";

+    static final String ANCHORED_TYPES_TABLE_FIELD = "NAME";

+    static final String ANCHORED_TYPE1_NAME = "W" + ANCHORED_TYPES_TABLE_FIELD;

+    static final String ANCHORED_TYPE1 =

+        ANCHORED_TYPES_TABLE2 + "." + ANCHORED_TYPES_TABLE_FIELD + "%TYPE";

+    static final String ANCHORED_TYPE2_NAME = "ANCHORED_TYPE2";

+    static final String ANCHORED_TYPE2 = ANCHORED_TYPES_TABLE2 + "%ROWTYPE";

+    static final String ANCHORED_TYPE3_NAME = "ANCHORED_CURSOR";

+    static final String CREATE_ANCHORED_TYPES_TEST1_PACKAGE =

+        CREATE_PACKAGE_PREFIX + ANCHORED_TYPES_TEST4_PACKAGE + " AS" +

+            "\nSUBTYPE " + ANCHORED_TYPE1_NAME + " IS " + ANCHORED_TYPE1 + ";" +

+            "\nSUBTYPE " + ANCHORED_TYPE2_NAME + " IS " + ANCHORED_TYPE2 + ";" +

+            "\nTYPE " + ANCHORED_TYPE3_NAME + " IS REF CURSOR RETURN " + ANCHORED_TYPE2_NAME + ";" +

+        "\nEND " + ANCHORED_TYPES_TEST4_PACKAGE + ";";

+

+    static final String DROP_ANCHORED_TYPES_TABLE2 =

+        "DROP TABLE " + ANCHORED_TYPES_TABLE2;

+    static final String DROP_ANCHORED_TYPES_TEST1_PACKAGE =

+        "DROP PACKAGE " + ANCHORED_TYPES_TEST4_PACKAGE;

+

+    //JUnit fixture(s)

+    static DatabaseTypeBuilder dtBuilder = DatabaseTypeBuilderTestSuite.dtBuilder;

+    static Connection conn = AllTests.conn;

+    static List<String> expectedFieldNames = new ArrayList<String>();

+    static List<String> expectedPKFieldNames = new ArrayList<String>();

+

+    static boolean ddlCreate = false;

+    static boolean ddlDrop = false;

+    static boolean ddlDebug = false;

+

+    @BeforeClass

+    static public void setUp() throws ClassNotFoundException, SQLException {

+        conn = buildConnection();

+        dtBuilder = new DatabaseTypeBuilder();

+        String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE);

+        if ("true".equalsIgnoreCase(ddlCreateProp)) {

+            ddlCreate = true;

+        }

+        String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP);

+        if ("true".equalsIgnoreCase(ddlDropProp)) {

+            ddlDrop = true;

+        }

+        String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG);

+        if ("true".equalsIgnoreCase(ddlDebugProp)) {

+            ddlDebug = true;

+        }

+        if (ddlCreate) {

+            runDdl(conn, CREATE_ANCHORED_TYPES_TABLE2, ddlDebug);

+            runDdl(conn, CREATE_ANCHORED_TYPES_TEST1_PACKAGE, ddlDebug);

+        }

+    }

+

+    @AfterClass

+    static public void tearDown() {

+        if (ddlDrop) {

+            runDdl(conn, DROP_ANCHORED_TYPES_TABLE2, ddlDebug);

+            runDdl(conn, DROP_ANCHORED_TYPES_TEST1_PACKAGE, ddlDebug);

+        }

+    }

+

+    @Test

+    public void anchoredTypesTest1() {

+        boolean worked = true;

+        PLSQLPackageType plsqlPackageType = null;

+        try {

+            plsqlPackageType = dtBuilder.buildPackages(conn, "", ANCHORED_TYPES_TEST4_PACKAGE).get(0);

+        }

+        catch (Exception e) {

+            worked = false;

+        }

+        assertTrue(ANCHORED_TYPES_TEST4_PACKAGE + " should parse", worked);

+        PLSQLType plsqlType1 = plsqlPackageType.getTypes().get(0);

+        assertTrue(ANCHORED_TYPE1_NAME+ "'s enclosedType is supposed to be resolved",

+            plsqlType1.isResolved());

+        PLSQLType plsqlType2 = plsqlPackageType.getTypes().get(1);

+        assertTrue(ANCHORED_TYPE2_NAME + "'s enclosedType is supposed to be resolved",

+            plsqlType2.isResolved());

+        PLSQLCursorType cursorType = plsqlPackageType.getCursors().get(0);

+        assertTrue(ANCHORED_TYPE3_NAME + " is supposed to be resolved",

+            cursorType.isResolved());

+        assertSame(ANCHORED_TYPE2_NAME + " is supposed to be identical to " +

+            ANCHORED_TYPE3_NAME + "'s return type", plsqlType2, cursorType.getDataType());

+    }

+

+}
\ No newline at end of file
diff --git a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/DatabaseTypeBuilderTestSuite.java b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/DatabaseTypeBuilderTestSuite.java
index 8743d66..46d3a8a 100644
--- a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/DatabaseTypeBuilderTestSuite.java
+++ b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/DatabaseTypeBuilderTestSuite.java
@@ -30,6 +30,7 @@
 
 @RunWith(Suite.class)
 @SuiteClasses({
+    AnchoredTypesResolutionTestSuite.class,
     IOTTableDDLTestSuite.class,
     ProcedureDDLTestSuite.class,
     TableDDLTestSuite.class,
diff --git a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/IOTTableDDLTestSuite.java b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/IOTTableDDLTestSuite.java
index b64de17..6ed8b46 100644
--- a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/IOTTableDDLTestSuite.java
+++ b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/IOTTableDDLTestSuite.java
@@ -40,7 +40,6 @@
 
 //testing imports
 import org.eclipse.persistence.tools.oracleddl.test.AllTests;
-
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_CREATE_KEY;
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DEBUG_KEY;
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DROP_KEY;
@@ -50,7 +49,6 @@
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.buildConnection;
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.runDdl;
 
-
 public class IOTTableDDLTestSuite {
 
     static final String IOTTABLE = "DTB_IOTTABLE";
diff --git a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/ProcedureDDLTestSuite.java b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/ProcedureDDLTestSuite.java
index 47a2a61..dc4b4ec 100644
--- a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/ProcedureDDLTestSuite.java
+++ b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/ProcedureDDLTestSuite.java
@@ -34,7 +34,6 @@
 
 //testing imports
 import org.eclipse.persistence.tools.oracleddl.test.AllTests;
-
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_CREATE_KEY;
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DEBUG_KEY;
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DROP_KEY;
diff --git a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TableDDLTestSuite.java b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TableDDLTestSuite.java
index 838694b..1690b1c 100644
--- a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TableDDLTestSuite.java
+++ b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TableDDLTestSuite.java
@@ -39,7 +39,6 @@
 
 //testing imports
 import org.eclipse.persistence.tools.oracleddl.test.AllTests;
-
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_CREATE_KEY;
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DEBUG_KEY;
 import static org.eclipse.persistence.tools.oracleddl.test.TestHelper.DATABASE_DDL_DROP_KEY;
diff --git a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java
index 48b78f4..ea4c66a 100644
--- a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java
+++ b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/ddlparser/PackageDDLTestSuite.java
@@ -24,8 +24,6 @@
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
@@ -79,8 +77,8 @@
         }
         assertTrue("empty package should parse", worked);
         assertEquals("empty package wrong name", packageType.getPackageName(), EMPTY_PACKAGE);
-        assertNull("empty package should have no procedures", packageType.getProcedures());
-        assertNull("empty package should have no types", packageType.getTypes());
+        assertTrue("empty package should have no procedures", packageType.getProcedures().isEmpty());
+        assertTrue("empty package should have no types", packageType.getTypes().isEmpty());
     }
 
     /*
@@ -123,8 +121,8 @@
         }
         assertTrue("simple package should parse", worked);
         assertEquals("simple package has wrong name", packageType.getPackageName(), SIMPLE_PACKAGE);
-        assertNull("simple package should have no procedures", packageType.getProcedures());
-        assertNotNull("simple package should have types", packageType.getTypes());
+        assertTrue("simple package should have no procedures", packageType.getProcedures().isEmpty());
+        assertFalse("simple package should have types", packageType.getTypes().isEmpty());
         assertEquals("simple package should have exactly 1 type", 1, packageType.getTypes().size());
         PLSQLType type = packageType.getTypes().get(0);
         assertEquals("type has wrong name", SIMPLE_TYPE, type.getTypeName());
@@ -194,8 +192,8 @@
         }
         assertTrue("npackage should parse", worked);
         assertEquals("npackage has wrong name", packageType.getPackageName(), NPACKAGE);
-        assertNull("npackage should have no procedures", packageType.getProcedures());
-        assertNotNull("npackage should have types", packageType.getTypes());
+        assertTrue("npackage should have no procedures", packageType.getProcedures().isEmpty());
+        assertFalse("npackage should have types", packageType.getTypes().isEmpty());
         assertEquals("npackage should have exactly 2 types", 2, packageType.getTypes().size());
         PLSQLType ntype1 = packageType.getTypes().get(0);
         assertEquals("ntype1 has wrong name", NTYPE1, ntype1.getTypeName());
@@ -241,8 +239,8 @@
         assertTrue("package with collection should parse", worked);
         assertEquals("package with collection has wrong name", packageType.getPackageName(),
             PACKAGE_WCOLLECTION);
-        assertNull("package with collection should have no procedures", packageType.getProcedures());
-        assertNotNull("package with collection should have types", packageType.getTypes());
+        assertTrue("package with collection should have no procedures", packageType.getProcedures().isEmpty());
+        assertFalse("package with collection should have types", packageType.getTypes().isEmpty());
         assertEquals("package with collection should have exactly 1 type", 1,
             packageType.getTypes().size());
         PLSQLType t1 = packageType.getTypes().get(0);
@@ -310,10 +308,10 @@
         assertTrue("package with collection containing record should parse", worked);
         assertEquals("package with collection containing record has wrong name",
             packageType.getPackageName(), PACKAGE_WCOLLECTION_WRECORD);
-        assertNull("package with collection containing record should have no procedures",
-            packageType.getProcedures());
-        assertNotNull("package with collection containing record should have types",
-            packageType.getTypes());
+        assertTrue("package with collection containing record should have no procedures",
+            packageType.getProcedures().isEmpty());
+        assertFalse("package with collection containing record should have types",
+            packageType.getTypes().isEmpty());
         assertEquals("package with collection containing record should have exactly 2 types", 2,
             packageType.getTypes().size());
         PLSQLType t1 = packageType.getTypes().get(0);
@@ -432,10 +430,10 @@
         assertTrue("package with deeply nested types should parse", worked);
         assertEquals("package with deeply nested types has wrong name",
             packageType.getPackageName(), PACKAGE_WDEEPLY_NESTED_TYPES);
-        assertNull("package with deeply nested types should have no procedures",
-            packageType.getProcedures());
-        assertNotNull("package with deeply nested types should have types",
-            packageType.getTypes());
+        assertTrue("package with deeply nested types should have no procedures",
+            packageType.getProcedures().isEmpty());
+        assertFalse("package with deeply nested types should have types",
+            packageType.getTypes().isEmpty());
         assertEquals("package with deeply nested types should have exactly 5 types", 5,
             packageType.getTypes().size());
         PLSQLType t1 = packageType.getTypes().get(0);