From c5d49517288b9893ea180d4afa70a875cf9aee12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Wed, 1 Feb 2017 15:46:03 -0300 Subject: [PATCH] [java] Tidy up ClassScope code - Sibling node search cn be easier - Remove dead code in generic resolution - Make sure generics resolution goes up through nested classes --- .../pmd/lang/java/symboltable/ClassScope.java | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java index 52dfb9fb3f..91e842970a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/ClassScope.java @@ -19,7 +19,6 @@ import net.sourceforge.pmd.lang.java.ast.ASTBooleanLiteral; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; -import net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTExtendsList; import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter; import net.sourceforge.pmd.lang.java.ast.ASTFormalParameters; @@ -541,18 +540,14 @@ public class ClassScope extends AbstractJavaScope { types.addAll(firstParentOfType.findDescendantsOfType(ASTTypeParameter.class)); } - // then search class level types - ASTClassOrInterfaceDeclaration enclosingClassOrEnum = argument - .getFirstParentOfType(ASTClassOrInterfaceDeclaration.class); - if (enclosingClassOrEnum == null) { - argument.getFirstParentOfType(ASTEnumDeclaration.class); - } - ASTTypeParameters classLevelTypeParameters = null; - if (enclosingClassOrEnum != null) { - classLevelTypeParameters = enclosingClassOrEnum.getFirstChildOfType(ASTTypeParameters.class); - } - if (classLevelTypeParameters != null) { - types.addAll(classLevelTypeParameters.findDescendantsOfType(ASTTypeParameter.class)); + // then search class level types, from inner-most to outer-most + List enclosingClasses = argument + .getParentsOfType(ASTClassOrInterfaceDeclaration.class); + for (ASTClassOrInterfaceDeclaration enclosing : enclosingClasses) { + ASTTypeParameters classLevelTypeParameters = enclosing.getFirstChildOfType(ASTTypeParameters.class); + if (classLevelTypeParameters != null) { + types.addAll(classLevelTypeParameters.findDescendantsOfType(ASTTypeParameter.class)); + } } return resolveGenericType(typeImage, types); } @@ -576,14 +571,10 @@ public class ClassScope extends AbstractJavaScope { } private Node getNextSibling(Node current) { - Node nextSibling = null; - for (int i = 0; i < current.jjtGetParent().jjtGetNumChildren() - 1; i++) { - if (current.jjtGetParent().jjtGetChild(i) == current) { - nextSibling = current.jjtGetParent().jjtGetChild(i + 1); - break; - } + if (current.jjtGetParent().jjtGetNumChildren() > current.jjtGetChildIndex() + 1) { + return current.jjtGetParent().jjtGetChild(current.jjtGetChildIndex() + 1); } - return nextSibling; + return null; } public String toString() {