Skip to content

Commit

Permalink
Add a simple annotation and annotation processor to indicate that tha…
Browse files Browse the repository at this point in the history
…t a test requires follow-up actions.

Signed-off-by: James R. Perkins <jperkins@redhat.com>
  • Loading branch information
jamezp committed Aug 14, 2023
1 parent bb51b62 commit 838003f
Show file tree
Hide file tree
Showing 4 changed files with 169 additions and 0 deletions.
24 changes: 24 additions & 0 deletions testsuite/arquillian-utils/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,28 @@
<artifactId>aether-transport-http</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<!--
Disable Annotation processor on project compile
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* JBoss, Home of Professional Open Source.
*
* Copyright 2023 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.jboss.resteasy.test;

import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.Messager;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedOptions;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;

import org.jboss.resteasy.test.annotations.FollowUpRequired;

/**
* @author <a href="mailto:jperkins@redhat.com">James R. Perkins</a>
*/
@SupportedOptions({
"dev.resteasy.test.follow.up.level"
})
public class FollowUpRequiredProcessor extends AbstractProcessor {
private final Set<String> supportedAnnotations;

public FollowUpRequiredProcessor() {
supportedAnnotations = Set.of(FollowUpRequired.class.getName());
}

@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
if (!roundEnv.processingOver() && !annotations.isEmpty()) {
final Messager messager = processingEnv.getMessager();
final String kindLevel = processingEnv.getOptions().getOrDefault("dev.resteasy.test.follow.up.level", "WARNING");
Diagnostic.Kind kind;
try {
kind = Diagnostic.Kind.valueOf(kindLevel);
} catch (IllegalArgumentException e) {
kind = Diagnostic.Kind.WARNING;
messager.printMessage(Diagnostic.Kind.MANDATORY_WARNING,
"Failed to parse follow-up level " + kindLevel + ". Defaulting to " + kind + ".");
}
for (TypeElement annotation : annotations) {
final Set<? extends Element> annotated = roundEnv.getElementsAnnotatedWith(annotation);
for (Element e : annotated) {
// Get the message for the annotation
final var msg = e.getAnnotation(FollowUpRequired.class).value();
// Print a warning message since this requires some kind of action
messager.printMessage(kind, "Follow up required: " + msg, e);
}
}
}
return true;
}

@Override
public Set<String> getSupportedAnnotationTypes() {
return supportedAnnotations;
}

@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* JBoss, Home of Professional Open Source.
*
* Copyright 2023 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.jboss.resteasy.test.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* An annotation for tests that simply indicates a follow-up is required.
*
* @author <a href="mailto:jperkins@redhat.com">James R. Perkins</a>
*/
@Inherited
@Target({
ElementType.CONSTRUCTOR,
ElementType.FIELD,
ElementType.METHOD,
ElementType.MODULE,
ElementType.PARAMETER,
ElementType.RECORD_COMPONENT,
ElementType.TYPE
})
@Documented
@Retention(RetentionPolicy.CLASS)
public @interface FollowUpRequired {

/**
* A simple message indicating information about the follow-up.
*
* @return the follow-up information.
*/
String value();

/**
* Defines the version the follow-up should be done by.
*
* @return the version the follow-up should be done by or an empty string if no version was specified
*/
String version() default "";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
org.jboss.resteasy.test.FollowUpRequiredProcessor

0 comments on commit 838003f

Please sign in to comment.