From 21fa398380725f5c39c02d39179388f9c3f118ee Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 5 Jul 2013 20:19:22 +0400 Subject: [PATCH] KT-3750 When without else #KT-3750 Fixed --- .../jet/lang/resolve/ControlFlowAnalyzer.java | 1 + .../checker/WhenInEnumInExtensionProperty.kt | 15 +++++++++++++++ .../outOfBlock/InGlobalPropertyWithGetter.kt | 9 +++++++++ .../jet/checkers/JetPsiCheckerTestGenerated.java | 5 +++++ .../codeInsight/OutOfBlockModificationTest.java | 4 ++++ 5 files changed, 34 insertions(+) create mode 100644 idea/testData/checker/WhenInEnumInExtensionProperty.kt create mode 100644 idea/testData/codeInsight/outOfBlock/InGlobalPropertyWithGetter.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java index b79eb0bb056..3bf6a586695 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java @@ -46,6 +46,7 @@ public class ControlFlowAnalyzer { public void process(@NotNull BodiesResolveContext bodiesResolveContext) { for (JetFile file : bodiesResolveContext.getFiles()) { + if (!bodiesResolveContext.completeAnalysisNeeded(file)) continue; checkDeclarationContainer(file); } for (JetClass aClass : bodiesResolveContext.getClasses().keySet()) { diff --git a/idea/testData/checker/WhenInEnumInExtensionProperty.kt b/idea/testData/checker/WhenInEnumInExtensionProperty.kt new file mode 100644 index 00000000000..5217d16fdf7 --- /dev/null +++ b/idea/testData/checker/WhenInEnumInExtensionProperty.kt @@ -0,0 +1,15 @@ +// KT-3750 When without else + +enum class A { + e1 + e2 +} +class B(val a: A) +val B.foo: Int + get() { + // Check absence [NO_ELSE_IN_WHEN] error + return when (a) { + A.e1 -> 1 + A.e2 -> 3 + } + } \ No newline at end of file diff --git a/idea/testData/codeInsight/outOfBlock/InGlobalPropertyWithGetter.kt b/idea/testData/codeInsight/outOfBlock/InGlobalPropertyWithGetter.kt new file mode 100644 index 00000000000..74c94a1805b --- /dev/null +++ b/idea/testData/codeInsight/outOfBlock/InGlobalPropertyWithGetter.kt @@ -0,0 +1,9 @@ +// FALSE +class B(val a: A) +val B.foo: Int + get() { + return when (a) { + A.e1 -> 1 + A.e2 -> 4 + } + } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java index 306bf099898..38c3a9699eb 100644 --- a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java @@ -268,6 +268,11 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest { doTest("idea/testData/checker/When.kt"); } + @TestMetadata("WhenInEnumInExtensionProperty.kt") + public void testWhenInEnumInExtensionProperty() throws Exception { + doTest("idea/testData/checker/WhenInEnumInExtensionProperty.kt"); + } + } @TestMetadata("idea/testData/checker/regression") diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OutOfBlockModificationTest.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OutOfBlockModificationTest.java index 3acf3e9fab3..1af69dc5333 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OutOfBlockModificationTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OutOfBlockModificationTest.java @@ -59,6 +59,10 @@ public class OutOfBlockModificationTest extends LightCodeInsightFixtureTestCase doTest(); } + public void testInGlobalPropertyWithGetter() { + doTest(); + } + public void testInMethod() { doTest(); }