diff --git a/java.editor/src/org/netbeans/modules/editor/java/Utilities.java b/java.editor/src/org/netbeans/modules/editor/java/Utilities.java --- a/java.editor/src/org/netbeans/modules/editor/java/Utilities.java +++ b/java.editor/src/org/netbeans/modules/editor/java/Utilities.java @@ -690,24 +690,24 @@ return false; } - private static String varNameForPath(TreePath path) { + private static Pair varNameForPath(TreePath path) { if (path == null) return null; Tree tree = path.getLeaf(); if (tree.getKind() == Kind.VARIABLE) { if (((VariableTree)tree).getInitializer() != null) { - String name = varNameForTree(((VariableTree)tree).getInitializer()); + Pair name = varNameForTree(((VariableTree)tree).getInitializer()); if (name != null) { return name; } } if (path.getParentPath().getLeaf().getKind() == Kind.ENHANCED_FOR_LOOP && ((EnhancedForLoopTree)path.getParentPath().getLeaf()).getVariable() == tree) { - String name = varNameForTree(((EnhancedForLoopTree)path.getParentPath().getLeaf()).getExpression()); + Pair name = varNameForTree(((EnhancedForLoopTree)path.getParentPath().getLeaf()).getExpression()); if (name != null) { - String singular = getSingular(name); + String singular = getSingular(name.first()); if (singular != null) { - return singular; + return Pair.of(singular, name.second()); } } } @@ -715,39 +715,50 @@ } return varNameForTree(path.getLeaf()); } + + private static Pair firstToLower(Pair p) { + return Pair.of(firstToLower(p.first()), p.second()); + } - private static String varNameForTree(Tree et) { + private static Pair varNameForTree(Tree et) { if (et == null) return null; switch (et.getKind()) { case IDENTIFIER: - return ((IdentifierTree) et).getName().toString(); + return Pair.of(((IdentifierTree) et).getName().toString(), et); case MEMBER_SELECT: - return ((MemberSelectTree) et).getIdentifier().toString(); - case METHOD_INVOCATION: - return varNameForTree(((MethodInvocationTree) et).getMethodSelect()); + return Pair.of(((MemberSelectTree) et).getIdentifier().toString(), et); + case METHOD_INVOCATION: { + MethodInvocationTree mit = (MethodInvocationTree)et; + return mit.getMethodSelect() != null && mit.getMethodSelect().getKind() == Kind.IDENTIFIER ? + Pair.of(varNameForTree(((MethodInvocationTree) et).getMethodSelect()).first(), et) : + varNameForTree(((MethodInvocationTree) et).getMethodSelect()); + } case NEW_CLASS: - return firstToLower(varNameForTree(((NewClassTree) et).getIdentifier())); - case PARAMETERIZED_TYPE: - return firstToLower(varNameForTree(((ParameterizedTypeTree) et).getType())); + return Pair.of(firstToLower(varNameForTree(((NewClassTree) et).getIdentifier())).first(), + et); + case PARAMETERIZED_TYPE: + return Pair.of(firstToLower(varNameForTree(((ParameterizedTypeTree) et).getType()).first()), + et); case STRING_LITERAL: String name = guessLiteralName((String) ((LiteralTree) et).getValue()); if (name == null) { - return firstToLower(String.class.getSimpleName()); + return Pair.of(firstToLower(String.class.getSimpleName()), et); } else { - return firstToLower(name); + return Pair.of(firstToLower(name), et); } case VARIABLE: - return ((VariableTree) et).getName().toString(); - case ARRAY_ACCESS: - name = varNameForTree(((ArrayAccessTree)et).getExpression()); - if (name != null) { - String singular = getSingular(name); + return Pair.of(((VariableTree) et).getName().toString(), et); + case ARRAY_ACCESS: { + Pair r = varNameForTree(((ArrayAccessTree)et).getExpression()); + if (r != null) { + String singular = getSingular(r.first()); if (singular != null) { - return singular; + return Pair.of(singular, r.second()); } } return null; + } case ASSIGNMENT: if (((AssignmentTree)et).getExpression() != null) { return varNameForTree(((AssignmentTree)et).getExpression()); @@ -768,18 +779,35 @@ return null; } + /** + * May need proper context to adjust the name. Please use the newer variant. + * @deprecated use {@link #adjustName(java.lang.String, com.sun.source.tree.Tree) + */ + @Deprecated static String adjustName(String name) { + return adjustName(name, null); + } + + private static String adjustName(Pair name) { + return adjustName(name.first(), name.second()); + } + + static String adjustName(String name, Tree context) { if (name == null || ERROR.contentEquals(name)) return null; String shortName = null; - if (name.startsWith("get") && name.length() > 3) { - shortName = name.substring(3); - } - - if (name.startsWith("is") && name.length() > 2) { - shortName = name.substring(2); + if (context == null || + context.getKind() == Tree.Kind.METHOD_INVOCATION || + context.getKind() == Tree.Kind.MEMBER_SELECT) { + if (name.startsWith("get") && name.length() > 3) { + shortName = name.substring(3); + } + + if (name.startsWith("is") && name.length() > 2) { + shortName = name.substring(2); + } } if (shortName != null) {