public IFeatureCallArguments createExpressionArguments(XExpression expression, AbstractLinkingCandidate<?> candidate) { JvmIdentifiableElement feature = candidate.getFeature(); if (feature instanceof JvmExecutable) { JvmExecutable executable = (JvmExecutable) feature; return createArgumentsForExecutable(executable.isVarArgs(), candidate.getArguments(), executable.getParameters(), candidate.hasReceiver(), candidate.getState().getReferenceOwner()); } else { if (expression instanceof XAssignment) { XAssignment assignment = (XAssignment) expression; LightweightTypeReference featureType = candidate.getActualType(candidate.getFeature(), true); return new AssignmentFeatureCallArguments(assignment.getValue(), featureType); } else { return new StandardFeatureCallArguments(candidate.getArguments(), Collections.<JvmFormalParameter>emptyList(), candidate.hasReceiver(), candidate.getState().getReferenceOwner()); } } }