You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2018/03/01 00:08:38 UTC
[2/2] groovy git commit: Minor refactoring: remove duplicated code of
`Verifier`
Minor refactoring: remove duplicated code of `Verifier`
(cherry picked from commit 4d7884e)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/e2aa1c4c
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/e2aa1c4c
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/e2aa1c4c
Branch: refs/heads/GROOVY_2_6_X
Commit: e2aa1c4cd287223781353599802715064837b3d3
Parents: 052a2df
Author: sunlan <su...@apache.org>
Authored: Thu Mar 1 07:54:27 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Thu Mar 1 08:08:26 2018 +0800
----------------------------------------------------------------------
.../org/codehaus/groovy/classgen/Verifier.java | 67 ++++++++++----------
1 file changed, 33 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/e2aa1c4c/src/main/java/org/codehaus/groovy/classgen/Verifier.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/Verifier.java b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
index 2e5c851..923d228 100644
--- a/src/main/java/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
@@ -713,19 +713,11 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
getterModifiers = ~Modifier.FINAL & getterModifiers;
}
if (getterBlock != null) {
- MethodNode getter =
- new MethodNode(getterName, getterModifiers, node.getType(), Parameter.EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, getterBlock);
- getter.setSynthetic(true);
- addPropertyMethod(getter);
- visitMethod(getter);
+ visitGetter(node, getterBlock, getterModifiers, getterName);
if (ClassHelper.boolean_TYPE == node.getType() || ClassHelper.Boolean_TYPE == node.getType()) {
String secondGetterName = "is" + capitalize(name);
- MethodNode secondGetter =
- new MethodNode(secondGetterName, getterModifiers, node.getType(), Parameter.EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, getterBlock);
- secondGetter.setSynthetic(true);
- addPropertyMethod(secondGetter);
- visitMethod(secondGetter);
+ visitGetter(node, getterBlock, getterModifiers, secondGetterName);
}
}
if (setterBlock != null) {
@@ -738,6 +730,14 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
}
}
+ private void visitGetter(PropertyNode node, Statement getterBlock, int getterModifiers, String secondGetterName) {
+ MethodNode secondGetter =
+ new MethodNode(secondGetterName, getterModifiers, node.getType(), Parameter.EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, getterBlock);
+ secondGetter.setSynthetic(true);
+ addPropertyMethod(secondGetter);
+ visitMethod(secondGetter);
+ }
+
protected void addPropertyMethod(MethodNode method) {
classNode.addMethod(method);
// GROOVY-4415 / GROOVY-4645: check that there's no abstract method which corresponds to this one
@@ -915,22 +915,10 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
);
k++;
} else if (parameter.hasInitialExpression()) {
- newParams[index++] = parameter;
- arguments.addExpression(
- new CastExpression(
- parameter.getType(),
- new VariableExpression(parameter.getName())
- )
- );
+ index = addExpression(newParams, arguments, index, parameter);
k++;
} else {
- newParams[index++] = parameter;
- arguments.addExpression(
- new CastExpression(
- parameter.getType(),
- new VariableExpression(parameter.getName())
- )
- );
+ index = addExpression(newParams, arguments, index, parameter);
}
}
}
@@ -944,6 +932,17 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
}
}
+ private int addExpression(Parameter[] newParams, ArgumentListExpression arguments, int index, Parameter parameter) {
+ newParams[index++] = parameter;
+ arguments.addExpression(
+ new CastExpression(
+ parameter.getType(),
+ new VariableExpression(parameter.getName())
+ )
+ );
+ return index;
+ }
+
protected void addClosureCode(InnerClassNode node) {
// add a new invoke
}
@@ -1264,11 +1263,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
Map genericsSpec = createGenericsSpec(sn, oldGenericsSpec);
List<MethodNode> classMethods = sn.getMethods();
// original class causing bridge methods for methods in super class
- for (Object declaredMethod : declaredMethods) {
- MethodNode method = (MethodNode) declaredMethod;
- if (method.isStatic()) continue;
- storeMissingCovariantMethods(classMethods, method, methodsToAdd, genericsSpec, false);
- }
+ storeMissingCovariantMethods(declaredMethods, methodsToAdd, genericsSpec, classMethods);
// super class causing bridge methods for abstract methods in original class
if (!abstractMethods.isEmpty()) {
for (Object classMethod : classMethods) {
@@ -1285,16 +1280,20 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
for (ClassNode anInterface : interfaces) {
List interfacesMethods = anInterface.getMethods();
Map genericsSpec = createGenericsSpec(anInterface, oldGenericsSpec);
- for (Object declaredMethod : declaredMethods) {
- MethodNode method = (MethodNode) declaredMethod;
- if (method.isStatic()) continue;
- storeMissingCovariantMethods(interfacesMethods, method, methodsToAdd, genericsSpec, false);
- }
+ storeMissingCovariantMethods(declaredMethods, methodsToAdd, genericsSpec, interfacesMethods);
addCovariantMethods(anInterface, declaredMethods, abstractMethods, methodsToAdd, genericsSpec);
}
}
+ private void storeMissingCovariantMethods(List declaredMethods, Map methodsToAdd, Map genericsSpec, List<MethodNode> methodNodeList) {
+ for (Object declaredMethod : declaredMethods) {
+ MethodNode method = (MethodNode) declaredMethod;
+ if (method.isStatic()) continue;
+ storeMissingCovariantMethods(methodNodeList, method, methodsToAdd, genericsSpec, false);
+ }
+ }
+
private MethodNode getCovariantImplementation(final MethodNode oldMethod, final MethodNode overridingMethod, Map genericsSpec, boolean ignoreError) {
// method name
if (!oldMethod.getName().equals(overridingMethod.getName())) return null;