diff --git a/compiler/frontend/src/jet/Arrays.jet b/compiler/frontend/src/jet/Arrays.jet index 1d98819bfbd4a..c23f9f60cebf4 100644 --- a/compiler/frontend/src/jet/Arrays.jet +++ b/compiler/frontend/src/jet/Arrays.jet @@ -1,6 +1,6 @@ package jet -public fun arrayOfNulls(public val size : Int) : Array +public fun arrayOfNulls(public size : Int) : Array public class Array(public val size : Int, init : (Int) -> T) { public fun get(index : Int) : T diff --git a/compiler/frontend/src/jet/Numbers.jet b/compiler/frontend/src/jet/Numbers.jet index 08c3c9614e74b..728d49f64d9f5 100644 --- a/compiler/frontend/src/jet/Numbers.jet +++ b/compiler/frontend/src/jet/Numbers.jet @@ -87,7 +87,7 @@ public class Double : Number, Comparable { public override fun toByte() : Byte public override fun hashCode() : Int - public override fun equals(val other : Any?) : Boolean + public override fun equals(other : Any?) : Boolean } public class Float : Number, Comparable { @@ -161,7 +161,7 @@ public class Float : Number, Comparable { public override fun toByte() : Byte public override fun hashCode() : Int - public override fun equals(val other : Any?) : Boolean + public override fun equals(other : Any?) : Boolean } public class Long : Number, Comparable { @@ -243,7 +243,7 @@ public class Long : Number, Comparable { public override fun toByte() : Byte public override fun hashCode() : Int - public override fun equals(val other : Any?) : Boolean + public override fun equals(other : Any?) : Boolean } public class Int : Number, Comparable { @@ -325,7 +325,7 @@ public class Int : Number, Comparable { public override fun toByte() : Byte public override fun hashCode() : Int - public override fun equals(val other : Any?) : Boolean + public override fun equals(other : Any?) : Boolean } public class Char : Number, Comparable { @@ -393,7 +393,7 @@ public class Char : Number, Comparable { public override fun toByte() : Byte public override fun hashCode() : Int - public override fun equals(val other : Any?) : Boolean + public override fun equals(other : Any?) : Boolean } public class Short : Number, Comparable { @@ -467,7 +467,7 @@ public class Short : Number, Comparable { public override fun toByte() : Byte public override fun hashCode() : Int - public override fun equals(val other : Any?) : Boolean + public override fun equals(other : Any?) : Boolean } public class Byte : Number, Comparable { @@ -541,5 +541,5 @@ public class Byte : Number, Comparable { public override fun toByte() : Byte public override fun hashCode() : Int - public override fun equals(val other : Any?) : Boolean + public override fun equals(other : Any?) : Boolean } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index c6b502721e2f4..fb8f61fe11304 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -474,6 +474,7 @@ public interface Errors { DiagnosticFactory3 INVISIBLE_SETTER = DiagnosticFactory3.create(ERROR); DiagnosticFactory1 VAL_OR_VAR_ON_LOOP_PARAMETER = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 VAL_OR_VAR_ON_FUN_PARAMETER = DiagnosticFactory1.create(ERROR); // Backing fields diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index 5b3739e57d3ce..882d7b478f6af 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -180,6 +180,7 @@ public String render(@NotNull Collection tokens) { MAP.put(VARIABLE_EXPECTED, "Variable expected"); MAP.put(VAL_OR_VAR_ON_LOOP_PARAMETER, "''{0}'' on loop parameter is not allowed", TO_STRING); + MAP.put(VAL_OR_VAR_ON_FUN_PARAMETER, "''{0}'' on function parameter is not allowed", TO_STRING); MAP.put(INITIALIZATION_USING_BACKING_FIELD_CUSTOM_SETTER, "This property has a custom setter, so initialization using backing field required", NAME); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 2ba629d984676..215ca98f0b419 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -38,6 +38,7 @@ import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; +import org.jetbrains.jet.lexer.JetKeywordToken; import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.util.lazy.RecursionIntolerantLazyValue; import org.jetbrains.jet.util.lazy.RecursionIntolerantLazyValueWithDefault; @@ -440,7 +441,7 @@ private List resolveValueParameters( BindingTrace trace ) { List result = new ArrayList(); - for (int i = 0, valueParametersSize = valueParameters.size(); i < valueParametersSize; i++) { + for (int i = 0; i < valueParameters.size(); i++) { JetParameter valueParameter = valueParameters.get(i); JetTypeReference typeReference = valueParameter.getTypeReference(); @@ -453,6 +454,13 @@ private List resolveValueParameters( type = typeResolver.resolveType(parameterScope, typeReference, trace, true); } + if (!(functionDescriptor instanceof ConstructorDescriptor)) { + ASTNode valOrVarNode = valueParameter.getValOrVarNode(); + if (valOrVarNode != null) { + trace.report(VAL_OR_VAR_ON_FUN_PARAMETER.on(valOrVarNode.getPsi(), ((JetKeywordToken) valOrVarNode.getElementType()))); + } + } + ValueParameterDescriptor valueParameterDescriptor = resolveValueParameterDescriptor(parameterScope, functionDescriptor, valueParameter, i, type, trace); parameterScope.addVariableDescriptor(valueParameterDescriptor); @@ -477,7 +485,7 @@ public MutableValueParameterDescriptor resolveValueParameterDescriptor( index, annotationResolver.resolveAnnotations(scope, valueParameter.getModifierList(), trace), JetPsiUtil.safeName(valueParameter.getName()), - valueParameter.isMutable(), + false, variableType, valueParameter.getDefaultValue() != null, varargElementType diff --git a/compiler/testData/diagnostics/tests/declarationChecks/valVarFunctionParameter.kt b/compiler/testData/diagnostics/tests/declarationChecks/valVarFunctionParameter.kt new file mode 100644 index 0000000000000..70cd086ce7338 --- /dev/null +++ b/compiler/testData/diagnostics/tests/declarationChecks/valVarFunctionParameter.kt @@ -0,0 +1,12 @@ +fun f( + val a: Int, + var b: Int, + c: Int, + vararg var d: Int, + vararg val e: Int, + vararg f: Int +) { + + + a + b + c + d[0] + e[0] + f[0] // to avoid 'unused parameter' +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 2265f6d39c0af..c1dcf15824488 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1543,6 +1543,11 @@ public void testRedeclarationsInMultiDecl() throws Exception { doTest("compiler/testData/diagnostics/tests/declarationChecks/RedeclarationsInMultiDecl.kt"); } + @TestMetadata("valVarFunctionParameter.kt") + public void testValVarFunctionParameter() throws Exception { + doTest("compiler/testData/diagnostics/tests/declarationChecks/valVarFunctionParameter.kt"); + } + @TestMetadata("VarianceOnFunctionAndPropertyTypeParameters.kt") public void testVarianceOnFunctionAndPropertyTypeParameters() throws Exception { doTest("compiler/testData/diagnostics/tests/declarationChecks/VarianceOnFunctionAndPropertyTypeParameters.kt");