@Override public boolean visit(MethodInvocation node) { List<IVariableBinding> path = OuterReferenceResolver.getPath(node); if (path != null) { node.setExpression(Name.newName(fixPath(path))); } return true; }
@Override public boolean visit(ThisExpression node) { List<IVariableBinding> path = OuterReferenceResolver.getPath(node); if (path != null) { node.replaceWith(Name.newName(fixPath(path))); } else { node.setQualifier(null); } return true; }
@Override public void endVisit(SuperMethodInvocation node) { List<IVariableBinding> path = OuterReferenceResolver.getPath(node); if (path != null) { // We substitute the qualifying type name with the outer variable name. node.setQualifier(Name.newName(fixPath(path))); } else { node.setQualifier(null); } }
@Override public boolean visit(SimpleName node) { List<IVariableBinding> path = OuterReferenceResolver.getPath(node); if (path != null) { if (path.size() == 1 && path.get(0).getConstantValue() != null) { IVariableBinding var = path.get(0); node.replaceWith(TreeUtil.newLiteral(var.getConstantValue())); } else { node.replaceWith(Name.newName(fixPath(path))); } } return true; }
private void addOuterArg( ClassInstanceCreation node, GeneratedMethodBinding binding, ITypeBinding declaringClass) { ITypeBinding type = node.getTypeBinding().getTypeDeclaration(); if (!OuterReferenceResolver.needsOuterParam(type)) { return; } Expression outerExpr = node.getExpression(); List<IVariableBinding> path = OuterReferenceResolver.getPath(node); Expression outerArg = null; if (outerExpr != null) { node.setExpression(null); outerArg = outerExpr; } else if (path != null) { outerArg = Name.newName(fixPath(path)); } else { outerArg = new ThisExpression(declaringClass); } node.getArguments().add(0, outerArg); binding.addParameter(0, declaringClass); }