@Override public void endVisit(SuperMethodInvocation node) { maybeCastArguments(node.getArguments(), node.getMethodBinding()); if (returnValueNeedsIntCast(node)) { addCast(node); } }
@Override public void endVisit(SuperMethodInvocation node) { Name qualifier = node.getQualifier(); if (qualifier == null) { return; } IMethodBinding method = node.getMethodBinding(); ITypeBinding exprType = node.getTypeBinding(); IVariableBinding var = TreeUtil.getVariableBinding(qualifier); assert var != null : "Expected qualifier to be a variable"; ITypeBinding qualifierType = var.getType(); SuperMethodBindingPair superMethod = new SuperMethodBindingPair(qualifierType, method); superMethods.add(superMethod); FunctionBinding binding = new FunctionBinding(getSuperFunctionName(superMethod), exprType, qualifierType); binding.addParameters(qualifierType, typeEnv.getIdType()); binding.addParameters(method.getParameterTypes()); FunctionInvocation invocation = new FunctionInvocation(binding, exprType); List<Expression> args = invocation.getArguments(); args.add(TreeUtil.remove(qualifier)); String selectorExpr = UnicodeUtils.format("@selector(%s)", nameTable.getMethodSelector(method)); args.add(new NativeExpression(selectorExpr, typeEnv.getIdType())); TreeUtil.copyList(node.getArguments(), args); node.replaceWith(invocation); }