diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java index 9cd7db2a582..a10414495bf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java @@ -124,6 +124,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito } scope.addVariableDescriptor(propertyDescriptor); + ModifiersChecker.create(context.trace).checkModifiersForLocalDeclaration(property); return DataFlowUtils.checkStatementType(property, context, context.dataFlowInfo); } @@ -146,10 +147,13 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito @Override public JetTypeInfo visitNamedFunction(JetNamedFunction function, ExpressionTypingContext context) { - SimpleFunctionDescriptor functionDescriptor = context.expressionTypingServices.getDescriptorResolver().resolveFunctionDescriptor(scope.getContainingDeclaration(), scope, function, context.trace); + SimpleFunctionDescriptor functionDescriptor = context.expressionTypingServices.getDescriptorResolver(). + resolveFunctionDescriptor(scope.getContainingDeclaration(), scope, function, context.trace); + scope.addFunctionDescriptor(functionDescriptor); JetScope functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(context.scope, functionDescriptor, context.trace); context.expressionTypingServices.checkFunctionReturnType(functionInnerScope, function, functionDescriptor, context.dataFlowInfo, null, context.trace); + ModifiersChecker.create(context.trace).checkModifiersForLocalDeclaration(function); return DataFlowUtils.checkStatementType(function, context, context.dataFlowInfo); } diff --git a/compiler/testData/codegen/script/fib.lang.kt b/compiler/testData/codegen/script/fib.lang.kt index bfcca90b6a3..fe7143e7cb2 100644 --- a/compiler/testData/codegen/script/fib.lang.kt +++ b/compiler/testData/codegen/script/fib.lang.kt @@ -5,4 +5,4 @@ fun fib(n: Int): Int { return v } -public val result = fib(num) +val result = fib(num) diff --git a/compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.kt b/compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.kt new file mode 100644 index 00000000000..8d5cfea8e8f --- /dev/null +++ b/compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.kt @@ -0,0 +1,12 @@ +package d + +class T { + fun baz() = 1 +} + +fun foo() { + public val i = 11 + abstract val j + override fun T.baz() = 2 + private fun bar() = 2 +} \ No newline at end of file diff --git a/compiler/testData/readJavaBinaryClass/MethodTypePTwoUpperBounds.kt b/compiler/testData/readJavaBinaryClass/MethodTypePTwoUpperBounds.kt index 9e475eaac76..63a9e56ce05 100644 --- a/compiler/testData/readJavaBinaryClass/MethodTypePTwoUpperBounds.kt +++ b/compiler/testData/readJavaBinaryClass/MethodTypePTwoUpperBounds.kt @@ -2,6 +2,5 @@ package test public open class MethodTypePTwoUpperBounds() : java.lang.Object() { public open fun foo(): Unit where T : Cloneable?, T : Runnable? { - override fun run() = throw UnsupportedOperationException() } } diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 127378e4429..c4d8484b46f 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1098,6 +1098,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/declarationChecks/kt559.kt"); } + @TestMetadata("localDeclarationModifiers.kt") + public void testLocalDeclarationModifiers() throws Exception { + doTest("compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.kt"); + } + @TestMetadata("LocalVariableWithNoTypeInformation.kt") public void testLocalVariableWithNoTypeInformation() throws Exception { doTest("compiler/testData/diagnostics/tests/declarationChecks/LocalVariableWithNoTypeInformation.kt"); @@ -3075,7 +3080,6 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage suite.addTestSuite(DataFlow.class); suite.addTestSuite(DataFlowInfoTraversal.class); suite.addTest(DeclarationChecks.innerSuite()); - suite.addTestSuite(DeclarationChecks.class); suite.addTestSuite(Enum.class); suite.addTestSuite(Extensions.class); suite.addTestSuite(Generics.class); diff --git a/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateDownTos.kt b/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateDownTos.kt index 29bd1eddba9..9d21c63db03 100644 --- a/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateDownTos.kt +++ b/libraries/stdlib/test/org/jetbrains/kotlin/tools/GenerateDownTos.kt @@ -6,7 +6,7 @@ import java.io.PrintWriter private fun generateDownTos(outputFile: File, header: String) { - private fun getMaxType(fromType: String, toType: String): String { + fun getMaxType(fromType: String, toType: String): String { return when { fromType == "Double" || toType == "Double" -> "Double" fromType == "Float" || toType == "Float" -> "Float" @@ -18,7 +18,7 @@ private fun generateDownTos(outputFile: File, header: String) { } } - private fun generateDownTo(writer: PrintWriter, fromType: String, toType: String) { + fun generateDownTo(writer: PrintWriter, fromType: String, toType: String) { val elementType = getMaxType(fromType, toType) val rangeType = elementType + "Range" val fromExpr = "this${ if (elementType == fromType) "" else ".to$elementType()" }"