You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2022/04/14 02:28:39 UTC
[groovy] branch master updated: remove unchecked/style warnings
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new d8890e9ae1 remove unchecked/style warnings
d8890e9ae1 is described below
commit d8890e9ae135715af36b036f08801442b37f0ad0
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Apr 14 12:28:30 2022 +1000
remove unchecked/style warnings
---
.../ast/visitor/AnnotationProcessorVisitor.java | 106 ++++++++++-----------
1 file changed, 52 insertions(+), 54 deletions(-)
diff --git a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationProcessorVisitor.java b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationProcessorVisitor.java
index cba9df3a61..b09df6191c 100644
--- a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationProcessorVisitor.java
+++ b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationProcessorVisitor.java
@@ -60,6 +60,7 @@ import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveVoid;
*/
public class AnnotationProcessorVisitor extends BaseVisitor {
+ private static final String DO_CALL = "doCall";
private ProcessingContextInformation pci;
public AnnotationProcessorVisitor(final SourceUnit sourceUnit, final ReaderSource source, final ProcessingContextInformation pci) {
@@ -73,7 +74,7 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
public void visitClass(ClassNode type) {
handleClassNode(type);
- List<MethodNode> methodNodes = new ArrayList<MethodNode>();
+ List<MethodNode> methodNodes = new ArrayList<>();
methodNodes.addAll(type.getMethods());
methodNodes.addAll(type.getDeclaredConstructors());
@@ -81,7 +82,7 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
if (!CandidateChecks.isClassInvariantCandidate(type, methodNode) && !CandidateChecks.isPreOrPostconditionCandidate(type, methodNode))
continue;
- handleMethodNode(methodNode, AnnotationUtils.hasMetaAnnotations(methodNode, ContractElement.class.getName()));
+ handleMethodAnnotations(methodNode, AnnotationUtils.hasMetaAnnotations(methodNode, ContractElement.class.getName()));
}
// visit all interfaces of this class
@@ -94,7 +95,7 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
if (!Modifier.isAbstract(superClass.getModifiers())) return;
for (ClassNode interfaceClassNode : superClass.getInterfaces()) {
- List<MethodNode> methodNodes = new ArrayList<MethodNode>(interfaceClassNode.getMethods());
+ List<MethodNode> methodNodes = new ArrayList<>(interfaceClassNode.getMethods());
for (MethodNode interfaceMethodNode : methodNodes) {
final List<AnnotationNode> annotationNodes = AnnotationUtils.hasMetaAnnotations(interfaceMethodNode, ContractElement.class.getName());
@@ -109,14 +110,14 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
MethodNode implementationInOriginClassNode = origin.getMethod(interfaceMethodNode.getName(), interfaceMethodNode.getParameters());
if (implementationInOriginClassNode == null) continue;
- handleMethodNode(implementationInOriginClassNode, annotationNodes);
+ handleMethodAnnotations(implementationInOriginClassNode, annotationNodes);
}
}
}
private void visitInterfaces(final ClassNode classNode, final ClassNode[] interfaces) {
for (ClassNode interfaceClassNode : interfaces) {
- List<MethodNode> methodNodes = new ArrayList<MethodNode>(interfaceClassNode.getMethods());
+ List<MethodNode> methodNodes = new ArrayList<>(interfaceClassNode.getMethods());
// @ContractElement annotations are by now only supported on method interfaces
for (MethodNode interfaceMethodNode : methodNodes) {
@@ -142,9 +143,9 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
MethodCallExpression doCall = callX(
ctorX(closureClassExpression.getType(), args(VariableExpression.THIS_EXPRESSION, VariableExpression.THIS_EXPRESSION)),
- "doCall"
+ DO_CALL
);
- doCall.setMethodTarget(closureClassExpression.getType().getMethods("doCall").get(0));
+ doCall.setMethodTarget(closureClassExpression.getType().getMethods(DO_CALL).get(0));
final BooleanExpression booleanExpression = boolX(doCall);
booleanExpression.setSourcePosition(annotationNode);
@@ -155,57 +156,59 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
}
private void handleInterfaceMethodNode(ClassNode type, MethodNode methodNode, List<AnnotationNode> annotationNodes) {
- handleMethodNode(type.getMethod(methodNode.getName(), methodNode.getParameters()), annotationNodes);
+ handleMethodAnnotations(type.getMethod(methodNode.getName(), methodNode.getParameters()), annotationNodes);
}
- private void handleMethodNode(MethodNode methodNode, List<AnnotationNode> annotationNodes) {
+ private void handleMethodAnnotations(MethodNode methodNode, List<AnnotationNode> annotationNodes) {
if (methodNode == null) return;
-
for (AnnotationNode annotationNode : annotationNodes) {
final AnnotationProcessor annotationProcessor = createAnnotationProcessor(annotationNode);
-
if (annotationProcessor != null && annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME) instanceof ClassExpression) {
- boolean isPostcondition = AnnotationUtils.hasAnnotationOfType(annotationNode.getClassNode(), org.apache.groovy.contracts.annotations.meta.Postcondition.class.getName());
+ handleMethodAnnotation(methodNode, annotationNode, annotationProcessor);
+ }
+ }
+ }
- ClassExpression closureClassExpression = (ClassExpression) annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME);
+ private void handleMethodAnnotation(MethodNode methodNode, AnnotationNode annotationNode, AnnotationProcessor annotationProcessor) {
+ boolean isPostcondition = AnnotationUtils.hasAnnotationOfType(annotationNode.getClassNode(), org.apache.groovy.contracts.annotations.meta.Postcondition.class.getName());
- ArgumentListExpression closureArgumentList = new ArgumentListExpression();
+ ClassExpression closureClassExpression = (ClassExpression) annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME);
- for (Parameter parameter : methodNode.getParameters()) {
- closureArgumentList.addExpression(varX(parameter));
- }
+ ArgumentListExpression closureArgumentList = new ArgumentListExpression();
- if (!isPrimitiveVoid(methodNode.getReturnType()) && isPostcondition && !(methodNode instanceof ConstructorNode)) {
- closureArgumentList.addExpression(localVarX("result", methodNode.getReturnType()));
- }
+ for (Parameter parameter : methodNode.getParameters()) {
+ closureArgumentList.addExpression(varX(parameter));
+ }
- if (isPostcondition && !(methodNode instanceof ConstructorNode)) {
- closureArgumentList.addExpression(localVarX("old", new ClassNode(Map.class)));
- }
+ if (!isPrimitiveVoid(methodNode.getReturnType()) && isPostcondition && !(methodNode instanceof ConstructorNode)) {
+ closureArgumentList.addExpression(localVarX("result", methodNode.getReturnType()));
+ }
- MethodCallExpression doCall = callX(
- ctorX(annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME).getType(), args(VariableExpression.THIS_EXPRESSION, VariableExpression.THIS_EXPRESSION)),
- "doCall",
- closureArgumentList
- );
- ClassNode type = annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME).getType();
- doCall.setMethodTarget(type.getMethods("doCall").get(0));
+ if (isPostcondition && !(methodNode instanceof ConstructorNode)) {
+ closureArgumentList.addExpression(localVarX("old", new ClassNode(Map.class)));
+ }
- final BooleanExpression booleanExpression = boolX(doCall);
- booleanExpression.setSourcePosition(annotationNode);
+ MethodCallExpression doCall = callX(
+ ctorX(annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME).getType(), args(VariableExpression.THIS_EXPRESSION, VariableExpression.THIS_EXPRESSION)),
+ DO_CALL,
+ closureArgumentList
+ );
+ ClassNode type = annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME).getType();
+ doCall.setMethodTarget(type.getMethods(DO_CALL).get(0));
- annotationProcessor.process(pci, pci.contract(), methodNode.getDeclaringClass(), methodNode, closureClassExpression.getNodeMetaData(AnnotationClosureVisitor.META_DATA_ORIGINAL_TRY_CATCH_BLOCK), booleanExpression);
+ final BooleanExpression booleanExpression = boolX(doCall);
+ booleanExpression.setSourcePosition(annotationNode);
- // if the implementation method has no annotation, we need to set a dummy marker in order to find parent pre/postconditions
- if (!AnnotationUtils.hasAnnotationOfType(methodNode, annotationNode.getClassNode().getName())) {
- AnnotationNode annotationMarker = new AnnotationNode(annotationNode.getClassNode());
- annotationMarker.setMember(CLOSURE_ATTRIBUTE_NAME, annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME));
- annotationMarker.setRuntimeRetention(true);
- annotationMarker.setSourceRetention(false);
+ annotationProcessor.process(pci, pci.contract(), methodNode.getDeclaringClass(), methodNode, closureClassExpression.getNodeMetaData(AnnotationClosureVisitor.META_DATA_ORIGINAL_TRY_CATCH_BLOCK), booleanExpression);
- methodNode.addAnnotation(annotationMarker);
- }
- }
+ // if the implementation method has no annotation, we need to set a dummy marker in order to find parent pre/postconditions
+ if (!AnnotationUtils.hasAnnotationOfType(methodNode, annotationNode.getClassNode().getName())) {
+ AnnotationNode annotationMarker = new AnnotationNode(annotationNode.getClassNode());
+ annotationMarker.setMember(CLOSURE_ATTRIBUTE_NAME, annotationNode.getMember(CLOSURE_ATTRIBUTE_NAME));
+ annotationMarker.setRuntimeRetention(true);
+ annotationMarker.setSourceRetention(false);
+
+ methodNode.addAnnotation(annotationMarker);
}
}
@@ -214,7 +217,7 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
List<AnnotationNode> annotations = annotationNode.getClassNode().redirect().getAnnotations();
for (AnnotationNode anno : annotations) {
- Class typeClass = anno.getClassNode().getTypeClass();
+ Class<?> typeClass = anno.getClassNode().getTypeClass();
if (typeClass.getName().equals("org.apache.groovy.contracts.annotations.meta.AnnotationProcessorImplementation")) {
annotationProcessingAnno = (ClassExpression) anno.getMember("value");
@@ -222,17 +225,12 @@ public class AnnotationProcessorVisitor extends BaseVisitor {
}
}
- if (annotationProcessingAnno == null)
- throw new GroovyBugError("Annotation processing class could not be found! This indicates a bug in groovy-contracts, please file an issue!");
-
- try {
- final Class clz = Class.forName(annotationProcessingAnno.getType().getTypeClass().getName());
- return (AnnotationProcessor) clz.getDeclaredConstructor().newInstance();
- } catch (InstantiationException e) {
- } catch (IllegalAccessException e) {
- } catch (ClassNotFoundException e) {
- } catch (NoSuchMethodException e) {
- } catch (InvocationTargetException e) {
+ if (annotationProcessingAnno != null) {
+ try {
+ final Class<?> clz = Class.forName(annotationProcessingAnno.getType().getTypeClass().getName());
+ return (AnnotationProcessor) clz.getDeclaredConstructor().newInstance();
+ } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException ignore) {
+ }
}
throw new GroovyBugError("Annotation processing class could not be instantiated! This indicates a bug in groovy-contracts, please file an issue!");