This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_5_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_5_0_X by this push:
new 39ce37116d refactor modifier handling
39ce37116d is described below
commit 39ce37116d1e6f4a6e268c95752947d67c820bc8
Author: Eric Milles <[email protected]>
AuthorDate: Fri Oct 10 11:13:53 2025 -0500
refactor modifier handling
---
.../transform/trait/TraitASTTransformation.java | 32 +++++++++++++++++-----
1 file changed, 25 insertions(+), 7 deletions(-)
diff --git
a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
index aea4019036..b2478262d5 100644
---
a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++
b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -619,14 +619,33 @@ public class TraitASTTransformation extends
AbstractASTTransformation implements
}
private MethodNode processMethod(final ClassNode traitClass, final
ClassNode traitHelperClass, final MethodNode methodNode, final ClassNode
fieldHelper, final Collection<String> knownFields) {
+ boolean isAbstractMethod = methodNode.isAbstract();
+ boolean isPrivateMethod = methodNode.isPrivate();
+ boolean isStaticMethod = methodNode.isStatic();
+
+ int modifiers = ACC_PUBLIC;
+ if (isAbstractMethod) {
+ modifiers |= ACC_ABSTRACT;
+ } else {
+ // public or private
+ if (isPrivateMethod) {
+ modifiers ^= ACC_PUBLIC | ACC_PRIVATE;
+ }
+ // static or final (maybe)
+ if (!isStaticMethod && methodNode.isFinal()) {
+ modifiers |= ACC_FINAL;
+ }
+ modifiers |= ACC_STATIC;
+ }
+
Parameter[] methodParams = methodNode.getParameters();
Parameter[] helperParams = new Parameter[methodParams.length + 1];
- helperParams[0] =
createSelfParameter(traitClass,methodNode.isStatic());
+ helperParams[0] = createSelfParameter(traitClass, isStaticMethod);
System.arraycopy(methodParams, 0, helperParams, 1,
methodParams.length);
MethodNode mNode = new MethodNode(
methodNode.getName(),
- (methodNode.isPrivate() ? ACC_PRIVATE : ACC_PUBLIC) |
(methodNode.isFinal() ? ACC_FINAL : 0) | ACC_STATIC,
+ modifiers,
methodNode.getReturnType(),
helperParams,
methodNode.getExceptions(),
@@ -639,12 +658,11 @@ public class TraitASTTransformation extends
AbstractASTTransformation implements
}
mNode.setGenericsTypes(methodNode.getGenericsTypes());
mNode.setSourcePosition(methodNode);
- if (methodNode.isAbstract()) {
- mNode.setModifiers(ACC_PUBLIC | ACC_ABSTRACT);
- } else {
- methodNode.addAnnotation(new
AnnotationNode(Traits.IMPLEMENTED_CLASSNODE));
+
+ if (!isAbstractMethod) {
+ methodNode.addAnnotation(Traits.IMPLEMENTED_CLASSNODE);
}
- if (!methodNode.isPrivate() && !methodNode.isStatic()) {
+ if (!isPrivateMethod && !isStaticMethod) {
methodNode.setModifiers(ACC_PUBLIC | ACC_ABSTRACT);
}
methodNode.setCode(null);