tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lu...@apache.org
Subject cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler Compiler.java
Date Tue, 27 Apr 2004 18:14:13 GMT
luehe       2004/04/27 11:14:13

  Modified:    jasper2/src/share/org/apache/jasper/compiler Compiler.java
  Log:
  Fixed Bugzilla 28603 ("JspC Ant task does not detect errors on a
  second compile"):
  
  Remove empty .java file (that was generated by "new
  FileOutputStream()") if parser/validator/generator throws exception.
  
  Also removed tabs.
  
  Revision  Changes    Path
  1.81      +109 -86   jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
  retrieving revision 1.80
  retrieving revision 1.81
  diff -u -r1.80 -r1.81
  --- Compiler.java	20 Apr 2004 20:05:19 -0000	1.80
  +++ Compiler.java	27 Apr 2004 18:14:13 -0000	1.81
  @@ -146,105 +146,129 @@
        * @return a smap for the current JSP page, if one is generated,
        *         null otherwise
        */
  -    private String[] generateJava()
  -        throws Exception
  -    {
  -	String[] smapStr = null;
  +    private String[] generateJava() throws Exception {
  +        
  +        String[] smapStr = null;
   
           long t1=System.currentTimeMillis();
   
  -	// Setup page info area
  -	pageInfo = new PageInfo(new BeanRepository(ctxt.getClassLoader(),
  -						   errDispatcher));
  -
  -	JspConfig jspConfig = options.getJspConfig();
  -	JspConfig.JspProperty jspProperty =
  -			jspConfig.findJspProperty(ctxt.getJspFile());
  +        // Setup page info area
  +        pageInfo = new PageInfo(new BeanRepository(ctxt.getClassLoader(),
  +                                                   errDispatcher));
  +
  +        JspConfig jspConfig = options.getJspConfig();
  +        JspConfig.JspProperty jspProperty =
  +            jspConfig.findJspProperty(ctxt.getJspFile());
   
           /*
            * If the current uri is matched by a pattern specified in
            * a jsp-property-group in web.xml, initialize pageInfo with
            * those properties.
            */
  -        pageInfo.setELIgnored(JspUtil.booleanValue(jspProperty.isELIgnored()));
  -        pageInfo.setScriptingInvalid(JspUtil.booleanValue(jspProperty.isScriptingInvalid()));
  +        pageInfo.setELIgnored(JspUtil.booleanValue(
  +                                            jspProperty.isELIgnored()));
  +        pageInfo.setScriptingInvalid(JspUtil.booleanValue(
  +                                            jspProperty.isScriptingInvalid()));
           if (jspProperty.getIncludePrelude() != null) {
               pageInfo.setIncludePrelude(jspProperty.getIncludePrelude());
           }
  -	if (jspProperty.getIncludeCoda() != null) {
  +        if (jspProperty.getIncludeCoda() != null) {
   	    pageInfo.setIncludeCoda(jspProperty.getIncludeCoda());
  -	}
  +        }
  +
           String javaFileName = ctxt.getServletJavaFileName();
  +        ServletWriter writer = null;
   
  -        // Setup the ServletWriter
  -        String javaEncoding = ctxt.getOptions().getJavaEncoding();
  -	OutputStreamWriter osw = null; 
  -	try {
  -	    osw = new OutputStreamWriter(new FileOutputStream(javaFileName),
  -					 javaEncoding);
  -	} catch (UnsupportedEncodingException ex) {
  -            errDispatcher.jspError("jsp.error.needAlternateJavaEncoding", javaEncoding);
  -	}
  -
  -	ServletWriter writer = new ServletWriter(new PrintWriter(osw));
  -        ctxt.setWriter(writer);
  -
  -        // Reset the temporary variable counter for the generator.
  -        JspUtil.resetTemporaryVariableName();
  -
  -	// Parse the file
  -	ParserController parserCtl = new ParserController(ctxt, this);
  -	pageNodes = parserCtl.parse(ctxt.getJspFile());
  -
  -	if (ctxt.isPrototypeMode()) {
  -	    // generate prototype .java file for the tag file
  -	    Generator.generate(writer, this, pageNodes);
  -            writer.close();
  -	    return null;
  -	}
  +        try {
  +            // Setup the ServletWriter
  +            String javaEncoding = ctxt.getOptions().getJavaEncoding();
  +            OutputStreamWriter osw = null; 
  +
  +            try {
  +                osw = new OutputStreamWriter(
  +                            new FileOutputStream(javaFileName), javaEncoding);
  +            } catch (UnsupportedEncodingException ex) {
  +                errDispatcher.jspError("jsp.error.needAlternateJavaEncoding",
  +                                       javaEncoding);
  +            }
  +
  +            writer = new ServletWriter(new PrintWriter(osw));
  +            ctxt.setWriter(writer);
  +
  +            // Reset the temporary variable counter for the generator.
  +            JspUtil.resetTemporaryVariableName();
  +
  +	    // Parse the file
  +	    ParserController parserCtl = new ParserController(ctxt, this);
  +	    pageNodes = parserCtl.parse(ctxt.getJspFile());
  +
  +	    if (ctxt.isPrototypeMode()) {
  +                // generate prototype .java file for the tag file
  +                Generator.generate(writer, this, pageNodes);
  +                writer.close();
  +                writer = null;
  +                return null;
  +            }
  +
  +            // Validate and process attributes
  +            Validator.validate(this, pageNodes);
  +
  +            long t2=System.currentTimeMillis();
  +            // Dump out the page (for debugging)
  +            // Dumper.dump(pageNodes);
  +
  +            // Collect page info
  +            Collector.collect(this, pageNodes);
  +
  +            // Compile (if necessary) and load the tag files referenced in
  +            // this compilation unit.
  +            tfp = new TagFileProcessor();
  +            tfp.loadTagFiles(this, pageNodes);
   
  -	// Validate and process attributes
  -	Validator.validate(this, pageNodes);
  +            long t3=System.currentTimeMillis();
  +        
  +            // Determine which custom tag needs to declare which scripting vars
  +            ScriptingVariabler.set(pageNodes, errDispatcher);
   
  -        long t2=System.currentTimeMillis();
  -	// Dump out the page (for debugging)
  -	// Dumper.dump(pageNodes);
  +            // Optimizations by Tag Plugins
  +            TagPluginManager tagPluginManager = options.getTagPluginManager();
  +            tagPluginManager.apply(pageNodes, errDispatcher, pageInfo);
   
  -	// Collect page info
  -	Collector.collect(this, pageNodes);
  +            // Optimization: concatenate contiguous template texts.
  +            TextOptimizer.concatenate(this, pageNodes);
   
  -	// Compile (if necessary) and load the tag files referenced in
  -	// this compilation unit.
  -	tfp = new TagFileProcessor();
  -	tfp.loadTagFiles(this, pageNodes);
  +            // Generate static function mapper codes.
  +            ELFunctionMapper.map(this, pageNodes);
   
  -        long t3=System.currentTimeMillis();
  -        
  -	// Determine which custom tag needs to declare which scripting vars
  -	ScriptingVariabler.set(pageNodes, errDispatcher);
  +            // generate servlet .java file
  +            Generator.generate(writer, this, pageNodes);
  +            writer.close();
  +            writer = null;
   
  -	// Optimizations by Tag Plugins
  -	TagPluginManager tagPluginManager = options.getTagPluginManager();
  -	tagPluginManager.apply(pageNodes, errDispatcher, pageInfo);
  -
  -        // Optimization: concatenate contiguous template texts.
  -        TextOptimizer.concatenate(this, pageNodes);
  -
  -	// Generate static function mapper codes.
  -	ELFunctionMapper.map(this, pageNodes);
  -
  -	// generate servlet .java file
  -	Generator.generate(writer, this, pageNodes);
  -        writer.close();
  -        // The writer is only used during the compile, dereference
  -        // it in the JspCompilationContext when done to allow it
  -        // to be GC'd and save memory.
  -        ctxt.setWriter(null);
  -
  -        long t4=System.currentTimeMillis();
  -        if( t4-t1 > 500 ) {
  -            log.debug("Generated "+ javaFileName + " total=" +
  -                      (t4-t1) + " generate=" + ( t4-t3 ) + " validate=" + ( t2-t1 ));
  +            // The writer is only used during the compile, dereference
  +            // it in the JspCompilationContext when done to allow it
  +            // to be GC'd and save memory.
  +            ctxt.setWriter(null);
  +
  +            long t4=System.currentTimeMillis();
  +            if( t4-t1 > 500 ) {
  +                log.debug("Generated "+ javaFileName + " total=" +
  +                          (t4-t1) + " generate=" + ( t4-t3 ) + " validate=" +
  +                          ( t2-t1 ));
  +            }
  +
  +        } catch (Exception e) {
  +            // Remove the generated .java file
  +            new File(javaFileName).delete();            
  +            throw e;
  +        } finally {
  +            if (writer != null) {
  +                try {
  +                    writer.close();
  +                } catch (Exception e) {
  +                    // do nothing
  +                }
  +            }
           }
           
           // JSR45 Support
  @@ -252,15 +276,14 @@
               smapStr = SmapUtil.generateSmap(ctxt, pageNodes);
           }
   
  -	// If any proto type .java and .class files was generated,
  -	// the prototype .java may have been replaced by the current
  -	// compilation (if the tag file is self referencing), but the
  -	// .class file need to be removed, to make sure that javac would
  -	// generate .class again from the new .java file just generated.
  -
  -	tfp.removeProtoTypeFiles(ctxt.getClassFileName());
  +        // If any proto type .java and .class files was generated,
  +        // the prototype .java may have been replaced by the current
  +        // compilation (if the tag file is self referencing), but the
  +        // .class file need to be removed, to make sure that javac would
  +        // generate .class again from the new .java file just generated.
  +        tfp.removeProtoTypeFiles(ctxt.getClassFileName());
   
  -	return smapStr;
  +        return smapStr;
       }
   
       /** 
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Mime
View raw message