Author: ppoddar
Date: Mon Apr 12 18:12:49 2010
New Revision: 933342
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
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
openjpa/trunk/scripts/domain-class.list
openjpa/trunk/scripts/mmg.bat
openjpa/trunk/scripts/mmg.options
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java?rev=933342&r1=933341&r2=933342&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
Mon Apr 12 18:12:49 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;
@@ -79,26 +71,16 @@ import org.apache.openjpa.persistence.ut
* <TABLE border="1">
* <TR><TD>-Alog={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>-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
* <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>-Aheader={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>
*
@@ -112,18 +94,15 @@ import org.apache.openjpa.persistence.ut
"javax.persistence.Embeddable",
"javax.persistence.MappedSuperclass" })
@SupportedOptions({ "openjpa.log", "log",
- "openjpa.out", "out",
- "openjpa.source", "source",
- "openjpa.naming", "naming",
- "openjpa.header", "header",
- "openjpa.generate"
+ "openjpa.source", "source",
+ "openjpa.naming", "naming",
+ "openjpa.header", "header",
+ "openjpa.generate"
})
@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;
@@ -212,7 +191,6 @@ public class AnnotationProcessor6 extend
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
_loc.get("mmg-tool-banner").toString());
logger = new CompileTimeLogger(processingEnv,
getOptionValue("openjpa.log", "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 {
@@ -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
+ JavaFileObject javaFile =
processingEnv.getFiler().createSourceFile(metaClass, e);
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;
- }
+ 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/trunk/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_criteria.xml?rev=933342&r1=933341&r2=933342&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
(original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_criteria.xml Mon
Apr 12 18:12:49 2010
@@ -172,7 +172,9 @@ Annotation processor option <code>-Aopen
<programlisting>
$ javac -classpath path/to/openjpa-all.jar -Aopenjpa.generate=true
mypackage/MyEntity.java
</programlisting>
-will generate source code for canonical meta-model class
<code>mypackage.MyEntity_.java</code>.
+will generate source code for canonical meta-model class
<code>mypackage.MyEntity_</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.
</para>
<para>
@@ -207,20 +209,6 @@ the name of a meta-class given the name
By default, adds a OpenJPA proprietary text as comment block.
</para>
</listitem>
- <listitem>
- <para>
- -Aout=dir : A directory in the local file system. The generated
files will be written
- <emphasis>relative</emphasis> 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 when <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.
- </para>
- </listitem>
</itemizedlist>
</para>
</section>
Modified: openjpa/trunk/scripts/domain-class.list
URL:
http://svn.apache.org/viewvc/openjpa/trunk/scripts/domain-class.list?rev=933342&r1=933341&r2=933342&view=diff
==============================================================================
--- openjpa/trunk/scripts/domain-class.list (original)
+++ openjpa/trunk/scripts/domain-class.list Mon Apr 12 18:12:49 2010
@@ -1,10 +1,10 @@
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ArrayMember.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed0.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed1.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccess.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccessMixed.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccess.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccessMixed.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessBase.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessMappedSuperclass.java
-./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessSubclass.java
\ No newline at end of file
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ArrayMember.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed0.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed1.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccess.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccessMixed.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccess.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccessMixed.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessBase.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessMappedSuperclass.java
+../openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessSubclass.java
\ No newline at end of file
Modified: openjpa/trunk/scripts/mmg.bat
URL:
http://svn.apache.org/viewvc/openjpa/trunk/scripts/mmg.bat?rev=933342&r1=933341&r2=933342&view=diff
==============================================================================
--- openjpa/trunk/scripts/mmg.bat (original)
+++ openjpa/trunk/scripts/mmg.bat Mon Apr 12 18:12:49 2010
@@ -35,7 +35,6 @@
@rem
---------------------------------------------------------------------------
@echo off
setlocal
-set JAVA_HOME=c:\java\jdk1.6.0_10
set JAVAC=%JAVA_HOME%\bin\javac
set M_REPO="C:\Documents and Settings\Administrator\.m2\repository"
@@ -44,11 +43,11 @@ 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\target\classes
+echo Using Java Compiler %JAVAC%
+%JAVAC% -version
%JAVAC% -cp %CLASSPATH% @%1 @%2
endlocal
Modified: openjpa/trunk/scripts/mmg.options
URL:
http://svn.apache.org/viewvc/openjpa/trunk/scripts/mmg.options?rev=933342&r1=933341&r2=933342&view=diff
==============================================================================
--- openjpa/trunk/scripts/mmg.options (original)
+++ openjpa/trunk/scripts/mmg.options Mon Apr 12 18:12:49 2010
@@ -1,4 +1,3 @@
--processor org.apache.openjpa.persistence.meta.AnnotationProcessor6
+-Aopenjpa.generate=true
-Alog=TRACE
--Aout=..\openjpa-persistence-jdbc\src\test\java\
-Asource=5