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");