Bug 446257: Findbugs issues in ddlparser component

Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
diff --git a/oracleddlparser/pom.xml b/oracleddlparser/pom.xml
index b2e8691..d8bb80e 100644
--- a/oracleddlparser/pom.xml
+++ b/oracleddlparser/pom.xml
@@ -145,6 +145,14 @@
             <redirectTestOutputToFile>true</redirectTestOutputToFile>
           </configuration>
         </plugin>
+        <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>findbugs-maven-plugin</artifactId>
+            <version>3.0.0</version>
+            <configuration>
+                <threshold>Low</threshold>
+            </configuration>
+        </plugin>
       </plugins>
     </reporting>
 
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/ArgumentType.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/ArgumentType.java
index 0f554cb..b748152 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/ArgumentType.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/ArgumentType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2011 Oracle. All rights reserved.

+ * Copyright (c) 2011, 2014 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.

@@ -58,6 +58,7 @@
 		return enclosedType.isResolved();

 	}

 

+    @Override

 	public boolean isComposite() {

 		if (enclosedType == null) {

 			// by default, an argument is 'simple' until otherwise configured 'composite'

@@ -100,7 +101,7 @@
         }

         sb.append(" ");

         if (direction != RETURN) {

-            sb.append(direction.toString());

+            sb.append(direction != null ? direction.toString() : "<NULL>");

             sb.append(" ");

         }

         if (enclosedType == null) {

@@ -114,6 +115,7 @@
 

     //for all DatabaseTypeCompositeTestable 'is-a' tests, delegate to enclosed dataType

 

+    @Override

     public boolean isObjectTableType() {

         if (enclosedType == null) {

             return false;

@@ -121,6 +123,7 @@
         return enclosedType.isObjectTableType();

     }

 

+    @Override

     public boolean isObjectType() {

         if (enclosedType == null) {

             return false;

@@ -128,6 +131,7 @@
         return enclosedType.isObjectType();

     }

 

+    @Override

     public boolean isPLSQLCollectionType() {

         if (enclosedType == null) {

             return false;

@@ -135,6 +139,7 @@
         return enclosedType.isPLSQLCollectionType();

     }

 

+    @Override

     public boolean isPLSQLCursorType() {

         if (enclosedType == null) {

             return false;

@@ -142,6 +147,7 @@
         return enclosedType.isPLSQLCursorType();

     }

 

+    @Override

     public boolean isPLSQLRecordType() {

         if (enclosedType == null) {

             return false;

@@ -149,6 +155,7 @@
         return enclosedType.isPLSQLRecordType();

     }

 

+    @Override

     public boolean isPLSQLSubType() {

         if (enclosedType == null) {

             return false;

@@ -156,6 +163,7 @@
         return enclosedType.isPLSQLSubType();

     }

 

+    @Override

     public boolean isTableType() {

         if (enclosedType == null) {

             return false;

@@ -163,6 +171,7 @@
         return enclosedType.isTableType();

     }

 

+    @Override

     public boolean isDbTableType() {

         if (enclosedType == null) {

             return false;

@@ -170,6 +179,7 @@
         return enclosedType.isDbTableType();

     }

 

+    @Override

     public boolean isVArrayType() {

         if (enclosedType == null) {

             return false;

@@ -180,25 +190,7 @@
     @Override

     public String toString() {

         StringBuilder sb = new StringBuilder();

-        if (argumentName != null) {

-            sb.append(argumentName);

-        }

-        else {

-            if (direction == RETURN) {

-                sb.append(RETURN);

-            }

-        }

-        sb.append(" ");

-        if (direction != RETURN) {

-            sb.append(direction.toString());

-            sb.append(" ");

-        }

-        if (enclosedType == null) {

-            sb.append("<null/>");

-        }

-        else {

-            sb.append(enclosedType.toString());

-        }

+        sb.append(shortName());

         if (optional) {

             sb.append(" (opt)");

         }

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java
index 365e14a..6a12ebe 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/FunctionType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2011 Oracle. All rights reserved.

+ * Copyright (c) 2011, 2014 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.

@@ -22,6 +22,7 @@
         super(procedureName);

     }

 

+    @Override

     public void setProcedureName(String procedureName) {

         this.procedureName = procedureName;

         super.typeName = "FUNCTION " + procedureName;

@@ -70,7 +71,7 @@
             }

         }

         sb.append(") ");

-        sb.append(returnArgument.toString());

+        sb.append(returnArgument != null ? returnArgument.toString() : "<NULL>");

         return sb.toString();

     }

 

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 adab1e9..514ef62 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
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2011 Oracle. All rights reserved.

+ * Copyright (c) 2011, 2014 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.

@@ -53,6 +53,8 @@
 

     /**

      * Return the schema name for this package.

+     *

+     * @return the schema name for this package

      */

     public String getSchema() {

         return schema;

@@ -60,6 +62,8 @@
 

     /**

      * Set the schema name for this package.

+     *

+     * @param schema the schema name for this package

      */

     public void setSchema(String schema) {

         this.schema = schema;

@@ -102,29 +106,23 @@
     }

 

     public void addCursor(PLSQLCursorType cursorType) {

-        if (getCursors() == null) {

-            cursors = new ArrayList<PLSQLCursorType>();

-        }

-        if (!cursors.contains(cursorType)) {

-            cursors.add(cursorType);

+        List<PLSQLCursorType> curs = getCursors();

+        if (!curs.contains(cursorType)) {

+            curs.add(cursorType);

         }

     }

 

-	public void addProcedure(ProcedureType procedureType) {

-        if (getProcedures() == null) {

-            procedures = new ArrayList<ProcedureType>();

-        }

-        if (!procedures.contains(procedureType)) {

-            procedures.add(procedureType);

+    public void addProcedure(ProcedureType procedureType) {

+        List<ProcedureType> proc = getProcedures();

+        if (!proc.contains(procedureType)) {

+            proc.add(procedureType);

         }

     }

 

     public void addLocalVariable(FieldType var) {

-        if (getLocalVariables() == null) {

-            localVariables = new ArrayList<FieldType>();

-        }

-        if (!localVariables.contains(var)) {

-            localVariables.add(var);

+        List<FieldType> vars = getLocalVariables();

+        if (!vars.contains(var)) {

+            vars.add(var);

         }

     }

 

@@ -135,6 +133,7 @@
         //no-op

     }

 

+        @Override

 	public boolean isComposite() {

 		return true;

 	}

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLRecordType.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLRecordType.java
index 9522b7d..91c32eb 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLRecordType.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLRecordType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2011 Oracle. All rights reserved.

+ * Copyright (c) 2011, 2014 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.

@@ -31,10 +31,13 @@
 

     /**

      * Returns the list of FieldType instances.

+     *

+     * @return the list of FieldType instances

      */

     public List<FieldType> getFields() {

         return fields;

     }

+

     public void addField(DatabaseType databaseType) {

         if (databaseType.isFieldType()) {

             fields.add((FieldType)databaseType);

@@ -58,6 +61,7 @@
         //no-op

     }

 

+    @Override

 	public void accept(DatabaseTypeVisitor visitor) {

 		visitor.visit(this);

 	}

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 d15fe95..c32610f 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
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2011 Oracle. All rights reserved.

+ * Copyright (c) 2011, 2014 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.

@@ -324,7 +324,6 @@
     }

 

     //use reflection to avoid huge if-then-else tree: if (databaseType instanceof xxx)

-    static CompositeDatabaseTypeHandler handler = new CompositeDatabaseTypeHandler();

     static class CompositeDatabaseTypeHandler {

         static Method[] methods = CompositeDatabaseTypeHandler.class.getMethods();

         public static void handle(DatabaseTypeVisitor visitor, Object o) {

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/SimpleNode.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/SimpleNode.java
index e54f534..2d6cecd 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/SimpleNode.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/SimpleNode.java
@@ -3,7 +3,7 @@
 package org.eclipse.persistence.tools.oracleddl.parser;

 

 public

-@SuppressWarnings("all")
+@SuppressWarnings("all")

 class SimpleNode implements Node {

 

   protected Node parent;

@@ -38,7 +38,7 @@
   }

 

   public Node jjtGetChild(int i) {

-    return children[i];

+    return i < jjtGetNumChildren() ? children[i] : null;

   }

 

   public int jjtGetNumChildren() {

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DBMSMetadataSessionTransformsFactory.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DBMSMetadataSessionTransformsFactory.java
index 8765bd6..91ca663 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DBMSMetadataSessionTransformsFactory.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DBMSMetadataSessionTransformsFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Oracle. All rights reserved.
+ * Copyright (c) 2011, 2014 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.
@@ -22,17 +22,20 @@
     public static final String TRANSFORMS = "transforms.properties";
 
     public Properties getTransformProperties() {
-        Properties transformsProperties = null;
-        InputStream is = getClass().getResourceAsStream(TRANSFORMS);
+        InputStream is = DBMSMetadataSessionTransformsFactory.class.getResourceAsStream(TRANSFORMS);
         if (is != null) {
-            transformsProperties = new Properties();
+            Properties transformsProperties = new Properties();
             try {
                 transformsProperties.load(is);
-                is.close();
                 return transformsProperties;
-            }
-            catch (IOException e) {
+            } catch (IOException e) {
                 // ignore
+            } finally {
+                try {
+                    is.close();
+                } catch (IOException ex) {
+                    //ignore
+                }
             }
         }
         return null;
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 283c24b..6fcf928 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
@@ -159,15 +159,13 @@
                 for (String ddl : distinctDDLs) {

                     DDLParser parser = newDDLParser(ddl, copyOfSchemaPatterns);

                     TableType tableType = parser.parseTable();

-                    if (tableType != null) {

-                        tableTypes.add(tableType);

-                        if (resolveTypes) {

-                            UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

-                            unresolvedTypesVisitor.visit(tableType);

-                            if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

-                                resolvedTypes(conn, tableType.getSchema(), parser,

-                                    unresolvedTypesVisitor.getUnresolvedTypes(), tableType);

-                            }

+                    tableTypes.add(tableType);

+                    if (resolveTypes) {

+                        UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

+                        unresolvedTypesVisitor.visit(tableType);

+                        if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

+                            resolvedTypes(conn, tableType.getSchema(), parser,

+                                unresolvedTypesVisitor.getUnresolvedTypes(), tableType);

                         }

                     }

                 }

@@ -211,20 +209,18 @@
                 for (String ddl : distinctDDLs) {

                     DDLParser parser = newDDLParser(ddl, copyOfSchemaPatterns);

                     PLSQLPackageType packageType = parser.parsePLSQLPackage();

-                    if (packageType != null) {

-                        packageTypes.add(packageType);

-                        parserMap.put(packageType, parser);

-                    }

+                    packageTypes.add(packageType);

+                    parserMap.put(packageType, parser);

                 }

                 if (!parserMap.isEmpty() && resolveTypes) {

-                	for (PLSQLPackageType packageType : parserMap.keySet()) {

-                		DDLParser parser = parserMap.get(packageType);

-	                    UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

-	                    unresolvedTypesVisitor.visit(packageType);

-	                    if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

-	                        resolvedTypes(conn, packageType.getSchema(), parser, unresolvedTypesVisitor.getUnresolvedTypes(), packageType, packageTypes);

-	                    }

-                	}

+                    for (Map.Entry<PLSQLPackageType, DDLParser> entry : parserMap.entrySet()) {

+                        PLSQLPackageType packageType = entry.getKey();

+                        UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

+                        unresolvedTypesVisitor.visit(packageType);

+                        if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

+                            resolvedTypes(conn, packageType.getSchema(), entry.getValue(), unresolvedTypesVisitor.getUnresolvedTypes(), packageType, packageTypes);

+                        }

+                    }

                 }

             }

         }

@@ -265,15 +261,13 @@
                 for (String ddl : distinctDDLs) {

                     DDLParser parser = newDDLParser(ddl, copyOfSchemaPatterns);

                     ProcedureType procedureType = parser.parseTopLevelProcedure();

-                    if (procedureType != null) {

-                        procedureTypes.add(procedureType);

-                        if (resolveTypes) {

-                            UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

-                            unresolvedTypesVisitor.visit(procedureType);

-                            if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

-                                resolvedTypes(conn, procedureType.getSchema(), parser,

-                                    unresolvedTypesVisitor.getUnresolvedTypes(), procedureType);

-                            }

+                    procedureTypes.add(procedureType);

+                    if (resolveTypes) {

+                        UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

+                        unresolvedTypesVisitor.visit(procedureType);

+                        if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

+                            resolvedTypes(conn, procedureType.getSchema(), parser,

+                                unresolvedTypesVisitor.getUnresolvedTypes(), procedureType);

                         }

                     }

                 }

@@ -316,15 +310,13 @@
                 for (String ddl : distinctDDLs) {

                     DDLParser parser = newDDLParser(ddl, copyOfSchemaPatterns);

                     FunctionType functionType = parser.parseTopLevelFunction();

-                    if (functionType != null) {

-                        functionsTypes.add(functionType);

-                        if (resolveTypes) {

-                            UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

-                            unresolvedTypesVisitor.visit(functionType);

-                            if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

-                                resolvedTypes(conn, functionType.getSchema(), parser,

-                                    unresolvedTypesVisitor.getUnresolvedTypes(), functionType);

-                            }

+                    functionsTypes.add(functionType);

+                    if (resolveTypes) {

+                        UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

+                        unresolvedTypesVisitor.visit(functionType);

+                        if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

+                            resolvedTypes(conn, functionType.getSchema(), parser,

+                                unresolvedTypesVisitor.getUnresolvedTypes(), functionType);

                         }

                     }

                 }

@@ -373,7 +365,7 @@
                             UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

                             unresolvedTypesVisitor.visit(databaseType);

                             if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {

-                                String schemaPattern = null;

+                                String schemaPattern = PERCENT;

                                 if (databaseType.isObjectTableType()) {

                                     schemaPattern = ((ObjectTableType)databaseType).getSchema();

                                 }

@@ -383,9 +375,6 @@
                                 else if (databaseType.isVArrayType()) {

                                     schemaPattern = ((VArrayType)databaseType).getSchema();

                                 }

-                                else {

-                                    schemaPattern = PERCENT;

-                                }

                                 resolvedTypes(conn, schemaPattern, parser,

                                     unresolvedTypesVisitor.getUnresolvedTypes(), databaseType);

                             }

@@ -457,11 +446,11 @@
                     String ddl = null;

                     if (clob != null) {

                         Reader is = clob.getCharacterStream();

-                        StringBuffer sb = new StringBuffer();

+                        StringBuilder sb = new StringBuilder();

                         int length = (int)clob.length();

                         if (length > 0) {

                             char[] buffer = new char[length];

-                            // Read stream and append to StringBuffer.

+                            // Read stream and append to StringBuilder.

                             try {

                                 while (is.read(buffer) != -1) {

                                     sb.append(buffer);

@@ -591,11 +580,10 @@
         boolean done = false;

         DatabaseTypesRepository typesRepository = parser.getTypesRepository();

         while (!done) {

-            CompositeDatabaseType resolvedType = null;

             UnresolvedType uType = stac.pop();

             String typeName = uType.getTypeName();

             CompositeDatabaseType owningType = uType.getOwningType();

-            int dotIdx = typeName.indexOf(DOT);

+            int dotIdx = typeName.indexOf('.');

             String typeName1 = typeName;

             String typeName2 = null;

             // handle dotted scenario, i.e. "PackageName.TypeName" or "SchemaName.TypeName"

@@ -604,7 +592,7 @@
                 typeName2 = typeName.substring(dotIdx+1, typeName.length());

 

                 // handle second dotted scenario, i.e. "SchemaName.TableName.ColumnName"

-                dotIdx = typeName2.indexOf(DOT);

+                dotIdx = typeName2.indexOf('.');

                 if (dotIdx != -1) {

                     String tmpStr = typeName2;

                     typeName1 = tmpStr.substring(0, dotIdx);

@@ -612,7 +600,7 @@
                 }

             }

             // check type repository first

-            resolvedType = (CompositeDatabaseType)typesRepository.getDatabaseType(typeName);

+            CompositeDatabaseType resolvedType = (CompositeDatabaseType)typesRepository.getDatabaseType(typeName);

             if (resolvedType == null) {

                 if (owningType.isROWTYPEType()) {

                     ROWTYPEType rType = (ROWTYPEType)owningType;

@@ -685,7 +673,9 @@
                                 List<PLSQLPackageType> packages = buildPackages(conn, schemaPattern, typeName1, false);

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

                                     plsqlPkg = packages.get(0);  // only care about first one

-                                    processedPackages.add(plsqlPkg);

+                                    if (processedPackages != null) {

+                                        processedPackages.add(plsqlPkg);

+                                    }

                                 }

                             }

                             if (plsqlPkg != null) {

@@ -884,12 +874,12 @@
            worked = false;

         }

         finally {

-            try {

-                cStmt.close();

-            }

-            catch (SQLException e) {

+            if (cStmt != null)

+                try {

+                    cStmt.close();

+                } catch (SQLException e) {

                 // ignore

-            }

+                }

         }

         if (worked) {

             transformsSet = true;

@@ -908,7 +898,7 @@
      */

     static DatabaseType findField(String fieldName, DatabaseType targetType) {

         // remove '%' from field name

-        int pctIdx = fieldName.indexOf(PERCENT);

+        int pctIdx = fieldName.indexOf('%');

         if (pctIdx != -1) {

             fieldName = fieldName.substring(0, pctIdx);

         }

diff --git a/oracleddlparser/src/main/jjtree/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt b/oracleddlparser/src/main/jjtree/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
index b7afcc5..417b93c 100644
--- a/oracleddlparser/src/main/jjtree/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
+++ b/oracleddlparser/src/main/jjtree/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
@@ -522,7 +522,7 @@
         {
           packageName = dottedName;
           if (dottedName.contains(".")) {
-              int idx = dottedName.indexOf(".");
+              int idx = dottedName.indexOf('.');
               schema = dottedName.substring(0, idx);
               packageName = dottedName.substring(idx+1, dottedName.length());
           }
@@ -552,7 +552,7 @@
         {
           procedureName = dottedName;
           if (dottedName.contains(".")) {
-              int idx = dottedName.indexOf(".");
+              int idx = dottedName.indexOf('.');
               schema = dottedName.substring(0, idx);
               procedureName = dottedName.substring(idx+1, dottedName.length());
           }
@@ -582,7 +582,7 @@
             {
           functionName = dottedName;
           if (dottedName.contains(".")) {
-              int idx = dottedName.indexOf(".");
+              int idx = dottedName.indexOf('.');
               schema = dottedName.substring(0, idx);
               functionName = dottedName.substring(idx+1, dottedName.length());
           }
@@ -614,7 +614,7 @@
         {
           tableName = dottedName;
           if (dottedName.contains(".")) {
-              int idx = dottedName.indexOf(".");
+              int idx = dottedName.indexOf('.');
               schema = dottedName.substring(0, idx);
               tableName = dottedName.substring(idx+1, dottedName.length());
           }
@@ -653,7 +653,7 @@
         {
           typeName = dottedName;
           if (dottedName.contains(".")) {
-              int idx = dottedName.indexOf(".");
+              int idx = dottedName.indexOf('.');
               schema = dottedName.substring(0, idx);
               typeName = dottedName.substring(idx+1, dottedName.length());
           }
@@ -761,7 +761,7 @@
     {
       if (s != null) {
           if (s.contains(".")) {
-              int dotIdx = s.indexOf(".");
+              int dotIdx = s.indexOf('.');
               String namePart1 = s.substring(0, dotIdx);
               String namePart2 = s.substring(dotIdx+1, s.length());
               String schemaName = null;
@@ -860,10 +860,12 @@
     <O_SEMICOLON>
     {
         FieldType variable = new FieldType(varName);
-        variable.setEnclosedType(varType);
         packageType.addLocalVariable(variable);
-        if (varType.isROWTYPEType()) {
-            ((ROWTYPEType)varType).setPackageType(packageType);
+        if (varType != null) {
+            variable.setEnclosedType(varType);
+            if (varType.isROWTYPEType()) {
+                ((ROWTYPEType)varType).setPackageType(packageType);
+            }
         }
     }
 }
@@ -1682,7 +1684,7 @@
       // may need to strip off schema/catalog name
       if (dataType.getTypeName().contains(".")) {
           String dataTypeName = dataType.getTypeName();
-          int dotIdx = dataTypeName.indexOf(".");
+          int dotIdx = dataTypeName.indexOf('.');
           String namePart1 = dataTypeName.substring(0, dotIdx);
           String namePart2 = dataTypeName.substring(dotIdx+1, dataTypeName.length());
           if (namePart1.equals(functionType.getCatalogName()) || namePart1.equals(functionType.getSchema())) {
@@ -1719,7 +1721,7 @@
       // may need to strip off schema/catalog name
       if (argumentDataType.getTypeName().contains(".")) {
           String argumentDataTypeName = argumentDataType.getTypeName();
-          int dotIdx = argumentDataTypeName.indexOf(".");
+          int dotIdx = argumentDataTypeName.indexOf('.');
           String namePart1 = argumentDataTypeName.substring(0, dotIdx);
           String namePart2 = argumentDataTypeName.substring(dotIdx+1, argumentDataTypeName.length());
           if (namePart1.equals(procedureType.getCatalogName()) || namePart1.equals(procedureType.getSchema())) {