You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by kk...@apache.org on 2004/12/03 01:15:23 UTC

cvs commit: xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans SchemaCodePrinter.java

kkrouse     2004/12/02 16:15:23

  Modified:    v2       build.xml
               v2/external/lib oldxbean.jar
               v2/src/typeimpl/org/apache/xmlbeans/impl/schema
                        SchemaTypeCodePrinter.java
                        SchemaTypeSystemCompiler.java
                        SchemaTypeSystemImpl.java
               v2/src/xmlcomp/org/apache/xmlbeans/impl/tool
                        SchemaCodeGenerator.java SchemaCompiler.java
               v2/src/xmlpublic/org/apache/xmlbeans SchemaCodePrinter.java
  Added:       v2/src/typeholder/org/apache/xmlbeans/impl/schema
                        TypeSystemHolder.java
  Log:
  - deprecate SchemaCodePrinter.printLoader()
  - use a compiled TypeSystemHolder class as a template to gen other
    TypeSystemHodler classes.  no need for javac when saving a type system!
  - update the boostrap jar
  
  Revision  Changes    Path
  1.92      +31 -2     xml-xmlbeans/v2/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/build.xml,v
  retrieving revision 1.91
  retrieving revision 1.92
  diff -u -r1.91 -r1.92
  --- build.xml	4 Nov 2004 05:24:40 -0000	1.91
  +++ build.xml	3 Dec 2004 00:15:19 -0000	1.92
  @@ -302,7 +302,7 @@
     <!-- previously in xbean.xml -->
   
     <target name="xbean.jar"
  -        depends="dirs, xmlpublic.classes, typestore.classes, common.classes,
  +        depends="dirs, xmlpublic.classes, typeholder.template, typestore.classes, common.classes,
                    typeimpl.classes, xmlcomp.classes,
                    newstore2.classes, saaj_api.classes,
                    marshal.classes, xpath.classes, oldxbean.jar, xsdschema.classes,
  @@ -310,6 +310,7 @@
                    piccolo.classes, tools.classes">
       <jar jarfile="build/lib/xbean.jar" index="true">
         <fileset dir="build/classes/xmlpublic"/>
  +      <fileset dir="build/classes/typeholder"/>
         <fileset dir="build/classes/typestore"/>
         <fileset dir="build/classes/common"/>
         <fileset dir="build/classes/typeimpl"/>
  @@ -415,10 +416,36 @@
   
     </target>
   
  +  <!-- typeholder target ================================================ -->
  +
  +  <property name="typeholder.name" value="org/apache/xmlbeans/impl/schema/TypeSystemHolder"/>
  +
  +  <target name="typeholder.check">
  +    <condition property="typeholder.notRequired">
  +        <uptodate property="typeholder.notRequired"
  +          targetfile="build/classes/typeholder/${typeholder.name}.template">
  +          <srcfiles dir="src/typeholder" includes="${typeholder.name}.java"/>
  +        </uptodate>
  +    </condition>
  +  </target>
  +
  +  <target name="typeholder.template" depends="typeholder.check, xmlpublic.classes" unless="typeholder.notRequired">
  +    <mkdir dir="build/classes/typeholder"/>
  +    <javac destdir="build/classes/typeholder" source="${javac.source}" target="${javac.target}" debug="off">
  +      <classpath>
  +        <pathelement location="build/classes/xmlpublic"/>
  +      </classpath>
  +      <src location="src/typeholder"/>
  +    </javac>
  +    <move
  +      file="build/classes/typeholder/${typeholder.name}.class"
  +      tofile="build/classes/typeholder/${typeholder.name}.template"/>
  +  </target>
  +
     <!-- typeimpl target ============================================== -->
   
     <target name="typeimpl.classes" depends="dirs, newstore2.classes,
  -      repackage.classes, xmlpublic.classes, typestore.classes, xsdschema.classes,
  +      repackage.classes, xmlpublic.classes, typeholder.template, typestore.classes, xsdschema.classes,
         configschema.classes, toolschema.classes, jsr173_api.jar, jam">
       <mkdir dir="build/classes/typeimpl"/>
       <javac destdir="build/classes/typeimpl" source="${javac.source}" target="${javac.target}" debug="on">
  @@ -432,6 +459,8 @@
           <pathelement location="build/classes/xmlconfig"/>
           <pathelement location="build/classes/configschema"/>
           <pathelement location="build/classes/xsdschema"/>
  +        <pathelement location="build/classes/xmlschema"/>
  +        <pathelement location="build/classes/toolschema"/>
           <pathelement location="${jam_classes_dir}"/>
           <pathelement location="build/lib/jsr173_api.jar"/>
         </classpath>
  
  
  
  1.15      +5879 -5623xml-xmlbeans/v2/external/lib/oldxbean.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-xmlbeans/v2/src/typeholder/org/apache/xmlbeans/impl/schema/TypeSystemHolder.java
  
  Index: TypeSystemHolder.java
  ===================================================================
  /*   Copyright 2004 The Apache Software Foundation
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  
  package org.apache.xmlbeans.impl.schema;
  
  import org.apache.xmlbeans.SchemaTypeSystem;
  
  /**
   * This class is the hook which causes the SchemaTypeSystem to be loaded when
   * a generated class is used.  It isn't used by the runtime directly, instead
   * this class is used by the schema compiler as a template class.  By using a
   * template class, the SchemaTypeSystemImpl can create all the binary files
   * required without needing to rely on javac.  The generated source still
   * requires a java compiler.
   *
   * @see SchemaTypeSystemImpl.save()
   */
  //
  // !!! It's important that there never NEVER be any references to this class because
  // !!! the static initializer will fail.  This class must only be used as a class file.
  // !!! If this scares you, turn back now !!!
  //
  // !!! If you modify this class, you will have to run bootstrap.
  // !!! If this scares you, turn back now !!!
  //
  public class TypeSystemHolder
  {
      private TypeSystemHolder() { }
  
      public static final SchemaTypeSystem typeSystem = loadTypeSystem();
  
      // Commenting out this line has the effect of not loading all components in a
      // typesystem upfront, but just as they are needed, which may improve
      // performance significantly
      //static { typeSystem.resolve(); }
  
      private static final SchemaTypeSystem loadTypeSystem()
      {
          try
          {
              return (SchemaTypeSystem)
                  Class.forName(
                      "org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl",
                      true, TypeSystemHolder.class.getClassLoader())
                  .getConstructor(new Class[] { Class.class })
                  .newInstance(new java.lang.Object[] { TypeSystemHolder.class });
          }
          catch (ClassNotFoundException e)
          {
              throw new RuntimeException("Cannot load org.apache.xmlbeans.impl.SchemaTypeSystemImpl: make sure xbean.jar is on the classpath.", e);
          }
          catch (Exception e)
          {
              throw new RuntimeException("Could not instantiate SchemaTypeSystemImpl (" + e.toString() + "): is the version of xbean.jar correct?", e);
          }
      }
  }
  
  
  
  1.16      +2 -23     xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
  
  Index: SchemaTypeCodePrinter.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SchemaTypeCodePrinter.java	22 Nov 2004 20:30:11 -0000	1.15
  +++ SchemaTypeCodePrinter.java	3 Dec 2004 00:15:22 -0000	1.16
  @@ -266,32 +266,11 @@
                   ((SchemaTypeSystemImpl)system).handleForType(sType) + "\");");
       }
   
  +    /** @deprecated */
       public void printLoader(Writer writer, SchemaTypeSystem system)
           throws IOException
       {
  -        _writer = writer;
  -        String shortName = shortIndexClassForSystem(system);
  -        emit("package " + system.getName() + ";");
  -        emit("");
  -        emit("public final class " + shortName);
  -        emit("{");
  -        indent();
  -        emit("private " + shortName + "() { }");
  -        emit("public static final org.apache.xmlbeans.SchemaTypeSystem typeSystem = loadTypeSystem();");
  -        // Commenting out this line has the effect of not loading all components in a
  -        // typesystem upfront, but just as they are needed, which may improve
  -        // performance significantly
  -//         emit("static { typeSystem.resolve(); }");
  -        emit("private static final org.apache.xmlbeans.SchemaTypeSystem loadTypeSystem()");
  -        emit("{");
  -        indent();
  -        emit("try { return (org.apache.xmlbeans.SchemaTypeSystem)Class.forName(\"org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl\", true, " + shortName + ".class.getClassLoader()).getConstructor(new Class[] { Class.class }).newInstance(new java.lang.Object[] { " + shortName + ".class }); }");
  -        emit("catch (ClassNotFoundException e) { throw new RuntimeException(\"Cannot load org.apache.xmlbeans.impl.SchemaTypeSystemImpl: make sure xbean.jar is on the classpath.\", e); }");
  -        emit("catch (Exception e) { throw new RuntimeException(\"Could not instantiate SchemaTypeSystemImpl (\" + e.toString() + \"): is the version of xbean.jar correct?\", e); }");
  -        outdent();
  -        emit("}");
  -        outdent();
  -        emit("}");
  +        // deprecated
       }
   
       void printInnerType(SchemaType sType, SchemaTypeSystem system) throws IOException
  
  
  
  1.11      +1 -36     xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java
  
  Index: SchemaTypeSystemCompiler.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemCompiler.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SchemaTypeSystemCompiler.java	19 Nov 2004 23:52:33 -0000	1.10
  +++ SchemaTypeSystemCompiler.java	3 Dec 2004 00:15:22 -0000	1.11
  @@ -222,7 +222,7 @@
   
           if (stsi != null && filer != null)
           {
  -            saveTypeSystem(stsi, filer, options);
  +            stsi.save(filer);
               generateTypes(stsi, filer, options);
           }
   
  @@ -394,41 +394,6 @@
           return (Schema[]) result.toArray(new Schema[result.size()]);
       }
   
  -
  -    /**
  -     * Saves a SchemaTypeSystem as .xsb files using Filer.
  -     * Please do not invoke this method directly as the signature could change unexpectedly.
  -     * Use {@link org.apache.xmlbeans.XmlBeans#compileXmlBeans(String, org.apache.xmlbeans.SchemaTypeSystem, org.apache.xmlbeans.XmlObject[], org.apache.xmlbeans.BindingConfig, org.apache.xmlbeans.SchemaTypeLoader, org.apache.xmlbeans.Filer, org.apache.xmlbeans.XmlOptions)} instead.
  -     *
  -     * @param system the SchemaTypeSystem to save
  -     * @param filer to create the binary .xsb files
  -     * @param options See {@link XmlOptions#setSchemaCodePrinter(org.apache.xmlbeans.SchemaCodePrinter)}
  -     */
  -    // KHK: generate TypeSystemHolder bytecode directly in SchemaTypeSystemImpl.save()
  -    // KHK: then remove this method and remove SchemaCodeGenerator.saveTypeSystem()
  -    public static boolean saveTypeSystem(SchemaTypeSystem system, Filer filer, XmlOptions options)
  -    {
  -        system.save(filer);
  -        options = XmlOptions.maskNull(options);
  -
  -        // Now generate the holder class
  -        String index = SchemaTypeCodePrinter.indexClassForSystem(system);
  -        try
  -        {
  -            Writer writer = filer.createSourceFile(index);
  -
  -            SchemaTypeCodePrinter.printLoader(writer, system, options);
  -
  -            writer.close();
  -        }
  -        catch (IOException e)
  -        {
  -            System.err.println("IO Error " + e);
  -            return false;
  -        }
  -
  -        return true;
  -    }
   
       /**
        * Generate java source files for a SchemaTypeSystem.
  
  
  
  1.17      +156 -0    xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
  
  Index: SchemaTypeSystemImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SchemaTypeSystemImpl.java	19 Nov 2004 23:52:33 -0000	1.16
  +++ SchemaTypeSystemImpl.java	3 Dec 2004 00:15:22 -0000	1.17
  @@ -364,6 +364,158 @@
       }
   
       /**
  +     * 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.
  +     *
  +     * 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);
  +
  +        InputStream is = null;
  +        OutputStream os = null;
  +
  +        DataInputStream in = null;
  +        DataOutputStream out = null;
  +        try
  +        {
  +            is = SchemaTypeSystemImpl.class.getResourceAsStream(HOLDER_TEMPLATE_CLASSFILE);
  +            if (is == null)
  +                throw new SchemaTypeLoaderException("couldn't find resource: " + HOLDER_TEMPLATE_CLASSFILE, _name, null, SchemaTypeLoaderException.IO_EXCEPTION);
  +            in = new DataInputStream(is);
  +
  +            os = _filer.createBinaryFile(indexClassName.replace('.', '/') + ".class");
  +            out = new DataOutputStream(os);
  +
  +            // 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();
  +                        int j = 0;
  +                        inner: for (; j < HOLDER_TEMPLATE_NAMES.length; j++)
  +                        {
  +                            if (HOLDER_TEMPLATE_NAMES[j].equals(value))
  +                            {
  +                                out.writeUTF(replace[j]);
  +                                break inner;
  +                            }
  +                        }
  +                        if (j == HOLDER_TEMPLATE_NAMES.length)
  +                            out.writeUTF(value);
  +                        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
  +            try
  +            {
  +                while (true)
  +                    out.writeByte(in.readByte());
  +            }
  +            catch (java.io.EOFException e)
  +            {
  +                // ok
  +            }
  +
  +        }
  +        catch (IOException e)
  +        {
  +            // ok
  +        }
  +        finally
  +        {
  +            if (is != null) try { is.close(); } catch (Exception e) { }
  +            if (os != null) try { os.close(); } catch (Exception e) { }
  +        }
  +    }
  +
  +    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;
  +
  +
  +    /**
  +     * 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;
  +    }
  +
  +    /**
        * Only used in the nonbootstrapped case.
        */
       private Map buildTypeRefsByClassname()
  @@ -1099,6 +1251,8 @@
   
       public void save(Filer filer)
       {
  +        if (filer == null)
  +            throw new IllegalArgumentException("filer must not be null");
           _filer = filer;
   
           _localHandles.startWriteMode();
  @@ -1117,6 +1271,8 @@
   
           saveIndex();
           savePointers();
  +
  +        saveLoader();
       }
   
       void saveTypesRecursively(SchemaType[] types)
  
  
  
  1.12      +3 -209    xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java
  
  Index: SchemaCodeGenerator.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SchemaCodeGenerator.java	19 Nov 2004 23:52:33 -0000	1.11
  +++ SchemaCodeGenerator.java	3 Dec 2004 00:15:23 -0000	1.12
  @@ -54,202 +54,16 @@
        *                   directory and then compiled to the destination dir
        * @param repackager the repackager to use when generating the holder class
        * @param options options. Can be null
  +     * @deprecated Use {@link SchemaTypeSystem.save()} instead.
        */
       public static void saveTypeSystem(SchemaTypeSystem system, File classesDir,
           File sourceFile, Repackager repackager, XmlOptions options)
           throws IOException
       {
  -        if (sourceFile == null)
  -        {
  -            // KHK: remove this branch once we can generate bytecode directly
  -
  -            system.saveToDirectory(classesDir);
  -            options = XmlOptions.maskNull(options);
  -
  -            // Now generate the holder class
  -            File source = sourceFile;
  -            File tempDir = null;
  -
  -            String filename = SchemaTypeCodePrinter.indexClassForSystem(system).replace('.',
  -                File.separatorChar) + ".java";
  -            tempDir = createTempDir();
  -            File sourcedir = IOUtil.createDir(tempDir, "src");
  -            source = new File(sourcedir, filename);
  -            source.getParentFile().mkdirs();
  -
  -            Writer writer =
  -                repackager == null
  -                ? (Writer) new FileWriter( source )
  -                : (Writer) new RepackagingWriter( source, repackager );
  -
  -            SchemaTypeCodePrinter.printLoader(writer, system, options);
  -
  -            writer.close();
  -
  -            // now compile the generated file to classesDir
  -            List srcFiles = new ArrayList(1);
  -            srcFiles.add(source);
  -            CodeGenUtil.externalCompile(srcFiles, classesDir, null, false);
  -            tryHardToDelete(tempDir);
  -        }
  -        else
  -        {
  -            Filer filer = new FilerImpl(classesDir, null, repackager, false, false);
  -            SchemaTypeSystemCompiler.saveTypeSystem(system, filer, options);
  -        }
  +        Filer filer = new FilerImpl(classesDir, null, repackager, false, false);
  +        system.save(filer);
       }
   
  -//    private static boolean genTypes(SchemaTypeSystem saver, List sourcefiles, File sourcedir, Repackager repackager, boolean verbose, XmlOptions opts, boolean incrSrcGen)
  -//    {
  -//        boolean failure = false;
  -//
  -//        List types = new ArrayList();
  -//        types.addAll(Arrays.asList(saver.globalTypes()));
  -//        types.addAll(Arrays.asList(saver.documentTypes()));
  -//        types.addAll(Arrays.asList(saver.attributeTypes()));
  -//
  -//        Set seenFiles = null;
  -//        if (incrSrcGen)
  -//        {
  -//            seenFiles = new HashSet();
  -//            if (sourcefiles != null)
  -//                for (int i = 0; i < sourcefiles.size(); i++)
  -//                    seenFiles.add(sourcefiles.get(i));
  -//        }
  -//
  -//        for (Iterator i = types.iterator(); i.hasNext(); )
  -//        {
  -//            SchemaType type = (SchemaType)i.next();
  -//            if (verbose)
  -//                System.err.println("Compiling type " + type);
  -//            if (type.isBuiltinType())
  -//                continue;
  -//            if (type.getFullJavaName() == null)
  -//                continue;
  -//
  -//            String fjn = type.getFullJavaName();
  -//
  -//            if (fjn.indexOf('$') > 0)
  -//            {
  -//                fjn =
  -//                    fjn.substring( 0, fjn.lastIndexOf( '.' ) ) + "." +
  -//                        fjn.substring( fjn.indexOf( '$' ) + 1 );
  -//            }
  -//
  -//            String filename = fjn.replace('.', File.separatorChar) + ".java";
  -//
  -//            Writer writer = null;
  -//            Reader reader = null;
  -//            boolean changed = true;
  -//
  -//            try
  -//            {
  -//                File sourcefile = new File(sourcedir, filename);
  -//                sourcefile.getParentFile().mkdirs();
  -//                if (verbose)
  -//                    System.err.println("created " + sourcefile.getAbsolutePath());
  -//                if (incrSrcGen)
  -//                    seenFiles.add(sourcefile);
  -//                if (incrSrcGen && sourcefile.exists())
  -//                {
  -//                    // Generate the file in a buffer and then compare it to the
  -//                    // file already on disk
  -//                    // Generation
  -//                    StringWriter sw = new StringWriter();
  -//                    SchemaTypeCodePrinter.printType(sw, type, opts);
  -//                    StringBuffer buffer = sw.getBuffer();
  -//                    if (repackager != null)
  -//                        buffer = repackager.repackage(buffer);
  -//                    // Comparison
  -//                    List diffs = new ArrayList();
  -//                    reader = new java.io.FileReader(sourcefile);
  -//                    String str = buffer.toString();
  -//                    Diff.readersAsText(new java.io.StringReader(str), "<generated>",
  -//                            reader, sourcefile.getName(), diffs);
  -//                    reader.close();
  -//                    // Check the list of differences
  -//                    changed = (diffs.size() > 0);
  -//                    if (changed)
  -//                    {
  -//                        // Diffs encountered, replace the file with the text from
  -//                        // the buffer
  -//                        writer = new FileWriter( sourcefile );
  -//                        writer.write(str);
  -//                        writer.close();
  -//                        sourcefiles.add(sourcefile);
  -//                    }
  -//                    else
  -//                        ; // No diffs, don't do anything
  -//                }
  -//                else
  -//                {
  -//                    writer =
  -//                        repackager == null
  -//                            ? (Writer) new FileWriter( sourcefile )
  -//                            : (Writer) new RepackagingWriter( sourcefile, repackager );
  -//
  -//
  -//                    SchemaTypeCodePrinter.printType(writer, type, opts);
  -//
  -//                    writer.close();
  -//
  -//                    sourcefiles.add(sourcefile);
  -//                }
  -//            }
  -//            catch (IOException e)
  -//            {
  -//                System.err.println("IO Error " + e);
  -//                failure = true;
  -//            }
  -//            finally {
  -//                try {
  -//                    if (writer != null) writer.close();
  -//                    if (reader != null) reader.close();
  -//                } catch (IOException e) {}
  -//            }
  -//
  -//            try
  -//            {
  -//                // Generate Implementation class
  -//                filename = type.getFullJavaImplName().replace('.', File.separatorChar) + ".java";
  -//                File implFile = new File(sourcedir,  filename);
  -//                if (verbose)
  -//                    System.err.println("created " + implFile.getAbsolutePath());
  -//                implFile.getParentFile().mkdirs();
  -//
  -//                if (incrSrcGen)
  -//                    seenFiles.add(implFile);
  -//                // If the interface did not change, the implementation shouldn't either
  -//                if (changed)
  -//                {
  -//                writer =
  -//                    repackager == null
  -//                        ? (Writer) new FileWriter( implFile )
  -//                        : (Writer) new RepackagingWriter( implFile, repackager );
  -//
  -//                SchemaTypeCodePrinter.printTypeImpl(writer, type, opts);
  -//
  -//                writer.close();
  -//
  -//                sourcefiles.add(implFile);
  -//                }
  -//            }
  -//            catch (IOException e)
  -//            {
  -//                System.err.println("IO Error " + e);
  -//                failure = true;
  -//            }
  -//            finally {
  -//                try { if (writer != null) writer.close(); } catch (IOException e) {}
  -//            }
  -//        }
  -//
  -//        if (incrSrcGen)
  -//            deleteObsoleteFiles(sourcedir, sourcedir, seenFiles);
  -//
  -//        return failure;
  -//    }
  -
       private static void deleteObsoleteFiles(File rootDir, File srcDir, Set seenFiles)
       {
           if (!(rootDir.isDirectory() && srcDir.isDirectory()))
  @@ -417,24 +231,4 @@
           }
       }
   
  -    static class RepackagingWriter extends StringWriter
  -    {
  -        public RepackagingWriter ( File file, Repackager repackager )
  -        {
  -            _file = file;
  -            _repackager = repackager;
  -        }
  -
  -        public void close ( ) throws IOException
  -        {
  -            super.close();
  -
  -            FileWriter fw = new FileWriter( _file );
  -            fw.write( _repackager.repackage( getBuffer() ).toString() );
  -            fw.close();
  -        }
  -
  -        private File _file;
  -        private Repackager _repackager;
  -    }
   }
  
  
  
  1.20      +1 -1      xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
  
  Index: SchemaCompiler.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- SchemaCompiler.java	19 Nov 2004 23:52:33 -0000	1.19
  +++ SchemaCompiler.java	3 Dec 2004 00:15:23 -0000	1.20
  @@ -1030,7 +1030,7 @@
                   options.setSchemaCodePrinter(codePrinter);
   
               // save .xsb files
  -            result &= SchemaTypeSystemCompiler.saveTypeSystem(system, filer, options);
  +            system.save(filer);
   
               // gen source files
               result &= SchemaTypeSystemCompiler.generateTypes(system, filer, options);
  
  
  
  1.2       +3 -0      xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/SchemaCodePrinter.java
  
  Index: SchemaCodePrinter.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/SchemaCodePrinter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SchemaCodePrinter.java	18 Mar 2004 23:28:00 -0000	1.1
  +++ SchemaCodePrinter.java	3 Dec 2004 00:15:23 -0000	1.2
  @@ -31,6 +31,9 @@
       public void printType(Writer writer, SchemaType sType)
           throws IOException;
       
  +    /**
  +     * @deprecated Obsoleted by functionality in {@link SchemaTypeSystem.save()}
  +     */
       public void printLoader(Writer writer, SchemaTypeSystem system)
           throws IOException;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: commits-help@xmlbeans.apache.org