XMLBEANS-565 - Generate TypeSystemHolder as .java (in sources) instead of .class (in resources)

git-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1889220 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/build.xml b/build.xml
index a14b9a7..b36f2d0 100644
--- a/build.xml
+++ b/build.xml
@@ -389,13 +389,6 @@
         </javac>
         <mkdir dir="build/generated-resources/org/apache/xmlbeans/impl/schema"/>
 
-        <!-- need to provide the template also in classes - generated-resources will be ignored on bootstrapping -->
-        <move file="build/classes/org/apache/xmlbeans/impl/schema/TypeSystemHolder.class"
-              tofile="build/classes/org/apache/xmlbeans/impl/schema/TypeSystemHolder.template"/>
-
-        <copy file="build/classes/org/apache/xmlbeans/impl/schema/TypeSystemHolder.template"
-              todir="build/generated-resources/org/apache/xmlbeans/impl/schema"/>
-
         <!-- now generate new xmlbeans re-/sources and remove the traces of the oldxbean generated re-/sources -->
         <path id="oldschemas">
             <pathelement location="${log4j-api.jar}"/>
diff --git a/src/main/java/org/apache/xmlbeans/SchemaCodePrinter.java b/src/main/java/org/apache/xmlbeans/SchemaCodePrinter.java
index f04c322..a8fe90b 100755
--- a/src/main/java/org/apache/xmlbeans/SchemaCodePrinter.java
+++ b/src/main/java/org/apache/xmlbeans/SchemaCodePrinter.java
@@ -15,6 +15,8 @@
 
 package org.apache.xmlbeans;
 
+import org.apache.xmlbeans.impl.repackage.Repackager;
+
 import java.io.IOException;
 import java.io.Writer;
 
@@ -42,5 +44,7 @@
     default void printType(Writer writer, SchemaType sType, XmlOptions opt) throws IOException {
         printType(writer, sType);
     }
+
+    void printHolder(Writer writer, SchemaTypeSystem system, XmlOptions opt, Repackager repackager) throws IOException;
 }
 
diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
index 70b32be..6f64b86 100644
--- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
+++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
@@ -18,6 +18,7 @@
 import org.apache.xmlbeans.*;
 import org.apache.xmlbeans.XmlOptions.BeanMethod;
 import org.apache.xmlbeans.impl.common.NameUtil;
+import org.apache.xmlbeans.impl.repackage.Repackager;
 
 import javax.xml.namespace.QName;
 import java.io.IOException;
@@ -2376,4 +2377,28 @@
             sType = sType.getBaseType();
         }
     }
+
+    public void printHolder(Writer writer, SchemaTypeSystem system, XmlOptions opt, Repackager repackager) throws IOException {
+        _writer = writer;
+
+        String sysPack = system.getName();
+        if (repackager != null) {
+            sysPack = repackager.repackage(new StringBuffer(sysPack)).toString();
+        }
+        emit("package "+sysPack+";");
+        emit("");
+        emit("import org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl;");
+        emit("");
+        emit("public final class TypeSystemHolder extends SchemaTypeSystemImpl {");
+        indent();
+        emit("public static final TypeSystemHolder typeSystem = new TypeSystemHolder();");
+        emit("");
+        emit("private TypeSystemHolder() {");
+        indent();
+        emit("super(TypeSystemHolder.class);");
+        outdent();
+        emit("}");
+        outdent();
+        emit("}");
+    }
 }
diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
index 66748c6..528a51a 100644
--- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
+++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
@@ -17,6 +17,8 @@
 
 import org.apache.xmlbeans.*;
 import org.apache.xmlbeans.impl.common.XmlErrorWatcher;
+import org.apache.xmlbeans.impl.repackage.Repackager;
+import org.apache.xmlbeans.impl.util.FilerImpl;
 import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument;
 import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument.Schema;
 
@@ -370,6 +372,22 @@
         types.addAll(Arrays.asList(system.documentTypes()));
         types.addAll(Arrays.asList(system.attributeTypes()));
 
+
+        SchemaCodePrinter printer = (options == null) ? null : options.getSchemaCodePrinter();
+        if (printer == null) {
+            printer = new SchemaTypeCodePrinter();
+        }
+
+        String indexClassName = SchemaTypeCodePrinter.indexClassForSystem(system);
+
+        try (Writer out = filer.createSourceFile(indexClassName)) {
+            Repackager repackager = (filer instanceof FilerImpl) ? ((FilerImpl) filer).getRepackager() : null;
+            printer.printHolder(out, system, options, repackager);
+        } catch (IOException e) {
+            System.err.println("IO Error " + e);
+            success = false;
+        }
+
         for (SchemaType type : types) {
             if (type.isBuiltinType()) {
                 continue;
@@ -380,11 +398,6 @@
 
             String fjn = type.getFullJavaName();
 
-            SchemaCodePrinter printer = (options == null) ? null : options.getSchemaCodePrinter();
-            if (printer == null) {
-                printer = new SchemaTypeCodePrinter();
-            }
-
             try (Writer writer = filer.createSourceFile(fjn)) {
                 // Generate interface class
                 printer.printType(writer, type, options);
diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
index 875bc48..068b209 100644
--- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
+++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
@@ -16,8 +16,9 @@
 package org.apache.xmlbeans.impl.schema;
 
 import org.apache.xmlbeans.*;
-import org.apache.xmlbeans.impl.common.*;
-import org.apache.xmlbeans.impl.repackage.Repackager;
+import org.apache.xmlbeans.impl.common.NameUtil;
+import org.apache.xmlbeans.impl.common.QNameHelper;
+import org.apache.xmlbeans.impl.common.XBeanDebug;
 import org.apache.xmlbeans.impl.util.FilerImpl;
 import org.apache.xmlbeans.impl.util.HexBin;
 import org.apache.xmlbeans.impl.values.XmlObjectBase;
@@ -291,153 +292,9 @@
         saver.writeEnd();
     }
 
-    /**
-     * The strategy here is to copy the compiled TypeSystemHolder.template class
-     * to a new TypeSystemHolder.class needed by the schema type system.  When
-     * saving a loader, we read the TypeSystemHolder.template class file and
-     * swap out the utf8 string constants with new ones to create a new
-     * TypeSystemHolder class file.  This saves us the need to rely on javac
-     * to compile a generated .java file into the class file.
-     * <p>
-     * See the JVM spec on how to interpret the bytes of a class file.
-     */
-    void saveLoader() {
-        String indexClassName = SchemaTypeCodePrinter.indexClassForSystem(this);
-        String[] replace = makeClassStrings(indexClassName);
-        assert replace.length == HOLDER_TEMPLATE_NAMES.length;
-
-        Repackager repackager = null;
-        if (_filer instanceof FilerImpl) {
-            repackager = ((FilerImpl) _filer).getRepackager();
-        }
-
-        final String outName = indexClassName.replace('.', '/') + ".class";
-        try (DataInputStream in = new DataInputStream(getHolder());
-             DataOutputStream out = new DataOutputStream(_filer.createBinaryFile(outName))) {
-
-            // java magic
-            out.writeInt(in.readInt());
-
-            // java minor and major version
-            out.writeShort(in.readUnsignedShort());
-            out.writeShort(in.readUnsignedShort());
-
-            int poolsize = in.readUnsignedShort();
-            out.writeShort(poolsize);
-
-            // the constant pool is indexed from 1 to poolsize-1
-            for (int i = 1; i < poolsize; i++) {
-                int tag = in.readUnsignedByte();
-                out.writeByte(tag);
-
-                switch (tag) {
-                    case CONSTANT_UTF8:
-                        String value = in.readUTF();
-                        out.writeUTF(repackageConstant(value, replace, repackager));
-                        break;
-
-                    case CONSTANT_CLASS:
-                    case CONSTANT_STRING:
-                        out.writeShort(in.readUnsignedShort());
-                        break;
-
-                    case CONSTANT_NAMEANDTYPE:
-                    case CONSTANT_METHOD:
-                    case CONSTANT_FIELD:
-                    case CONSTANT_INTERFACEMETHOD:
-                        out.writeShort(in.readUnsignedShort());
-                        out.writeShort(in.readUnsignedShort());
-                        break;
-
-                    case CONSTANT_INTEGER:
-                    case CONSTANT_FLOAT:
-                        out.writeInt(in.readInt());
-                        break;
-
-                    case CONSTANT_LONG:
-                    case CONSTANT_DOUBLE:
-                        out.writeInt(in.readInt());
-                        out.writeInt(in.readInt());
-                        break;
-
-                    default:
-                        throw new RuntimeException("Unexpected constant type: " + tag);
-                }
-            }
-
-            // we're done with the class' constant pool,
-            // we can just copy the rest of the bytes
-            IOUtil.copyCompletely(in, out);
-        } catch (IOException e) {
-            // ok
-        }
-    }
-
-    private InputStream getHolder() {
-        InputStream is = SchemaTypeSystemImpl.class.getResourceAsStream(HOLDER_TEMPLATE_CLASSFILE);
-        if (is != null) {
-            return is;
-        }
-        DefaultClassLoaderResourceLoader clLoader = new DefaultClassLoaderResourceLoader();
-        is = clLoader.getResourceAsStream(HOLDER_TEMPLATE_CLASSFILE);
-        if (is != null) {
-            return is;
-        }
-        throw new SchemaTypeLoaderException("couldn't find resource: " + HOLDER_TEMPLATE_CLASSFILE,
-            _name, null, SchemaTypeLoaderException.IO_EXCEPTION);
-    }
-
-    private static final String HOLDER_TEMPLATE_CLASS = "org.apache.xmlbeans.impl.schema.TypeSystemHolder";
-    private static final String HOLDER_TEMPLATE_CLASSFILE = "TypeSystemHolder.template";
-    private static final String[] HOLDER_TEMPLATE_NAMES = makeClassStrings(HOLDER_TEMPLATE_CLASS);
-
-    // constant pool entry types
-    private static final int CONSTANT_UTF8 = 1;
-    // private static final int CONSTANT_UNICODE = 2;
-    private static final int CONSTANT_INTEGER = 3;
-    private static final int CONSTANT_FLOAT = 4;
-    private static final int CONSTANT_LONG = 5;
-    private static final int CONSTANT_DOUBLE = 6;
-    private static final int CONSTANT_CLASS = 7;
-    private static final int CONSTANT_STRING = 8;
-    private static final int CONSTANT_FIELD = 9;
-    private static final int CONSTANT_METHOD = 10;
-    private static final int CONSTANT_INTERFACEMETHOD = 11;
-    private static final int CONSTANT_NAMEANDTYPE = 12;
-
     // MAX_UNSIGNED_SHORT
     private static final int MAX_UNSIGNED_SHORT = Short.MAX_VALUE * 2 + 1;
 
-    private static String repackageConstant(String value, String[] replace, Repackager repackager) {
-        for (int i = 0; i < HOLDER_TEMPLATE_NAMES.length; i++) {
-            if (HOLDER_TEMPLATE_NAMES[i].equals(value)) {
-                return replace[i];
-            }
-        }
-
-        if (repackager != null) {
-            return repackager.repackage(new StringBuffer(value)).toString();
-        }
-
-        return value;
-    }
-
-    /**
-     * Construct an array of Strings found in a class file for a classname.
-     * For the class name 'a.b.C' it will generate an array of:
-     * 'a.b.C', 'a/b/C', 'La/b/C;', and 'class$a$b$C'.
-     */
-    private static String[] makeClassStrings(String classname) {
-        String[] result = new String[4];
-
-        result[0] = classname;
-        result[1] = classname.replace('.', '/');
-        result[2] = "L" + result[1] + ";";
-        result[3] = "class$" + classname.replace('.', '$');
-
-        return result;
-    }
-
     private Map<String, SchemaComponent.Ref> buildTypeRefsByClassname(Map<String, SchemaType> typesByClassname) {
         Map<String, SchemaComponent.Ref> result = new LinkedHashMap<>();
         for (String className : typesByClassname.keySet()) {
@@ -1081,8 +938,6 @@
 
         saveIndex();
         savePointers();
-
-        saveLoader();
     }
 
     void saveTypesRecursively(SchemaType[] types) {
@@ -1926,7 +1781,6 @@
          * Finishes loading an element after the header has already been loaded.
          */
         public SchemaGlobalElement finishLoadingElement() {
-            String handle = null;
             try {
                 int particleType = readShort();
                 if (particleType != SchemaParticle.ELEMENT) {
@@ -1981,7 +1835,7 @@
             } catch (SchemaTypeLoaderException e) {
                 throw e;
             } catch (Exception e) {
-                throw new SchemaTypeLoaderException("Cannot load type from typesystem", _name, handle, SchemaTypeLoaderException.NESTED_EXCEPTION, e);
+                throw new SchemaTypeLoaderException("Cannot load type from typesystem", _name, null, SchemaTypeLoaderException.NESTED_EXCEPTION, e);
             } finally {
                 readEnd();
             }
@@ -3287,7 +3141,7 @@
      */
     public String getMetadataPath() {
         Matcher m = packPat.matcher(_name);
-        m.find();
-        return m.group(1).replace('.', '/');
+        String n = m.find() ? m.group(1) : _name;
+        return n.replace('.', '/');
     }
 }
diff --git a/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java b/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java
index 53c629e..6b697d2 100644
--- a/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java
+++ b/src/test/java/compile/scomp/checkin/XmlBeansCompCheckinTests.java
@@ -14,7 +14,6 @@
  */

 package compile.scomp.checkin;

 

-import compile.scomp.common.CompileCommon;

 import compile.scomp.common.CompileTestBase;

 import compile.scomp.common.mockobj.TestFiler;

 import org.apache.xmlbeans.*;

@@ -24,34 +23,37 @@
 

 import java.io.File;

 import java.util.ArrayList;

-import java.util.Iterator;

+import java.util.Arrays;

 import java.util.List;

-import java.util.Vector;

 

 import static org.junit.Assert.*;

 

 public class XmlBeansCompCheckinTests extends CompileTestBase

 {   public final List xm_errors = new ArrayList();

     public final XmlOptions xm_opts = new XmlOptions();

-    final Vector expBinType = new Vector();

-    final Vector expSrcType = new Vector();

+    final List<String> expBinType;

+    final List<String> expSrcType;

 

     public XmlBeansCompCheckinTests() {

-        expBinType.add("org/apache/xmlbeans/metadata/system/apiCompile/atypedb57type.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/system/apiCompile/elname429edoctype.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/system/apiCompile/elnameelement.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/system/apiCompile/index.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/element/http_3A_2F_2Fbaz/elName.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/type/http_3A_2F_2Fbaz/aType.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/namespace/http_3A_2F_2Fbaz/xmlns.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/javaname/baz/ElNameDocument.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/javaname/baz/AType.xsb");

-        expBinType.add("org/apache/xmlbeans/metadata/system/apiCompile/TypeSystemHolder.class");

+        expBinType = Arrays.asList(

+            "org/apache/xmlbeans/metadata/system/apiCompile/atypedb57type.xsb",

+            "org/apache/xmlbeans/metadata/system/apiCompile/elname429edoctype.xsb",

+            "org/apache/xmlbeans/metadata/system/apiCompile/elnameelement.xsb",

+            "org/apache/xmlbeans/metadata/system/apiCompile/index.xsb",

+            "org/apache/xmlbeans/metadata/element/http_3A_2F_2Fbaz/elName.xsb",

+            "org/apache/xmlbeans/metadata/type/http_3A_2F_2Fbaz/aType.xsb",

+            "org/apache/xmlbeans/metadata/namespace/http_3A_2F_2Fbaz/xmlns.xsb",

+            "org/apache/xmlbeans/metadata/javaname/baz/ElNameDocument.xsb",

+            "org/apache/xmlbeans/metadata/javaname/baz/AType.xsb"

+        );

 

-        expSrcType.add("baz.AType");

-        expSrcType.add("baz.impl.ATypeImpl");

-        expSrcType.add("baz.ElNameDocument");

-        expSrcType.add("baz.impl.ElNameDocumentImpl");

+        expSrcType = Arrays.asList(

+            "org.apache.xmlbeans.metadata.system.apiCompile.TypeSystemHolder",

+            "baz.AType",

+            "baz.impl.ATypeImpl",

+            "baz.ElNameDocument",

+            "baz.impl.ElNameDocumentImpl"

+        );

 

         xm_opts.setErrorListener(xm_errors);

         xm_opts.setSavePrettyPrint();

@@ -89,11 +91,8 @@
         if (!f.isCreateSourceFile())

             throw new Exception("Source File method not invoked");

 

-        System.out.println("BIN");

-        CompileCommon.comparefNameVectors(f.getBinFileVec(), expBinType);

-        System.out.println("SRC");

-        CompileCommon.comparefNameVectors(f.getSrcFileVec(), expSrcType);

-

+        comparefNameVectors(f.getBinFileVec(), expBinType);

+        comparefNameVectors(f.getSrcFileVec(), expSrcType);

     }

 

     /**

@@ -102,16 +101,11 @@
     @Test

     public void test_sts_noSave() throws Exception

     {

-        XmlObject obj1 = XmlObject.Factory.parse(forXsd);

-        XmlObject[] schemas = new XmlObject[]{obj1};

-        XmlObject obj2 = XmlObject.Factory.parse(incrXsd);

-        XmlObject[] schemas2 = new XmlObject[]{obj2};

         XmlObject obj3 = XmlObject.Factory.parse(errXsd);

         XmlObject[] schemas3 = new XmlObject[]{obj3};

 

         SchemaTypeSystem sts;

-        TestFiler f = new TestFiler();

-        ArrayList err = new ArrayList();

+        ArrayList<XmlError> err = new ArrayList<>();

         XmlOptions opt = new XmlOptions().setErrorListener(err);

         opt.setCompilePartialTypesystem();

 

@@ -124,13 +118,11 @@
             // print out the recovered xm_errors

             if (!err.isEmpty()) {

                 System.out.println("Schema invalid: partial schema type system recovered");

-                for (Iterator i = err.iterator(); i.hasNext();) {

-                    XmlError xErr = (XmlError) i.next();

+                for (XmlError xErr : err) {

                     System.out.println(xErr);

 

                     if ((xErr.getErrorCode().compareTo("src-resolve") == 0) &&

-                            (xErr.getMessage().compareTo("type 'bType@http://baz' not found.") ==

-                            0))

+                        (xErr.getMessage().compareTo("type 'bType@http://baz' not found.") == 0))

                         psom_expError = true;

                 }

             }

@@ -144,8 +136,7 @@
             if (err.isEmpty())

                 System.err.println(e.getMessage());

             else

-                for (Iterator i = err.iterator(); i.hasNext();)

-                    System.err.println(i.next());

+                for (Object o : err) System.err.println(o);

             throw e;

         }

 

@@ -191,12 +182,8 @@
         }

 

         //make sure nothing was written

-        assertTrue("Filer -Bin- Partial SOM " +

-            "output dir needed to be empty",

-            tf.getBinFileVec().size() == 0);

-        assertTrue("Filer -SRC- Partial SOM " +

-            "output dir needed to be empty",

-            tf.getSrcFileVec().size() == 0);

+        assertEquals("Filer -Bin- Partial SOM output dir needed to be empty", 0, tf.getBinFileVec().size());

+        assertEquals("Filer -SRC- Partial SOM output dir needed to be empty", 0, tf.getSrcFileVec().size());

 

         assertFalse("Filer Create Source File " +

             "method should not have been invoked",

@@ -207,41 +194,27 @@
             tf.isCreateBinaryFile());

 

         // Check using filer in partial SOM compilation

-        try {

-            tf = new TestFiler();

+        tf = new TestFiler();

 

-            assertTrue("Filer Source should have been size 0",

-                    tf.getBinFileVec().size() == 0);

+        assertEquals("Filer Source should have been size 0", 0, tf.getBinFileVec().size());

 

-            //reset data

-            sts = null;

-            err.clear();

+        //reset data

+        sts = null;

+        err.clear();

 

-            //filer methods on partial SOM should not be returned

-            sts = XmlBeans.compileXmlBeans(null,

-                    null, schemas3, null,

-                    XmlBeans.getBuiltinTypeSystem(), tf, opt);

+        //filer methods on partial SOM should not be returned

+        sts = XmlBeans.compileXmlBeans(null,

+                null, schemas3, null,

+                XmlBeans.getBuiltinTypeSystem(), tf, opt);

 

-            assertTrue("Errors was not empty", !err.isEmpty());

-            //make sure nothing was written

-            assertTrue("Filer -Bin- Partial SOM " +

-                    "output dir needed to be empty",

-                    tf.getBinFileVec().size() == 0);

-            assertTrue("Filer -SRC- Partial SOM " +

-                    "output dir needed to be empty",

-                    tf.getSrcFileVec().size() == 0);

+        assertFalse("Errors was not empty", err.isEmpty());

+        //make sure nothing was written

+        assertEquals("Filer -Bin- Partial SOM output dir needed to be empty", 0, tf.getBinFileVec().size());

+        assertEquals("Filer -SRC- Partial SOM output dir needed to be empty", 0, tf.getSrcFileVec().size());

 

-            assertFalse("Filer Create Source File " +

-                    "method should not have been invoked",

-                    tf.isCreateSourceFile());

+        assertFalse("Filer Create Source File method should not have been invoked", tf.isCreateSourceFile());

 

-            assertFalse("Filer Create Binary File " +

-                    "method should not have been invoked",

-                    tf.isCreateBinaryFile());

-        } catch (Exception e) {

-            throw e;

-        }

-

+        assertFalse("Filer Create Binary File method should not have been invoked", tf.isCreateBinaryFile());

 

         System.out.println("Save Verification passed");

 

@@ -257,8 +230,6 @@
         XmlObject obj1 = XmlObject.Factory.parse(forXsd);

         XmlObject[] schemas = new XmlObject[]{obj1};

 

-        TestFiler f = new TestFiler();

-

         SchemaTypeSystem apiSts = XmlBeans.compileXmlBeans(null, null,

                 schemas, null, XmlBeans.getBuiltinTypeSystem(), null, null);

         System.out.println("Name: " + apiSts.getName());

@@ -297,4 +268,31 @@
 

     }

 

+

+    /** compare contents of two vectors */

+    private static void comparefNameVectors(List<String> act, List<String> exp) throws Exception {

+        if (exp == null) {

+            throw new Exception("Exp was null");

+        }

+        if (act == null) {

+            throw new Exception("Act was null");

+        }

+

+        if (exp.size() != act.size()) {

+            throw new Exception("Size was not the same exp.size:" + exp.size() + " act.size:" + act.size());

+        }

+

+        //use Vector.equals to compare

+        if (!act.equals(exp)) {

+            throw new Exception("Expected FNames did Not Match");

+        }

+

+        //check sequence is as expected (not sure if vector.equals does this

+        for (int i = 0; i < exp.size(); i++) {

+            if (!exp.get(i).equals(act.get(i))) {

+                throw new Exception("Item[" + i + "]-was not as expected" +

+                                    "ACT[" + i + "]-" + act.get(i) + " != EXP[" + i + "]-" + exp.get(i));

+            }

+        }

+    }

 }

diff --git a/src/test/java/compile/scomp/common/CompileCommon.java b/src/test/java/compile/scomp/common/CompileCommon.java
index 11b6bab..2c49bf4 100644
--- a/src/test/java/compile/scomp/common/CompileCommon.java
+++ b/src/test/java/compile/scomp/common/CompileCommon.java
@@ -16,33 +16,8 @@
 
 import common.Common;
 
-import java.util.Vector;
-
 public class CompileCommon extends Common{
 
     public static String fileLocation = XBEAN_CASE_ROOT +P + "compile" + P + "scomp" + P;
 
-    /** compare contents of two vectors */
-    public static void comparefNameVectors(Vector act, Vector exp) throws Exception
-    {
-        if (exp == null)
-            throw new Exception("Exp was null");
-        if (act == null)
-            throw new Exception("Act was null");
-
-        if (exp.size() != act.size())
-            throw new Exception("Size was not the same exp.size:" + exp.size() + " act.size:" + act.size());
-
-        //use Vector.equals to compare
-        if (!act.equals(exp))
-            throw new Exception("Expected FNames did Not Match");
-
-        //check sequence is as expected (not sure if vector.equals does this
-        for (int i = 0; i < exp.size(); i++) {
-            if (!exp.get(i).equals(act.get(i)))
-                throw new Exception("Item[" + i + "]-was not as expected" +
-                        "ACT[" + i + "]-" + act.get(i) + " != EXP[" + i + "]-" + exp.get(i));
-        }
-    }
-
 }
diff --git a/src/test/java/compile/scomp/common/mockobj/TestFiler.java b/src/test/java/compile/scomp/common/mockobj/TestFiler.java
index bd8375a..a2d9f7c 100644
--- a/src/test/java/compile/scomp/common/mockobj/TestFiler.java
+++ b/src/test/java/compile/scomp/common/mockobj/TestFiler.java
@@ -14,75 +14,62 @@
  */

 package compile.scomp.common.mockobj;

 

+import common.Common;

 import org.apache.xmlbeans.Filer;

 import org.apache.xmlbeans.impl.util.FilerImpl;

 

 import java.io.File;

-import java.io.OutputStream;

 import java.io.IOException;

+import java.io.OutputStream;

 import java.io.Writer;

-import java.util.Vector;

-import common.Common;

+import java.util.ArrayList;

+import java.util.List;

 

-/**

- *

- *

- */

-public class TestFiler implements Filer

-{

-    private String P = File.separator;

-    private FilerImpl impl;

+public class TestFiler implements Filer {

+    private final FilerImpl impl;

     private boolean isCreateBinaryFile;

     private boolean isCreateSourceFile;

-    private Vector binFileVec;

-    private Vector srcFileVec;

+    private final List<String> binFileVec = new ArrayList<>();

+    private final List<String> srcFileVec = new ArrayList<>();

 

-    public TestFiler()

-    {

+    public TestFiler() {

+        String p = File.separator;

         String base = new File(Common.OUTPUTROOT).getAbsolutePath() +

-                P + "filer" + P;

+                      p + "filer" + p;

         String sClass = base + "classes";

         String sSrc = base + "src";

         File fClass = new File(sClass);

         File fSrc = new File(sSrc);

         impl = new FilerImpl(fClass, fSrc, null, true, false);

-        binFileVec = new Vector();

-        srcFileVec = new Vector();

     }

 

-    public OutputStream createBinaryFile(String typename) throws IOException

-    {

+    public OutputStream createBinaryFile(String typename) throws IOException {

         System.out.println("BFS: TypeName: " + typename);

         isCreateBinaryFile = true;

         binFileVec.add(typename);

         return impl.createBinaryFile(typename);

     }

 

-    public Writer createSourceFile(String typename) throws IOException

-    {

+    public Writer createSourceFile(String typename) throws IOException {

         System.out.println("SF: TypeName: " + typename);

         srcFileVec.add(typename);

         isCreateSourceFile = true;

         return impl.createSourceFile(typename);

     }

 

-    public boolean isCreateBinaryFile()

-    {

+    public boolean isCreateBinaryFile() {

         return isCreateBinaryFile;

     }

 

-    public boolean isCreateSourceFile()

-    {

+    public boolean isCreateSourceFile() {

         return isCreateSourceFile;

     }

 

-    public Vector getBinFileVec()

-    {

+    public List<String> getBinFileVec() {

         return binFileVec;

     }

 

-    public Vector getSrcFileVec()

-    {

+    public List<String> getSrcFileVec() {

         return srcFileVec;

     }

 }
\ No newline at end of file