diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassBase.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassBase.kt new file mode 100644 index 00000000000..5875f99ead4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassBase.kt @@ -0,0 +1,10 @@ +open class Base(x: String, y: Int) + +fun test(x: Any, y: Int?) { + if (x !is String) return + if (y == null) return + + class Local: Base(x, y) { + } +} + diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDefaultParameters.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDefaultParameters.kt new file mode 100644 index 00000000000..8795f2753e1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDefaultParameters.kt @@ -0,0 +1,8 @@ +fun test(x: Any) { + if (x !is String) return + + class Local(s: String = x) { + fun foo(s: String = x): String = s + } +} + diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegatedProperties.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegatedProperties.kt new file mode 100644 index 00000000000..dcf3819d921 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegatedProperties.kt @@ -0,0 +1,16 @@ +class Del { + fun get(_this: Any?, p: PropertyMetadata): Int = 0 +} + +fun df(del: Del): Del = del + + +fun test(del: Any?) { + if (del !is Del) return + + class Local { + val delegatedVal by df(del) + val delegatedVal1: Int by df(del) + } +} + diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegation.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegation.kt new file mode 100644 index 00000000000..c787dedd627 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegation.kt @@ -0,0 +1,11 @@ +trait D { + fun foo() {} +} + +fun test(d: Any?) { + if (d !is D) return + + class Local : D by d { + } +} + diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassFunctions.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassFunctions.kt new file mode 100644 index 00000000000..ef8d270c722 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassFunctions.kt @@ -0,0 +1,18 @@ +trait D { + fun foo(): String = "" +} + +fun test(d: Any?) { + if (d !is D) return + + class Local { + fun f() { + d.foo() + } + + fun f1() = d.foo() + + fun f2(): String = d.foo() + } +} + diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassInMemberOfLocalClass.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassInMemberOfLocalClass.kt new file mode 100644 index 00000000000..3fa684b6ba2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassInMemberOfLocalClass.kt @@ -0,0 +1,16 @@ +fun test(x: Any) { + if (x !is String) return + + class LocalOuter { + fun foo(y: Any) { + if (y !is String) return + class Local { + { + x.length + y.length + } + } + } + } +} + diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/LocalClass.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassInitializer.kt similarity index 100% rename from compiler/testData/diagnostics/tests/dataFlow/local/LocalClass.kt rename to compiler/testData/diagnostics/tests/dataFlow/local/LocalClassInitializer.kt diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/PropertyInLocalClass.kt b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassProperty.kt similarity index 56% rename from compiler/testData/diagnostics/tests/dataFlow/local/PropertyInLocalClass.kt rename to compiler/testData/diagnostics/tests/dataFlow/local/LocalClassProperty.kt index 9cfe397eb70..d16f0448fbe 100644 --- a/compiler/testData/diagnostics/tests/dataFlow/local/PropertyInLocalClass.kt +++ b/compiler/testData/diagnostics/tests/dataFlow/local/LocalClassProperty.kt @@ -1,9 +1,12 @@ fun test(x: Any?) { if (x !is String) return + class C { val v = x.length - } - object { - val v = x.length + + val vGet: Int + get() = x.length + + val s: String = x } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/dataFlow/local/NestedLocalClass.kt b/compiler/testData/diagnostics/tests/dataFlow/local/NestedLocalClass.kt new file mode 100644 index 00000000000..4bff6de4554 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlow/local/NestedLocalClass.kt @@ -0,0 +1,12 @@ +fun test(x: Any) { + if (x !is String) return + + class LocalOuter { + inner class Local { + { + x.length + } + } + } +} + diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index fcc1b171826..4d2108677ba 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1471,9 +1471,44 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/dataFlow/local/kt2835.kt"); } - @TestMetadata("LocalClass.kt") - public void testLocalClass() throws Exception { - doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClass.kt"); + @TestMetadata("LocalClassBase.kt") + public void testLocalClassBase() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassBase.kt"); + } + + @TestMetadata("LocalClassDefaultParameters.kt") + public void testLocalClassDefaultParameters() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDefaultParameters.kt"); + } + + @TestMetadata("LocalClassDelegatedProperties.kt") + public void testLocalClassDelegatedProperties() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegatedProperties.kt"); + } + + @TestMetadata("LocalClassDelegation.kt") + public void testLocalClassDelegation() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassDelegation.kt"); + } + + @TestMetadata("LocalClassFunctions.kt") + public void testLocalClassFunctions() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassFunctions.kt"); + } + + @TestMetadata("LocalClassInMemberOfLocalClass.kt") + public void testLocalClassInMemberOfLocalClass() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassInMemberOfLocalClass.kt"); + } + + @TestMetadata("LocalClassInitializer.kt") + public void testLocalClassInitializer() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassInitializer.kt"); + } + + @TestMetadata("LocalClassProperty.kt") + public void testLocalClassProperty() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalClassProperty.kt"); } @TestMetadata("LocalObject.kt") @@ -1486,9 +1521,9 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/dataFlow/local/LocalObjectDelegation.kt"); } - @TestMetadata("PropertyInLocalClass.kt") - public void testPropertyInLocalClass() throws Exception { - doTest("compiler/testData/diagnostics/tests/dataFlow/local/PropertyInLocalClass.kt"); + @TestMetadata("NestedLocalClass.kt") + public void testNestedLocalClass() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlow/local/NestedLocalClass.kt"); } }