Repository: groovy Updated Branches: refs/heads/master 1937901a6 -> 5030e401a
Minor refactoring: remove duplicated code of `ResolveVisitor` Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/5030e401 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/5030e401 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/5030e401 Branch: refs/heads/master Commit: 5030e401a141165dd60a603b62dd0351b2f15f3f Parents: 1937901 Author: sunlan <[email protected]> Authored: Wed Feb 28 11:35:16 2018 +0800 Committer: sunlan <[email protected]> Committed: Wed Feb 28 11:35:16 2018 +0800 ---------------------------------------------------------------------- .../codehaus/groovy/control/ResolveVisitor.java | 47 ++++++++------------ 1 file changed, 19 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/5030e401/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java index 922c528..a06ad99 100644 --- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java +++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java @@ -367,28 +367,14 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer { // name in X. // GROOVY-4043: Do this check up the hierarchy, if needed Map<String, ClassNode> hierClasses = new LinkedHashMap<String, ClassNode>(); - ClassNode val; - for(ClassNode classToCheck = currentClass; classToCheck != ClassHelper.OBJECT_TYPE; + for(ClassNode classToCheck = currentClass; classToCheck != ClassHelper.OBJECT_TYPE; classToCheck = classToCheck.getSuperClass()) { if(classToCheck == null || hierClasses.containsKey(classToCheck.getName())) break; hierClasses.put(classToCheck.getName(), classToCheck); } for (ClassNode classToCheck : hierClasses.values()) { - val = new ConstructedNestedClass(classToCheck,type.getName()); - if (resolveFromCompileUnit(val)) { - type.setRedirect(val); - return true; - } - // also check interfaces in case we have interfaces with nested classes - for (ClassNode next : classToCheck.getAllInterfaces()) { - if (type.getName().contains(next.getName())) continue; - val = new ConstructedNestedClass(next,type.getName()); - if (resolve(val, false, false, false)) { - type.setRedirect(val); - return true; - } - } + if (setRedirect(type, classToCheck)) return true; } // another case we want to check here is if we are in a @@ -416,22 +402,27 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer { } // most outer class is now element 0 for (ClassNode testNode : outerClasses) { - val = new ConstructedNestedClass(testNode,type.getName()); - if (resolveFromCompileUnit(val)) { + if (setRedirect(type, testNode)) return true; + } + + return false; + } + + private boolean setRedirect(ClassNode type, ClassNode classToCheck) { + ClassNode val = new ConstructedNestedClass(classToCheck, type.getName()); + if (resolveFromCompileUnit(val)) { + type.setRedirect(val); + return true; + } + // also check interfaces in case we have interfaces with nested classes + for (ClassNode next : classToCheck.getAllInterfaces()) { + if (type.getName().contains(next.getName())) continue; + val = new ConstructedNestedClass(next, type.getName()); + if (resolve(val, false, false, false)) { type.setRedirect(val); return true; } - // also check interfaces in case we have interfaces with nested classes - for (ClassNode next : testNode.getAllInterfaces()) { - if (type.getName().contains(next.getName())) continue; - val = new ConstructedNestedClass(next,type.getName()); - if (resolve(val, false, false, false)) { - type.setRedirect(val); - return true; - } - } } - return false; }
