protected String _case( JvmConstructor input, XConstructorCall context, EReference ref, JvmFeatureDescription jvmFeatureDescription) { List<XExpression> arguments = context.getArguments(); if (!isValidNumberOfArguments(input, arguments)) return INVALID_NUMBER_OF_ARGUMENTS; // expected constructor type argument count is the sum of the declaring type's type parameters // and the constructors type parameters int expectedTypeArguments = input.getTypeParameters().size() + ((JvmTypeParameterDeclarator) input.getDeclaringType()).getTypeParameters().size(); if ((!context.getTypeArguments().isEmpty()) // raw type or inferred arguments && expectedTypeArguments != context.getTypeArguments().size()) return INVALID_NUMBER_OF_TYPE_ARGUMENTS; // TODO check type parameter bounds against type arguments if (!areArgumentTypesValid(input, arguments)) return INVALID_ARGUMENT_TYPES; return null; }