[hibernate-commits] Hibernate SVN: r19524 - in validator/trunk/hibernate-validator-annotation-processor/src: test/java/org/hibernate/validator/ap and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Sat May 15 11:50:33 EDT 2010


Author: gunnar.morling
Date: 2010-05-15 11:50:33 -0400 (Sat, 15 May 2010)
New Revision: 19524

Modified:
   validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintAnnotationVisitor.java
   validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintValidationProcessor.java
   validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/ConstraintValidationProcessorTest.java
   validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/testutil/CompilerTestHelper.java
Log:
HV-322: Created processor option "verbose"

Modified: validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintAnnotationVisitor.java
===================================================================
--- validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintAnnotationVisitor.java	2010-05-15 14:55:16 UTC (rev 19523)
+++ validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintAnnotationVisitor.java	2010-05-15 15:50:33 UTC (rev 19524)
@@ -48,24 +48,23 @@
  */
 final class ConstraintAnnotationVisitor extends ElementKindVisitor6<Void, List<AnnotationMirror>> {
 
-	private final ConstraintHelper constraintHelper;
-
 	private final MessagerAdapter messager;
 
-	private ConstraintCheckFactory constraintCheckFactory;
+	private final ConstraintCheckFactory constraintCheckFactory;
 
-	//TODO GM: establish processor option for this
-	private boolean verbose = true;
+	private final boolean verbose;
 
-	public ConstraintAnnotationVisitor(ProcessingEnvironment processingEnvironment, MessagerAdapter messager) {
+	public ConstraintAnnotationVisitor(
+			ProcessingEnvironment processingEnvironment, MessagerAdapter messager, boolean verbose) {
 
 		this.messager = messager;
+		this.verbose = verbose;
 
 		AnnotationApiHelper annotationApiHelper = new AnnotationApiHelper(
 				processingEnvironment.getElementUtils(), processingEnvironment.getTypeUtils()
 		);
 
-		constraintHelper = new ConstraintHelper(
+		ConstraintHelper constraintHelper = new ConstraintHelper(
 				processingEnvironment.getElementUtils(), processingEnvironment.getTypeUtils(), annotationApiHelper
 		);
 

Modified: validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintValidationProcessor.java
===================================================================
--- validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintValidationProcessor.java	2010-05-15 14:55:16 UTC (rev 19523)
+++ validator/trunk/hibernate-validator-annotation-processor/src/main/java/org/hibernate/validator/ap/ConstraintValidationProcessor.java	2010-05-15 15:50:33 UTC (rev 19524)
@@ -54,18 +54,24 @@
  */
 @SupportedAnnotationTypes("*")
 @SupportedSourceVersion(SourceVersion.RELEASE_6)
- at SupportedOptions(ConstraintValidationProcessor.DIAGNOSTIC_KIND_PROCESSOR_OPTION_NAME)
+ at SupportedOptions({
+		ConstraintValidationProcessor.DIAGNOSTIC_KIND_PROCESSOR_OPTION_NAME,
+		ConstraintValidationProcessor.VERBOSE_PROCESSOR_OPTION_NAME
+})
 public class ConstraintValidationProcessor extends AbstractProcessor {
 
 	/**
 	 * The name of the processor option for setting the diagnostic kind to be
-	 * used when reporting errors during annotation processing. Can be set on
-	 * the command line using the -A option, e.g.
-	 * <code>-AdiagnosticKind=ERROR</code>.
+	 * used when reporting errors during annotation processing.
 	 */
 	public final static String DIAGNOSTIC_KIND_PROCESSOR_OPTION_NAME = "diagnosticKind";
 
 	/**
+	 * The name of the processor option for activating verbose message reporting.
+	 */
+	public final static String VERBOSE_PROCESSOR_OPTION_NAME = "verbose";
+
+	/**
 	 * The diagnostic kind to be used if no or an invalid kind is given as processor option.
 	 */
 	public final static Kind DEFAULT_DIAGNOSTIC_KIND = Kind.ERROR;
@@ -79,11 +85,17 @@
 	 */
 	private MessagerAdapter messager;
 
+	/**
+	 * Whether logging information shall be put out in a verbose way or not.
+	 */
+	private boolean verbose;
+
 	@Override
 	public synchronized void init(ProcessingEnvironment processingEnv) {
 
 		super.init( processingEnv );
 
+		this.verbose = isVerbose();
 		messager = new MessagerAdapter( processingEnv.getMessager(), getDiagnosticKind() );
 	}
 
@@ -97,7 +109,7 @@
 		);
 
 		ElementVisitor<Void, List<AnnotationMirror>> visitor = new ConstraintAnnotationVisitor(
-				processingEnv, messager
+				processingEnv, messager, verbose
 		);
 
 		for ( TypeElement oneAnnotation : annotations ) {
@@ -146,4 +158,25 @@
 		return DEFAULT_DIAGNOSTIC_KIND;
 	}
 
+	/**
+	 * Retrieves the value for the "verbose" property from the options.
+	 *
+	 * @return The value for the "verbose" property.
+	 */
+	private boolean isVerbose() {
+
+		boolean theValue = Boolean.parseBoolean( processingEnv.getOptions().get( VERBOSE_PROCESSOR_OPTION_NAME ) );
+
+		if ( theValue ) {
+			super.processingEnv.getMessager().printMessage(
+					Kind.NOTE, MessageFormat.format(
+							"Verbose reporting is activated. Some processing information will be displayed using diagnostic kind {0}.",
+							Kind.NOTE
+					)
+			);
+		}
+
+		return theValue;
+	}
+
 }

Modified: validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/ConstraintValidationProcessorTest.java
===================================================================
--- validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/ConstraintValidationProcessorTest.java	2010-05-15 14:55:16 UTC (rev 19523)
+++ validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/ConstraintValidationProcessorTest.java	2010-05-15 15:50:33 UTC (rev 19524)
@@ -18,6 +18,7 @@
 package org.hibernate.validator.ap;
 
 import java.io.File;
+import javax.tools.Diagnostic;
 import javax.tools.Diagnostic.Kind;
 import javax.tools.DiagnosticCollector;
 import javax.tools.JavaFileObject;
@@ -125,16 +126,24 @@
 	}
 
 	@Test
-	public void compilationSucceedsDueToDiagnosticKindWarning() {
+	public void testThatProcessorOptionsAreEvaluated() {
 
 		File sourceFile = compilerHelper.getSourceFile( FieldLevelValidationUsingBuiltInConstraints.class );
 
+		// compile with -AdiagnosticKind=Kind.WARNING and -Averbose=true
 		boolean compilationResult =
-				compilerHelper.compile( new ConstraintValidationProcessor(), diagnostics, Kind.WARNING, sourceFile );
+				compilerHelper.compile(
+						new ConstraintValidationProcessor(), diagnostics, Kind.WARNING, true, sourceFile
+				);
 
+		// compilation succeeds as there are problems, but Kind.WARNING won't stop compilation
 		assertTrue( compilationResult );
+
 		assertThatDiagnosticsMatch(
-				diagnostics, new DiagnosticExpection( Kind.WARNING, 54 ), new DiagnosticExpection( Kind.WARNING, 60 )
+				diagnostics,
+				new DiagnosticExpection( Kind.NOTE, Diagnostic.NOPOS ), //says that verbose messaging is enabled
+				new DiagnosticExpection( Kind.WARNING, 54 ),
+				new DiagnosticExpection( Kind.WARNING, 60 )
 		);
 	}
 

Modified: validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/testutil/CompilerTestHelper.java
===================================================================
--- validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/testutil/CompilerTestHelper.java	2010-05-15 14:55:16 UTC (rev 19523)
+++ validator/trunk/hibernate-validator-annotation-processor/src/test/java/org/hibernate/validator/ap/testutil/CompilerTestHelper.java	2010-05-15 15:50:33 UTC (rev 19524)
@@ -46,10 +46,6 @@
 
 	private final String sourceBaseDir;
 
-	/**
-	 * TODO GM: How can JavaCompiler access all dependencies of the project? This works within
-	 * Eclipse, but not on the command line.
-	 */
 	private final String pathToBeanValidationApiJar;
 
 	public CompilerTestHelper(JavaCompiler compiler, String sourceBaseDir, String pathToBeanValidationApiJar) {
@@ -75,28 +71,39 @@
 	}
 
 	/**
-	 * Creates and executes a {@link CompilationTask} using the given input.
-	 *
-	 * @param annotationProcessor An annotation processor to be attached to the task.
-	 * @param diagnostics An diagnostics listener to be attached to the task.
-	 * @param sourceFiles The source files to be compiled.
-	 *
-	 * @return True, if the source files could be compiled successfully (meaning
-	 *         in especially, that the given annotation processor didn't raise
-	 *         any errors), false otherwise.
+	 * @see CompilerTestHelper#compile(Processor, DiagnosticCollector, Kind, Boolean, File...)
 	 */
 	public boolean compile(
 			Processor annotationProcessor, DiagnosticCollector<JavaFileObject> diagnostics, File... sourceFiles) {
 
-		return compile( annotationProcessor, diagnostics, Kind.ERROR, sourceFiles );
+		return compile( annotationProcessor, diagnostics, null, null, sourceFiles );
 	}
 
 	/**
+	 * @see CompilerTestHelper#compile(Processor, DiagnosticCollector, Kind, Boolean, File...)
+	 */
+	public boolean compile(
+			Processor annotationProcessor, DiagnosticCollector<JavaFileObject> diagnostics, Kind diagnosticKind, File... sourceFiles) {
+
+		return compile( annotationProcessor, diagnostics, diagnosticKind, null, sourceFiles );
+	}
+
+	/**
+	 * @see CompilerTestHelper#compile(Processor, DiagnosticCollector, Kind, Boolean, File...)
+	 */
+	public boolean compile(
+			Processor annotationProcessor, DiagnosticCollector<JavaFileObject> diagnostics, boolean verbose, File... sourceFiles) {
+
+		return compile( annotationProcessor, diagnostics, null, verbose, sourceFiles );
+	}
+
+	/**
 	 * Creates and executes a {@link CompilationTask} using the given input.
 	 *
 	 * @param annotationProcessor An annotation processor to be attached to the task.
 	 * @param diagnostics An diagnostics listener to be attached to the task.
 	 * @param diagnosticKind A value for the "diagnosticKind" option.
+	 * @param verbose A value for the "verbose" option.
 	 * @param sourceFiles The source files to be compiled.
 	 *
 	 * @return True, if the source files could be compiled successfully (meaning
@@ -104,21 +111,26 @@
 	 *         any errors), false otherwise.
 	 */
 	public boolean compile(
-			Processor annotationProcessor, DiagnosticCollector<JavaFileObject> diagnostics, Kind diagnosticKind, File... sourceFiles) {
+			Processor annotationProcessor, DiagnosticCollector<JavaFileObject> diagnostics, Kind diagnosticKind, Boolean verbose, File... sourceFiles) {
 
 		StandardJavaFileManager fileManager =
 				compiler.getStandardFileManager( null, null, null );
 
 		Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects( sourceFiles );
 
-		List<String> optionList = new ArrayList<String>();
-		optionList.addAll(
-				Arrays.asList(
-						"-classpath", pathToBeanValidationApiJar, "-AdiagnosticKind=" + diagnosticKind, "-d", "target"
-				)
-		);
+		List<String> options = new ArrayList<String>();
 
-		CompilationTask task = compiler.getTask( null, fileManager, diagnostics, optionList, null, compilationUnits );
+		options.addAll( Arrays.asList( "-classpath", pathToBeanValidationApiJar, "-d", "target" ) );
+
+		if ( diagnosticKind != null ) {
+			options.add( "-AdiagnosticKind=" + diagnosticKind );
+		}
+
+		if ( verbose != null ) {
+			options.add( "-Averbose=" + verbose.toString() );
+		}
+
+		CompilationTask task = compiler.getTask( null, fileManager, diagnostics, options, null, compilationUnits );
 		task.setProcessors( Arrays.asList( annotationProcessor ) );
 
 		return task.call();



More information about the hibernate-commits mailing list