diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
index 63f7ae51f..393635680 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
@@ -30,6 +30,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.annotation.Generated;
@@ -45,6 +46,7 @@ import javax.lang.model.type.TypeKind;
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;
@@ -56,6 +58,8 @@ import org.apache.openjpa.meta.MetaDataFactory;
import org.apache.openjpa.persistence.PersistenceMetaDataFactory;
import org.apache.openjpa.persistence.util.SourceCode;
+import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
+
/**
* Annotation processing tool generates source code for a meta-model class given
* the annotated source code of persistent entity.
@@ -70,7 +74,9 @@ import org.apache.openjpa.persistence.util.SourceCode;
* $ javac -classpath path/to/openjpa-all.jar -Aopenjpa.generated=true mypackage/MyEntity.java
* will generate source code for canonical meta-model class mypackage.MyEntity_.java
.
*
- * The Annotation Processor also recognizes the following options (none of them are mandatory):
+ * The Annotation Processor also recognizes the following options (none of them are mandatory).
+ * Each of the following option key can also be prefixed with openjpa.
to distinguish if multiple
+ * annotation processors are active during compilation:
*
* -Alog={log level} | The logging level. Default is WARN . Permissible values are
* TRACE , INFO , WARN or ERROR .
@@ -96,6 +102,7 @@ import org.apache.openjpa.persistence.util.SourceCode;
* to the package structure.
* |
*
+ *
* @author Pinaki Poddar
*
* @since 2.0.0
@@ -105,7 +112,13 @@ import org.apache.openjpa.persistence.util.SourceCode;
"javax.persistence.Entity",
"javax.persistence.Embeddable",
"javax.persistence.MappedSuperclass" })
-@SupportedOptions( { "log", "out", "source", "naming", "header", "openjpa.generate" })
+@SupportedOptions({ "openjpa.log", "log",
+ "openjpa.out", "out",
+ "openjpa.source", "source",
+ "openjpa.naming", "naming",
+ "openjpa.header", "header",
+ "openjpa.generate"
+ })
@SupportedSourceVersion(RELEASE_6)
public class AnnotationProcessor6 extends AbstractProcessor {
@@ -194,11 +207,11 @@ public class AnnotationProcessor6 extends AbstractProcessor {
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
- active = "true".equalsIgnoreCase(processingEnv.getOptions().get("openjpa.generate"));
+ active = "true".equalsIgnoreCase(getOptionValue("openjpa.generate"));
if (!active)
return;
- logger = new CompileTimeLogger(processingEnv);
- logger.info(_loc.get("mmg-tool-banner"));
+ processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, _loc.get("mmg-tool-banner").toString());
+ logger = new CompileTimeLogger(processingEnv, getOptionValue("openjpa.log", "log"));
setSourceVersion();
setFileManager();
setNamingPolicy();
@@ -211,9 +224,7 @@ public class AnnotationProcessor6 extends AbstractProcessor {
*/
@Override
public boolean process(Set extends TypeElement> annos, RoundEnvironment roundEnv) {
- if (!active)
- return false;
- if (!roundEnv.processingOver()) {
+ if (active && !roundEnv.processingOver()) {
Set extends Element> elements = roundEnv.getRootElements();
for (Element e : elements) {
process((TypeElement) e);
@@ -322,7 +333,7 @@ public class AnnotationProcessor6 extends AbstractProcessor {
* n must be a integer. Default or wrong specification returns 6.
*/
private void setSourceVersion() {
- String version = processingEnv.getOptions().get("source");
+ String version = getOptionValue("openjpa.source", "source");
if (version != null) {
try {
generatedSourceVersion = Integer.parseInt(version);
@@ -336,7 +347,7 @@ public class AnnotationProcessor6 extends AbstractProcessor {
}
private void setNamingPolicy() {
- String policy = processingEnv.getOptions().get("naming");
+ String policy = getOptionValue("openjpa.naming","naming");
if (policy != null) {
try {
factory = (MetaDataFactory)Class.forName(policy).newInstance();
@@ -350,7 +361,7 @@ public class AnnotationProcessor6 extends AbstractProcessor {
}
private void setHeader() {
- String headerOption = processingEnv.getOptions().get("header");
+ String headerOption = getOptionValue("openjpa.header", "header");
if (headerOption == null) {
return;
}
@@ -369,7 +380,7 @@ public class AnnotationProcessor6 extends AbstractProcessor {
private void setFileManager() {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
fileManager = compiler.getStandardFileManager(null, null, null);
- String outDir = processingEnv.getOptions().get("out");
+ String outDir = getOptionValue("openjpa.out", "out");
if (outDir != null)
isUserSpecifiedOutputLocation = setSourceOutputDirectory(new File(outDir));
}
@@ -416,6 +427,18 @@ public class AnnotationProcessor6 extends AbstractProcessor {
}
}
+ /**
+ * Get the value for the given keys, whoever matches first, in the current available options.
+ */
+ private String getOptionValue(String... keys) {
+ Map options = processingEnv.getOptions();
+ for (String key : keys) {
+ if (options.containsKey(key))
+ return options.get(key);
+ }
+ 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
diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java
index da4c52981..60e3a2a24 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java
@@ -34,16 +34,14 @@ import org.apache.openjpa.lib.util.Localizer;
*/
public class CompileTimeLogger {
private static enum Level {TRACE, INFO, WARN, ERROR};
- private static Localizer _loc = Localizer.forPackage(
- CompileTimeLogger.class);
+ private static Localizer _loc = Localizer.forPackage(CompileTimeLogger.class);
private static Level DEFAULT_LEVEL = Level.WARN;
private int logLevel;
private Messager messager;
- public CompileTimeLogger(ProcessingEnvironment env) {
+ public CompileTimeLogger(ProcessingEnvironment env, String level) {
messager = env.getMessager();
- String level = env.getOptions().get("log");
if (level == null) {
logLevel = DEFAULT_LEVEL.ordinal();
return;
diff --git a/openjpa-project/src/doc/manual/jpa_overview_criteria.xml b/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
index 1cc544430..1bd838426 100644
--- a/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
+++ b/openjpa-project/src/doc/manual/jpa_overview_criteria.xml
@@ -177,7 +177,8 @@ will generate source code for canonical meta-model class mypackage.MyEntit
The Annotation Processor recognizes the following options specified in the command-line with -A
-(none of them are mandatory):
+(none of them are mandatory). Each of the following option key can also be prefixed with openjpa.
+to distinguish if multiple annotation processors are active during compilation.