diff --git a/compiler/testData/diagnostics/tests/constructorConsistency/backing.kt b/compiler/testData/diagnostics/tests/constructorConsistency/backing.kt index 2d91912fc52..5104d0fe633 100644 --- a/compiler/testData/diagnostics/tests/constructorConsistency/backing.kt +++ b/compiler/testData/diagnostics/tests/constructorConsistency/backing.kt @@ -14,7 +14,13 @@ class My { field = value + if (w == "") 1 else 0 } + var m: Int = 2 + set + init { + x = 3 + m = 6 + // Writing properties using setters is dangerous y = 4 this.z = 5 diff --git a/compiler/testData/diagnostics/tests/constructorConsistency/backing.txt b/compiler/testData/diagnostics/tests/constructorConsistency/backing.txt index 00e5bd66391..e3e3fe88f8a 100644 --- a/compiler/testData/diagnostics/tests/constructorConsistency/backing.txt +++ b/compiler/testData/diagnostics/tests/constructorConsistency/backing.txt @@ -2,6 +2,7 @@ package public final class My { public constructor My() + public final var m: kotlin.Int public final val w: kotlin.String = "6" public final var x: kotlin.Int public final var y: kotlin.Int diff --git a/compiler/testData/diagnostics/tests/constructorConsistency/getset.kt b/compiler/testData/diagnostics/tests/constructorConsistency/getset.kt index 6586bd9b58e..609c67029fb 100644 --- a/compiler/testData/diagnostics/tests/constructorConsistency/getset.kt +++ b/compiler/testData/diagnostics/tests/constructorConsistency/getset.kt @@ -8,7 +8,16 @@ class My(var x: String) { val z: String + var d: String = "" + get + set + + val z1: String + init { + d = "d" + if (d != "") z1 = this.d else z1 = d + // Dangerous: setter! y = "x" // Dangerous: getter! diff --git a/compiler/testData/diagnostics/tests/constructorConsistency/getset.txt b/compiler/testData/diagnostics/tests/constructorConsistency/getset.txt index 8632704efdf..0e54ac67d06 100644 --- a/compiler/testData/diagnostics/tests/constructorConsistency/getset.txt +++ b/compiler/testData/diagnostics/tests/constructorConsistency/getset.txt @@ -2,9 +2,11 @@ package public final class My { public constructor My(/*0*/ x: kotlin.String) + public final var d: kotlin.String public final var x: kotlin.String public final var y: kotlin.String public final val z: kotlin.String + public final val z1: kotlin.String public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt b/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt index 5e1887e208e..6a646d957d0 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt @@ -44,6 +44,9 @@ const val delegated: Int by Delegate() const val withGetter: Int get() = 13 +const val withExplicitDefaultGetter: Int = 1 + get + fun foo(): Int { const val local: Int = 14 return 15 diff --git a/compiler/testData/diagnostics/tests/modifiers/const/applicability.txt b/compiler/testData/diagnostics/tests/modifiers/const/applicability.txt index d51e49c1668..83194ca3c22 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/applicability.txt +++ b/compiler/testData/diagnostics/tests/modifiers/const/applicability.txt @@ -11,6 +11,7 @@ private val privateTopLevel: kotlin.Int = 3 public const var topLeveLVar: kotlin.Int public const val topLevel: kotlin.Int = 0 public const val topLevelInferred: kotlin.Int = 1 +public const val withExplicitDefaultGetter: kotlin.Int = 1 public const val withGetter: kotlin.Int public fun foo(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/smartCasts/explicitDefaultGetter.kt b/compiler/testData/diagnostics/tests/smartCasts/explicitDefaultGetter.kt new file mode 100644 index 00000000000..82fc66eb9e4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/smartCasts/explicitDefaultGetter.kt @@ -0,0 +1,11 @@ +class ExplicitAccessorForAnnotation { + val tt: String? = "good" + get + + fun foo(): String { + if (tt is String) { + return tt + } + return "" + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/smartCasts/explicitDefaultGetter.txt b/compiler/testData/diagnostics/tests/smartCasts/explicitDefaultGetter.txt new file mode 100644 index 00000000000..a77e0580ffd --- /dev/null +++ b/compiler/testData/diagnostics/tests/smartCasts/explicitDefaultGetter.txt @@ -0,0 +1,10 @@ +package + +public final class ExplicitAccessorForAnnotation { + public constructor ExplicitAccessorForAnnotation() + public final val tt: kotlin.String? = "good" + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt index 1fb4e5719bd..17ace818ce2 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt @@ -4,6 +4,8 @@ fun foo() { @kotlin.jvm.JvmField val x = "A" } +annotation class DemoAnnotation + @JvmField abstract class C : I{ @@ -23,6 +25,22 @@ abstract class C : I{ val customGetter: String = "" get() = field + @JvmField + val explicitDefaultGetter: String = "" + get + + @JvmField + var explicitDefaultSetter: String = "" + set + + @JvmField + val explicitDefaultAnnotatedGetter: String = "" + @DemoAnnotation get + + @JvmField + var explicitDefaultAnnotatedSetter: String = "" + @DemoAnnotation set + @JvmField var customSetter: String = "" set(s) { diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.txt index 35266be3dfa..d36150b4644 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.txt @@ -14,6 +14,10 @@ package @kotlin.jvm.JvmField() public abstract val c: kotlin.Int @kotlin.jvm.JvmField() public final val customGetter: kotlin.String = "" @kotlin.jvm.JvmField() public final var customSetter: kotlin.String + @kotlin.jvm.JvmField() public final val explicitDefaultAnnotatedGetter: kotlin.String = "" + @kotlin.jvm.JvmField() public final var explicitDefaultAnnotatedSetter: kotlin.String + @kotlin.jvm.JvmField() public final val explicitDefaultGetter: kotlin.String = "" + @kotlin.jvm.JvmField() public final var explicitDefaultSetter: kotlin.String @kotlin.jvm.JvmField() public final val noBackingField: kotlin.String @kotlin.jvm.JvmField() private final val private: kotlin.Int = 3 public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -22,6 +26,13 @@ package public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } +public final annotation class DemoAnnotation : kotlin.Annotation { + public constructor DemoAnnotation() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + public final class G { public constructor G() @kotlin.jvm.JvmField() public final lateinit var lateInit: kotlin.String diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 83c86044c33..11cdd2a008b 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -16953,6 +16953,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("explicitDefaultGetter.kt") + public void testExplicitDefaultGetter() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/smartCasts/explicitDefaultGetter.kt"); + doTest(fileName); + } + @TestMetadata("extensionSafeCall.kt") public void testExtensionSafeCall() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/smartCasts/extensionSafeCall.kt"); diff --git a/idea/testData/checker/infos/SmartCasts.kt b/idea/testData/checker/infos/SmartCasts.kt index 9cca4dfcbb5..a3024e6236e 100644 --- a/idea/testData/checker/infos/SmartCasts.kt +++ b/idea/testData/checker/infos/SmartCasts.kt @@ -266,3 +266,15 @@ fun inForLoop(x: Any?) { } for (i in x) {} } + +class ExplicitAccessorForAnnotation { + val tt: String? = "good" + get + + fun foo(): String { + if (tt is String) { + return tt + } + return "" + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/equalsWithHashCode/explicitDefaultAccessors.kt b/idea/testData/codeInsight/generate/equalsWithHashCode/explicitDefaultAccessors.kt new file mode 100644 index 00000000000..4c688ffae95 --- /dev/null +++ b/idea/testData/codeInsight/generate/equalsWithHashCode/explicitDefaultAccessors.kt @@ -0,0 +1,10 @@ +class Test { + var serial: String = "" + get + set + var name: String = "" + get + +} + +// FORCED \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/equalsWithHashCode/explicitDefaultAccessors.kt.after b/idea/testData/codeInsight/generate/equalsWithHashCode/explicitDefaultAccessors.kt.after new file mode 100644 index 00000000000..721454f7d37 --- /dev/null +++ b/idea/testData/codeInsight/generate/equalsWithHashCode/explicitDefaultAccessors.kt.after @@ -0,0 +1,20 @@ +class Test { + var serial: String = "" + get + set + var name: String = "" + get + + override fun equals(other: Any?): Boolean{ + if (this === other) return true + if (other?.javaClass != javaClass) return false + return true + } + + override fun hashCode(): Int{ + return 0 + } + +} + +// FORCED \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/singleTemplate/explicitDefaultAccessors.kt b/idea/testData/codeInsight/generate/toString/singleTemplate/explicitDefaultAccessors.kt new file mode 100644 index 00000000000..cca0cf391b8 --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/singleTemplate/explicitDefaultAccessors.kt @@ -0,0 +1,8 @@ +class Test { + var serial: String = "" + get + set + var name: String = "" + get + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/generate/toString/singleTemplate/explicitDefaultAccessors.kt.after b/idea/testData/codeInsight/generate/toString/singleTemplate/explicitDefaultAccessors.kt.after new file mode 100644 index 00000000000..aca5eca0e57 --- /dev/null +++ b/idea/testData/codeInsight/generate/toString/singleTemplate/explicitDefaultAccessors.kt.after @@ -0,0 +1,12 @@ +class Test { + var serial: String = "" + get + set + var name: String = "" + get + + override fun toString(): String{ + return "Test()" + } + +} \ No newline at end of file diff --git a/idea/testData/debugger/tinyApp/outs/privatePropertyWithExplicitDefaultGetter.out b/idea/testData/debugger/tinyApp/outs/privatePropertyWithExplicitDefaultGetter.out new file mode 100644 index 00000000000..20c79dc5fed --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/privatePropertyWithExplicitDefaultGetter.out @@ -0,0 +1,8 @@ +LineBreakpoint created at privatePropertyWithExplicitDefaultGetter.kt:7 +!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! privatePropertyWithExplicitDefaultGetter.PrivatePropertyWithExplicitDefaultGetterKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +privatePropertyWithExplicitDefaultGetter.kt:7 +Compile bytecode for base.a +Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' + +Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privatePropertyWithExplicitDefaultGetter.kt b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privatePropertyWithExplicitDefaultGetter.kt new file mode 100644 index 00000000000..4f924325d58 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privatePropertyWithExplicitDefaultGetter.kt @@ -0,0 +1,18 @@ +package privatePropertyWithExplicitDefaultGetter + +fun main(args: Array) { + val base = Some() + + //Breakpoint! + args.size +} + +annotation class Small + +class Some { + private val a: Int = 1 + @Small get + +} +// EXPRESSION: base.a +// RESULT: java.lang.NoSuchMethodError : Method not found: MemberDescription(ownerInternalName = privatePropertyWithExplicitDefaultGetter/Some, name = getA, desc = ()I, isStatic = false) diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java index e9593d2ff18..24d34678d85 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateHashCodeAndEqualsActionTestGenerated.java @@ -65,6 +65,12 @@ public class GenerateHashCodeAndEqualsActionTestGenerated extends AbstractGenera doTest(fileName); } + @TestMetadata("explicitDefaultAccessors.kt") + public void testExplicitDefaultAccessors() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/equalsWithHashCode/explicitDefaultAccessors.kt"); + doTest(fileName); + } + @TestMetadata("genericClass.kt") public void testGenericClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/equalsWithHashCode/genericClass.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java index 890e0641210..985aa82495c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/GenerateToStringActionTestGenerated.java @@ -139,6 +139,12 @@ public class GenerateToStringActionTestGenerated extends AbstractGenerateToStrin doTest(fileName); } + @TestMetadata("explicitDefaultAccessors.kt") + public void testExplicitDefaultAccessors() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/singleTemplate/explicitDefaultAccessors.kt"); + doTest(fileName); + } + @TestMetadata("multipleVars.kt") public void testMultipleVars() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/generate/toString/singleTemplate/multipleVars.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java index a5dbc7ef9c8..8c068c52eba 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -313,6 +313,12 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doSingleBreakpointTest(fileName); } + @TestMetadata("privatePropertyWithExplicitDefaultGetter.kt") + public void testPrivatePropertyWithExplicitDefaultGetter() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privatePropertyWithExplicitDefaultGetter.kt"); + doSingleBreakpointTest(fileName); + } + @TestMetadata("protectedMember.kt") public void testProtectedMember() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/protectedMember.kt");