Deprecations: data class should now have at least one primary constructor parameter, parameters should be val / var and not vararg.

This commit is contained in:
Mikhail Glukhikh
2015-09-22 13:25:37 +03:00
parent 3d6253c27f
commit 55c7df8b8d
29 changed files with 75 additions and 180 deletions
@@ -382,6 +382,10 @@ public interface Errors {
DiagnosticFactory2<JetClassOrObject, Collection<? extends CallableMemberDescriptor>, Integer> DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES =
DiagnosticFactory2.create(WARNING, DECLARATION_NAME);
DiagnosticFactory0<PsiElement> DATA_CLASS_WITHOUT_PARAMETERS = DiagnosticFactory0.create(WARNING);
DiagnosticFactory0<JetParameter> DATA_CLASS_VARARG_PARAMETER = DiagnosticFactory0.create(WARNING);
DiagnosticFactory0<JetParameter> DATA_CLASS_NOT_PROPERTY_PARAMETER = DiagnosticFactory0.create(WARNING);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Errors/warnings inside code blocks
@@ -622,6 +622,10 @@ public class DefaultErrorMessages {
"Names of the parameter #{1} conflict in the following members of supertypes: ''{0}''. " +
"This may cause problems when calling this function with named arguments.", commaSeparated(FQ_NAMES_IN_TYPES), TO_STRING);
MAP.put(DATA_CLASS_WITHOUT_PARAMETERS, "Data class without primary constructor parameters are deprecated");
MAP.put(DATA_CLASS_VARARG_PARAMETER, "Primary constructor vararg parameters are deprecated for data classes");
MAP.put(DATA_CLASS_NOT_PROPERTY_PARAMETER, "Primary constructor parameters without val / var are deprecated for data classes");
MAP.put(AMBIGUOUS_ANONYMOUS_TYPE_INFERRED, "Right-hand side has anonymous type. Please specify type explicitly", TO_STRING);
MAP.put(EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED,
@@ -36,6 +36,19 @@ public class DataClassAnnotationChecker : DeclarationChecker {
if (descriptor.getUnsubstitutedPrimaryConstructor() == null && descriptor.getConstructors().isNotEmpty()) {
diagnosticHolder.report(Errors.PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS.on(declaration.getNameIdentifier()));
}
val primaryConstructor = declaration.getPrimaryConstructor()
val parameters = primaryConstructor?.valueParameters ?: emptyList()
if (parameters.isEmpty()) {
diagnosticHolder.report(Errors.DATA_CLASS_WITHOUT_PARAMETERS.on(declaration.nameIdentifier!!))
}
for (parameter in parameters) {
if (parameter.isVarArg) {
diagnosticHolder.report(Errors.DATA_CLASS_VARARG_PARAMETER.on(parameter))
}
if (!parameter.hasValOrVar()) {
diagnosticHolder.report(Errors.DATA_CLASS_NOT_PROPERTY_PARAMETER.on(parameter))
}
}
}
}
}