You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by jk...@locus.apache.org on 2000/11/09 19:30:31 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/processor CompiledStylesheetBundle.java CompilingStylesheetHandler.java StylesheetHandler.java

jkesselm    00/11/09 10:30:31

  Modified:    java/src/org/apache/xalan/processor
                        CompiledStylesheetBundle.java
                        CompilingStylesheetHandler.java
                        StylesheetHandler.java
  Log:
  Resynchronizing with trax changes
  
  Revision  Changes    Path
  1.9       +15 -13    xml-xalan/java/src/org/apache/xalan/processor/CompiledStylesheetBundle.java
  
  Index: CompiledStylesheetBundle.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/processor/CompiledStylesheetBundle.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- CompiledStylesheetBundle.java	2000/11/03 23:28:02	1.8
  +++ CompiledStylesheetBundle.java	2000/11/09 18:30:29	1.9
  @@ -206,18 +206,20 @@
   				// Asking the classloader to getResourceAsStream is our
   				// "best bet" for any caching that may have occurred, and 
   				// is the standard solution recommended by Sun.
  -				//
  -				// PROBLEM: Microsoft misimplemented that. Fetching the
  -				// resource as c.getClassName returns a null pointer;
  -				// fetching it as a file name throws IllegalAgumentException
  -				// ("Cannot load class files via getSystemResource APIs.")
  -				// So for VJ++ compatability, I'm forced to us a workaround.
  -				
  -				// Where to copy the classfile from. 
  -				String source=
  -					packageNameToDirectory(packagename,outdir,File.separatorChar)
  -					+shortname+".class";
  -				java.io.FileInputStream fis=new java.io.FileInputStream(source);
  +				// PROBLEM: Java 1.1 security forbids this and throws an
  +				// exception. For compatability, I'm forced to use a fallback;
  +				// luckily, we _do_ know where we did our compilation.
  +				java.io.InputStream fis;
  +				if(false) // Works only >= Java 1.2
  +					fis=c.getClass().getResourceAsStream(sink);	
  +				else
  +				{				
  +					// Where to copy the classfile from. 
  +					String source=
  +						packageNameToDirectory(packagename,outdir,File.separatorChar)
  +						+shortname+".class";
  +					fis=new java.io.FileInputStream(source);
  +				}
   
   				// Need to count how many bytes are transferred; the ZipEntry
   				// does _NOT_ set itself automatically.
  @@ -418,7 +420,7 @@
   			return c;
   		}
   		
  -		/** Internal subroutine: Givne the name of a class (or of a resource),
  +		/** Internal subroutine: Given the name of a class (or of a resource),
   		 * access the zipfile and retrieve the contents thereof as a byte array.
   		 * TODO: Implement the "leading / means already in filename syntax" trick?
   		 * Or is that irrelevant?
  
  
  
  1.15      +17 -24    xml-xalan/java/src/org/apache/xalan/processor/CompilingStylesheetHandler.java
  
  Index: CompilingStylesheetHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/processor/CompilingStylesheetHandler.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- CompilingStylesheetHandler.java	2000/11/03 23:28:02	1.14
  +++ CompilingStylesheetHandler.java	2000/11/09 18:30:30	1.15
  @@ -92,8 +92,7 @@
   import org.xml.sax.SAXException;
   import org.xml.sax.SAXParseException;
   
  -// Java Compiler support. *****
  -// TODO: Merge the Microsoft VJ++ workarounds in this file into that one.
  +// Java Compiler support.
   import org.apache.xalan.utils.synthetic.JavaUtils;
   
   /**
  @@ -121,12 +120,6 @@
       super(processor);
     }
     
  -  // TODO: Should we override startElement to redirect ProcessorStylesheet?
  -  // That would let us create a version that had a specialized serializer
  -  // ... if that'd be the best way to handle the "bundling" of the
  -  // generated classes into a .jar/.zip.
  -
  -  
     /**
      * Receive notification of the end of the document.
      * Run standard cleanup of the internal representation,
  @@ -144,11 +137,11 @@
   	Vector compiledTemplates=new Vector();
   	 
       Stylesheet current=getStylesheet();
  -    if(current==getStylesheetRoot())
  +    if(isStylesheetParsingComplete())
       {    
   		// Begin compiling. Loop modeled on StylesheetRoot.recompose()
           // calling recomposeTemplates().
  -        StylesheetRoot root=(StylesheetRoot)current;
  +        StylesheetRoot root=(StylesheetRoot)getStylesheetRoot();
           
           // loop from recompose()
           int nImports = root.getGlobalImportCount();
  @@ -193,11 +186,7 @@
           root.recomposeTemplates(true); 
   		
   		// TODO: Should bundling occur elsewhere?
  -boolean runSerializer=true; // TODO: DEBUG HOOK, CLEAN UP EVENTUALLY
  -if(runSerializer)
  -{	
   		CompiledStylesheetBundle.createBundle(root,compiledTemplates);
  -}
       }
     }
     
  @@ -402,7 +391,7 @@
           compileElemLiteralResult((ElemLiteralResult)kid,body,interpretVector);
   		break;
   
  -		// TODO: ***** Redirection of attr value not working yet.	
  +		// TODO: ***** Redirection of attr value not working yet.
   	//case Constants.ELEMNAME_ATTRIBUTE:
       //    compileElemAttribute((ElemAttribute)kid,body,interpretVector);
   	//    break;
  @@ -829,7 +818,7 @@
           +"// so all the variables can be popped at once when we're done.\n"
           +"org.apache.xpath.VariableStack "+varstackName+" = transformer.getXPathContext().getVarStack();\n"
           +varstackName+".pushElemFrame();\n"
  -        +"SourceLocator "+savedLocatorName+" = xctxt.getSAXLocator();\n"
  +        +"javax.xml.transform.SourceLocator "+savedLocatorName+" = xctxt.getSAXLocator();\n"
           );
   
         body.append("try {\n\n");
  @@ -916,16 +905,20 @@
       }
   
   	// Try to pick up the same classpath we're executing under. That
  -	// ought to include everything in Xalan and the parser...
  +	// ought to include everything in Xalan and the standard libraries.
       String classpath=System.getProperty ("java.class.path");
   	
  -	// TODO: These should probably be exposed as params or properties.
  -    boolean debug=true;
  -    boolean generateDebug=true;
  +	// If compiling with the -g switch (Java debugging), we should retain 
  +	// the Java source code to support debugging into the synthesized class.
  +	// Some additional diagnostics are also turned on as a side effect.
  +	// TODO: Find a better place to put the debugging control.
  +	String javac_options=
  +			System.getProperty("org.apache.xalan.processor.CompilingStylesheetHandler.options","");
  +	boolean debug=(javac_options.indexOf("-g")>=0);
   
   	// Run the compilation. Encapsulates the fallbacks and
   	// workarounds needed to achieve this in various environments.
  -	JavaUtils.setDebug(generateDebug);
  +	JavaUtils.setDebug(debug);
       boolean compileOK=
   		JavaUtils.JDKcompile(filename,classpath);
   	
  @@ -943,13 +936,13 @@
           }
           catch(ClassNotFoundException e)
           {
  -            System.err.println("ERR: Class load failed for "+
  +            System.err.println("ERR: synthesized Template class load failed for "+
                   tClass.getName());
               e.printStackTrace();
           }
           catch(org.apache.xalan.utils.synthetic.SynthesisException e)
           {
  -            System.err.println("ERR: Synthetic class realization failed for "+
  +            System.err.println("ERR: synthesized Template class realization failed for "+
                   tClass.getName());
               e.printStackTrace();
           }
  @@ -957,7 +950,7 @@
       else
       {
           if(debug)
  -            System.err.println("\tCompilation failed; retaining .java file");
  +            System.err.println("\tTemplate compilation failed; retaining .java file");
           // This should probably be an exception instead
           System.err.println("ERR: Java compilation failed for "+
                   filename);
  
  
  
  1.19      +24 -0     xml-xalan/java/src/org/apache/xalan/processor/StylesheetHandler.java
  
  Index: StylesheetHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/processor/StylesheetHandler.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- StylesheetHandler.java	2000/11/09 00:00:27	1.18
  +++ StylesheetHandler.java	2000/11/09 18:30:30	1.19
  @@ -461,6 +461,23 @@
       m_stylesheetLevel++;
     }
   
  +  // support for isParsingComplete
  +  private boolean m_parsingComplete=false; 
  +
  +  
  +  /** Test whether the _last_ endDocument() has been processed.
  +   * This is needed as guidance for stylesheet optimization
  +   * and compilation engines, which generally don't want to start
  +   * until all included and imported stylesheets have been fully
  +   * parsed.
  +   * 
  +   * @return true iff the complete stylesheet tree has been built.
  +   */
  +  public boolean isStylesheetParsingComplete()
  +  {
  +	  return m_parsingComplete;
  +  }
  +
     /**
      * Receive notification of the end of the document.
      *
  @@ -491,6 +508,13 @@
         elemProcessor.startNonText(this);
   
       m_stylesheetLevel--;
  +	
  +	// WARNING: This test works only as long as stylesheets are parsed
  +	// more or less recursively. If we switch to an iterative "work-list"
  +	// model, this will become true prematurely. In that case, 
  +	// isStylesheetParsingComplete() will have to be adjusted to be aware
  +	// of the worklist.
  +	m_parsingComplete=(m_stylesheetLevel<0);
     }
   
     /**