Does this also include the changes made in trunk r933342?

URL: http://svn.apache.org/viewvc?rev=933342&view=rev
Log:
OPENJPA-1628,OPENJPA-1187,OPENJPA-1622: Use javac's -s option to control
output rather than extraneous -Aout option


-Donald


On 4/15/10 2:33 PM, [email protected] wrote:
> Author: ppoddar
> Date: Thu Apr 15 18:33:24 2010
> New Revision: 934511
> 
> URL: http://svn.apache.org/viewvc?rev=934511&view=rev
> Log:
> OPENJPA-1628: Usability changes. Merged from trunk revision 934507
> 
> Removed:
>     openjpa/branches/2.0.x/scripts/mmg.options
> Modified:
>     
> openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
>     
> openjpa/branches/2.0.x/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
>     openjpa/branches/2.0.x/scripts/mmg.bat
> 
> Modified: 
> openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
> URL: 
> http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java?rev=934511&r1=934510&r2=934511&view=diff
> ==============================================================================
> --- 
> openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
>  (original)
> +++ 
> openjpa/branches/2.0.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
>  Thu Apr 15 18:33:24 2010
> @@ -20,14 +20,10 @@ package org.apache.openjpa.persistence.m
>  
>  import static javax.lang.model.SourceVersion.RELEASE_6;
>  
> -import java.io.File;
>  import java.io.IOException;
> -import java.io.OutputStream;
>  import java.io.PrintWriter;
> -import java.net.URI;
>  import java.net.URL;
>  import java.util.Arrays;
> -import java.util.Collections;
>  import java.util.Date;
>  import java.util.List;
>  import java.util.Map;
> @@ -47,11 +43,7 @@ import javax.lang.model.type.TypeMirror;
>  import javax.lang.model.util.Elements;
>  import javax.persistence.metamodel.StaticMetamodel;
>  import javax.tools.Diagnostic;
> -import javax.tools.JavaCompiler;
>  import javax.tools.JavaFileObject;
> -import javax.tools.StandardJavaFileManager;
> -import javax.tools.StandardLocation;
> -import javax.tools.ToolProvider;
>  
>  import org.apache.openjpa.lib.util.Localizer;
>  import org.apache.openjpa.meta.MetaDataFactory;
> @@ -66,39 +58,29 @@ import org.apache.openjpa.persistence.ut
>   * This tool is invoked during compilation for JDK6 compiler if 
>   * <UL>
>   * <LI>OpenJPA and JPA libraries are available in the compiler classpath
> - * and <LI>Annotation Processor option <code>-Aopenjpa.generate=true</code> 
> is specified.
> + * and <LI>Annotation Processor option <code>-Aopenjpa.metamodel=true</code> 
> is specified.
>   * </UL>
>   * <br>
>   * <B>Usage</B><br>
> - * <code>$ javac -classpath path/to/openjpa-all.jar -Aopenjpa.generated=true 
> mypackage/MyEntity.java</code><br>
> + * <code>$ javac -classpath path/to/openjpa-all.jar -Aopenjpa.metamodel=true 
> mypackage/MyEntity.java</code><br>
>   * will generate source code for canonical meta-model class 
> <code>mypackage.MyEntity_.java</code>.
> + * The source code is generated relative to the directory specified in 
> <code>-s</code> option
> + * of <code>javac</code> compiler and defaulted to the current directory.
>   * <p>
> - * The Annotation Processor also recognizes the following options (none of 
> them are mandatory).
> - * Each of the following option key can also be prefixed with 
> <code>openjpa.</code> to distinguish if multiple 
> - * annotation processors are active during compilation:<br>
> + * The Annotation Processor also recognizes the following options (none of 
> them are mandatory):<br>
>   * <TABLE border="1">
> - * <TR><TD>-Alog={log level}<TD>The logging level. Default is 
> <code>WARN</code>. Permissible values are 
> + * <TR><TD>-Aopenjpa.log={log level}<TD>The logging level. Default is 
> <code>WARN</code>. Permissible values are 
>   *     <code>TRACE</code>, <code>INFO</code>, <code>WARN</code> or <code> 
> ERROR</code>.
> - * <TR><TD>-Asource={n}         <TD>Java source version of the generated 
> code. Default is <code>6</code>.
> - * <TR><TD>-Anaming={class name}        <TD>fully-qualified name of a class 
> implementing 
> + * <TR><TD>-Aopenjpa.source={n}          <TD>Java source version of the 
> generated code. Default is <code>6</code>.
> + * <TR><TD>-Aopenjpa.naming={class name} <TD>fully-qualified name of a class 
> implementing 
>   * <code>org.apache.openjpa.meta.MetaDataFactory</code> that determines
>   * the name of a meta-class given the name of the original persistent Java 
> entity class. Defaults to
>   * <code>org.apache.openjpa.persistence.PersistenceMetaDataFactory</code> 
> which appends a underscore character
>   * (<code>_</code>) to the original Java class name. 
> - * <TR><TD>-Aheader={url}           <TD>
> + * <TR><TD>-Aopenjpa.header={url}        <TD>
>   * A url whose content will appear as comment header to the generated 
> file(s). Recognizes special value
>   * <code>ASL</code> for Apache Source License header as comment. By default 
> adds a OpenJPA proprietary   
>   * text.
> - * <TR><TD>-Aout={dir}                      <TD>
> - * A directory in the local file system. The generated files will be written 
> <em>relative</em> to this directory
> - * according to the package structure i.e. if <code>dir</code> is specified 
> as <code>/myproject/generated-src</code>
> - * then the generated source code will be written to 
> <code>/myproject/generated-src/mypackage/MyEntity_.java</code>.
> - * If this option is not specified, then an attempt will be made to write 
> the generated source file in the same
> - * directory of the source code of original class 
> <code>mypackage.MyEntity</code>. The source code location for 
> - * <code>mypackage.MyEntity</code> can only be determined for Sun JDK6 and 
> <code>tools.jar</code> being available 
> - * to the compiler classpath. If the source code location for the original 
> class can not be determined, and the 
> - * option is not specified, then the generated source code is written 
> relative to the current directory according 
> - * to the package structure.  
>   * </TABLE>
>   * <br>
>   *
> @@ -111,19 +93,16 @@ import org.apache.openjpa.persistence.ut
>      "javax.persistence.Entity",
>      "javax.persistence.Embeddable", 
>      "javax.persistence.MappedSuperclass" })
> -...@supportedoptions({ "openjpa.log", "log", 
> -                     "openjpa.out", "out", 
> -                     "openjpa.source", "source",
> -                     "openjpa.naming", "naming",
> -                     "openjpa.header", "header",
> -                     "openjpa.generate"
> +...@supportedoptions({ "openjpa.log", 
> +                    "openjpa.source",
> +                    "openjpa.naming",
> +                    "openjpa.header",
> +                    "openjpa.metamodel"
>                    })
>  @SupportedSourceVersion(RELEASE_6)
>  
>  public class AnnotationProcessor6 extends AbstractProcessor {
>      private SourceAnnotationHandler handler;
> -    private StandardJavaFileManager fileManager;
> -    private boolean isUserSpecifiedOutputLocation;
>      private MetaDataFactory factory;
>      private int generatedSourceVersion = 6;
>      private CompileTimeLogger logger;
> @@ -206,13 +185,12 @@ public class AnnotationProcessor6 extend
>      @Override
>      public synchronized void init(ProcessingEnvironment processingEnv) {
>          super.init(processingEnv);
> -        active = "true".equalsIgnoreCase(getOptionValue("openjpa.generate"));
> +        active = 
> "true".equalsIgnoreCase(getOptionValue("openjpa.metamodel"));
>          if (!active)
>              return;
>          processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, 
> _loc.get("mmg-tool-banner").toString());
> -        logger = new CompileTimeLogger(processingEnv, 
> getOptionValue("openjpa.log", "log"));
> +        logger = new CompileTimeLogger(processingEnv, 
> getOptionValue("openjpa.log"));
>          setSourceVersion();
> -        setFileManager();
>          setNamingPolicy();
>          setHeader();
>          handler = new SourceAnnotationHandler(processingEnv, logger);
> @@ -252,8 +230,7 @@ public class AnnotationProcessor6 extend
>          annotate(source, originalClass);
>          TypeElement supCls = handler.getPersistentSupertype(e);
>          if (supCls != null) {
> -            String superName = factory.getMetaModelClassName(
> -                    supCls.toString());
> +            String superName = 
> factory.getMetaModelClassName(supCls.toString());
>              source.getTopLevelClass().setSuper(superName);
>          }
>          try {
> @@ -327,12 +304,12 @@ public class AnnotationProcessor6 extend
>      }
>      
>      /**
> -     * Parse annotation processor option <code>-Asource=n</code> to detect
> +     * Parse annotation processor option <code>-Aopenjpa.source=n</code> to 
> detect
>       * the source version for the generated classes. 
>       * n must be a integer. Default or wrong specification returns 6.
>       */
>      private void setSourceVersion() {
> -        String version = getOptionValue("openjpa.source", "source");
> +        String version = getOptionValue("openjpa.source");
>          if (version != null) {
>              try {
>                  generatedSourceVersion = Integer.parseInt(version);
> @@ -346,7 +323,7 @@ public class AnnotationProcessor6 extend
>      }
>      
>      private void setNamingPolicy() {
> -        String policy = getOptionValue("openjpa.naming","naming");
> +        String policy = getOptionValue("openjpa.naming");
>          if (policy != null) {
>              try {
>                  factory = 
> (MetaDataFactory)Class.forName(policy).newInstance();
> @@ -360,7 +337,7 @@ public class AnnotationProcessor6 extend
>      }
>      
>      private void setHeader() {
> -        String headerOption = getOptionValue("openjpa.header", "header");
> +        String headerOption = getOptionValue("openjpa.header");
>          if (headerOption == null) {
>              return;
>          }
> @@ -376,54 +353,15 @@ public class AnnotationProcessor6 extend
>          }
>      }
>      
> -    private void setFileManager() {
> -        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
> -        fileManager = compiler.getStandardFileManager(null, null, null);
> -        String outDir = getOptionValue("openjpa.out", "out");
> -        if (outDir != null)
> -           isUserSpecifiedOutputLocation = setSourceOutputDirectory(new 
> File(outDir));
> -    }
> -
>      /**
>       * Creates a file where source code of the given metaClass will be 
> written.
>       * 
>       */
>      private PrintWriter createSourceFile(String originalClass, String 
> metaClass, TypeElement e) 
>          throws IOException {
> -        if (!isUserSpecifiedOutputLocation) {
> -            
> setSourceOutputDirectory(OutputPath.getAbsoluteDirectory(processingEnv, e));
> -        }
> -        JavaFileObject javaFile = 
> fileManager.getJavaFileForOutput(StandardLocation.SOURCE_OUTPUT, 
> -            metaClass, JavaFileObject.Kind.SOURCE, 
> -            null); // do not use sibling hint because of indeterminable 
> behavior across JDK 
> -        logger.info(_loc.get("mmg-process", javaFile.toUri()));
> -        OutputStream out = javaFile.openOutputStream();
> -        PrintWriter writer = new PrintWriter(out);
> -        return writer;
> -    }
> -    
> -    /**
> -     * Sets the output directory for generated source files.
> -     * Tries to create the directory structure if does not exist.
> -     * 
> -     * @return true if the output has been set successfully.
> -     */
> -    boolean setSourceOutputDirectory(File outDir) {
> -        if (outDir == null)
> -            return false;
> -        if (!outDir.exists()) {
> -            if (!outDir.mkdirs()) {
> -                logger.warn(_loc.get("mmg-bad-out", outDir, 
> StandardLocation.SOURCE_OUTPUT));
> -                return false;
> -            }
> -        }
> -        try {
> -            fileManager.setLocation(StandardLocation.SOURCE_OUTPUT, 
> Collections.singleton(outDir));
> -            return true;
> -        } catch (IOException e) {
> -            logger.warn(_loc.get("mmg-bad-out", outDir, 
> StandardLocation.SOURCE_OUTPUT));
> -            return false;
> -        }
> +        JavaFileObject javaFile = 
> processingEnv.getFiler().createSourceFile(metaClass, e);
> +        logger.info(_loc.get("mmg-process", javaFile.toUri().normalize()));
> +        return new PrintWriter(javaFile.openWriter());
>      }
>      
>      /**
> @@ -437,97 +375,4 @@ public class AnnotationProcessor6 extend
>          }
>          return null;
>      }
> -    
> -    /**
> -     * An utility class to determine the source file corresponding to a 
> {...@link TypeElement}.
> -     * The utility uses Sun JDK internal API (com.sun.tools.*) and hence 
> works reflectively
> -     * to avoid compile-time dependency.
> -     *   
> -     * @author Pinaki Poddar
> -     *
> -     */
> -    public static class OutputPath {
> -        private static Class<?> trees = null;
> -        static {
> -            try {
> -                trees = Class.forName("com.sun.source.util.Trees");
> -            } catch (Throwable t) {
> -                
> -            }
> -        }
> -        
> -        /**
> -         * Gets the directory relative to the Java source file corresponding 
> to the TypeElement.
> -         * 
> -         * @return null if the com.sun.source.util.* package is not 
> available or the given TypeElement
> -         * does not correspond to a compilation unit associated to a source 
> file.
> -         */
> -        public static File getAbsoluteDirectory(ProcessingEnvironment env, 
> TypeElement e) {
> -            if (trees == null)
> -                return null;
> -            try {
> -                // Trees root = Trees.instance(env);
> -                Object root = trees.getMethod("instance", new 
> Class[]{ProcessingEnvironment.class})
> -                    .invoke(null, env);
> -                
> -                // TreePath path = root.getPath(e);
> -                Object path = root.getClass().getMethod("getPath", new 
> Class[]{Element.class})
> -                    .invoke(root, e);
> -                
> -                // CompilationUnitTree unit = path.getCompilationUnit();
> -                Object unit = 
> path.getClass().getMethod("getCompilationUnit", (Class[])null)
> -                    .invoke(path, (Object[])null);
> -                
> -                // JavaFileObject f = unit.getSourceFile();
> -                JavaFileObject f = 
> (JavaFileObject)unit.getClass().getMethod("getSourceFile", (Class[])null)
> -                    .invoke(unit, (Object[])null);
> -                
> -                URI uri = f.toUri();
> -                File dir = getParentFile(new File(uri.toURL().getPath()), 
> -                        packageDepth(e.getQualifiedName().toString()));
> -                return dir;
> -            } catch (Throwable t) {
> -                return null;
> -            }
> -        }
> -        
> -        /**
> -         * Gets the parent of the given file recursively traversing to given 
> number of levels.
> -         */
> -        public static File getParentFile(File f, int n) {
> -            if (n < 0)
> -                return f;
> -            if (n == 0)
> -                return f.getParentFile();
> -            return getParentFile(f.getParentFile(), n-1);
> -        }
> -        
> -        public static int packageDepth(String s) {
> -            String pkg = getPackageName(s);
> -            if (pkg == null)
> -                return 0;
> -            int depth = 1;
> -            int i = 0;
> -            while ((i = pkg.indexOf('.')) != -1) {
> -                depth++;
> -                pkg = pkg.substring(i+1);
> -            }
> -            return depth;
> -        }
> -        
> -        public static String getPackageName(String s) {
> -            if (s == null)
> -                return null;
> -            int i = s.lastIndexOf('.');
> -            return (i == -1) ? null : s.substring(0, i);
> -        }
> -        
> -        public static String getSimpleName(String s) {
> -            if (s == null)
> -                return null;
> -            int i = s.lastIndexOf('.');
> -            return (i == -1) ? s : s.substring(i+1);
> -        }
> -    }
> -
>  }
> 
> Modified: 
> openjpa/branches/2.0.x/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
> URL: 
> http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-project/src/doc/manual/jpa_overview_criteria.xml?rev=934511&r1=934510&r2=934511&view=diff
> ==============================================================================
> --- 
> openjpa/branches/2.0.x/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
>  (original)
> +++ 
> openjpa/branches/2.0.x/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
>  Thu Apr 15 18:33:24 2010
> @@ -168,32 +168,31 @@ Annotation processing tool generates sou
>  the annotated source code of persistent entity. 
>  This tool is invoked during compilation for JDK6 compiler if OpenJPA and JPA 
>  libraries are specified in the compiler <code>-classpath</code> option 
> <emphasis>and</emphasis>
> -Annotation processor option <code>-Aopenjpa.generate=true</code> is 
> specified.
> +Annotation processor option <code>-Aopenjpa.metamodel=true</code> is 
> specified.
>      <programlisting>
> - $ javac -classpath path/to/openjpa-all.jar -Aopenjpa.generate=true 
> mypackage/MyEntity.java
> + $ javac -classpath path/to/openjpa-all.jar -Aopenjpa.metamodel=true 
> mypackage/MyEntity.java
>      </programlisting>
>  will generate source code for canonical meta-model class 
> <code>mypackage.MyEntity_.java</code>.
>        </para>
>        
>        <para>
>  The Annotation Processor recognizes the following options specified in the 
> command-line with <code>-A</code> 
> -(none of them are mandatory). Each of the following option key can also be 
> prefixed with <code>openjpa.</code> 
> -to distinguish if multiple annotation processors are active during 
> compilation.
> +(none of them are mandatory).
>      <itemizedlist>
>          <listitem>
>                       <para>
> -              -Alog=TRACE|INFO|WARN|ERROR : The logging level. Default is 
> <code>WARN</code>.
> +              -Aopenjpa.log=TRACE|INFO|WARN|ERROR : The logging level. 
> Default is <code>WARN</code>.
>              </para>
>          </listitem>
>          <listitem>
>                       <para>
> -             -Asource=&lt;n&gt; : where &lt;n&gt; denotes the integral 
> number for Java source 
> +             -Aopenjpa.source=&lt;n&gt; : where &lt;n&gt; denotes the 
> integral number for Java source 
>               version of the generated code. Default is <code>6</code>.
>               </para>
>          </listitem>
>          <listitem>
>                       <para>
> -               -Anaming=class name : fully-qualified name of a class 
> implementing 
> +               -Aopenjpa.naming=class name : fully-qualified name of a class 
> implementing 
>                 <code>org.apache.openjpa.meta.MetaDataFactory</code> that 
> determines
>  the name of a meta-class given the name of the original persistent Java 
> entity class. Defaults to
>  <code>org.apache.openjpa.persistence.PersistenceMetaDataFactory</code> which 
> appends a underscore character
> @@ -202,7 +201,7 @@ the name of a meta-class given the name 
>          </listitem>
>          <listitem>
>                       <para>
> -               -Aheader=&lt;url&gt; : A url whose content will appear as 
> comment header to the generated file(s). 
> +               -Aopenjpa.header=&lt;url&gt; : A url whose content will 
> appear as comment header to the generated file(s). 
>                 Recognizes special value <code>ASL</code> for Apache Source 
> License header as comment. 
>                 By default, adds a OpenJPA proprietary text as comment block.
>               </para>
> 
> Modified: openjpa/branches/2.0.x/scripts/mmg.bat
> URL: 
> http://svn.apache.org/viewvc/openjpa/branches/2.0.x/scripts/mmg.bat?rev=934511&r1=934510&r2=934511&view=diff
> ==============================================================================
> --- openjpa/branches/2.0.x/scripts/mmg.bat (original)
> +++ openjpa/branches/2.0.x/scripts/mmg.bat Thu Apr 15 18:33:24 2010
> @@ -21,34 +21,45 @@
>  @rem Example Batch script to generate canonical meta-model classes
>  @rem
>  @rem Usage
> -...@rem   $ mmg.bat <options.file> <class.list>
> +...@rem   $ mmg.bat <class.list>
>  @rem 
>  @rem The canonical meta-model classes can be generated during compilation of
>  @rem domain classes. This batch file compiles a set of classes (X.java) 
> listed 
> -...@rem in <class.list> file. The compiler is invoked with an annotation
> -...@rem processor which generates a meta-model class X_.java for each 
> X.java. 
> -...@rem The options for annotation processor is specified in <options.file>.
> +...@rem in <class.list> file. The compiler discoveres the annotation
> +...@rem processor if openjpa classes are in classpath. The discovered 
> annotation
> +...@rem processor, however, is active only if -Aopenjpa.metamodel=true is 
> set.  
>  @rem 
>  @rem See also 
> -...@rem    mmg.options       : The options to Javac compiler 
>  @rem    domain-class.list : The domain classes to be compiled
>  @rem 
> ---------------------------------------------------------------------------
>  @echo off
>  setlocal
> -set JAVA_HOME=c:\java\jdk1.6.0_10
>  set JAVAC=%JAVA_HOME%\bin\javac
>  
> +...@rem 
> ---------------------------------------------------------------------------
> +...@rem Compiler classpath shown for a typical OpenJPA development 
> environment in Windows. 
> +...@rem The essential aspect is openjpa libraries must be in the compiler's 
> classpath.
>  set M_REPO="C:\Documents and Settings\Administrator\.m2\repository"
>  set SPEC=geronimo-jpa_2.0_spec
>  set VERSION=1.0-EA9-SNAPSHOT
>  set 
> JPA_LIB=%M_REPO%\org\apache\geronimo\specs\%SPEC%\%VERSION%\%SPEC%-%VERSION%.jar
>  
>  set CLASSPATH=%JPA_LIB%
> -set CLASSPATH=%CLASSPATH%;.\openjpa-lib\target\classes
> -set CLASSPATH=%CLASSPATH%;.\openjpa-persistence\src\main\resources
> -set CLASSPATH=%CLASSPATH%;.\openjpa-persistence\target\classes
> -set CLASSPATH=%CLASSPATH%;.\openjpa-kernel\target\classes
> +set CLASSPATH=%CLASSPATH%;..\openjpa\src\main\resources
> +set CLASSPATH=%CLASSPATH%;..\openjpa-persistence\target\classes
> +set CLASSPATH=%CLASSPATH%;..\openjpa-kernel\target\classes
> +set CLASSPATH=%CLASSPATH%;..\openjpa-lib\target\classes
> +
> +...@rem 
> ---------------------------------------------------------------------------
> +echo Using Java Compiler %JAVAC%
> +%JAVAC% -version
> +
> +...@rem 
> ---------------------------------------------------------------------------
> +...@rem Root directory for of the generated source files. Specified as -s 
> option 
> +set GEN_DIR=../openjpa-persistence-jdbc/src/test/java
>  
> -%JAVAC% -cp %CLASSPATH% @%1 @%2
> +...@rem Only one option is shown for logging. Other available options are 
> documented in
> +...@rem OpenJPA User Manual and JavaDoc
> +%JAVAC% -cp %CLASSPATH% -s %GEN_DIR% -Aopenjpa.metamodel=true 
> -Aopenjpa.log=TRACE @%1
>  
>  endlocal
> 
> 
> 

Reply via email to