Support properties from primary constructor in JvmFieldApplicabilityChecker
#KT-32753 In progress
This commit is contained in:
+9
-3
@@ -31457,9 +31457,15 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("jvmFieldApplicability.kt")
|
@TestMetadata("jvmFieldApplicability_1_5.kt")
|
||||||
public void testJvmFieldApplicability() throws Exception {
|
public void testJvmFieldApplicability_1_5() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability_1_5.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("jvmFieldApplicability_1_6.kt")
|
||||||
|
public void testJvmFieldApplicability_1_6() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability_1_6.kt");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-4
@@ -23,7 +23,9 @@ import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile
|
|||||||
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil
|
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
|
import org.jetbrains.kotlin.psi.KtValueArgument
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
@@ -53,18 +55,18 @@ class JvmFieldApplicabilityChecker : DeclarationChecker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
||||||
if (descriptor !is PropertyDescriptor || declaration !is KtProperty) return
|
if (descriptor !is PropertyDescriptor || (declaration !is KtProperty && declaration !is KtParameter)) return
|
||||||
|
|
||||||
val annotation = descriptor.findJvmFieldAnnotation()
|
val annotation = descriptor.findJvmFieldAnnotation()
|
||||||
?: descriptor.delegateField?.annotations?.findAnnotation(JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME)
|
?: descriptor.delegateField?.annotations?.findAnnotation(JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME)
|
||||||
?: return
|
?: return
|
||||||
|
|
||||||
val problem = when {
|
val problem = when {
|
||||||
declaration.hasDelegate() -> DELEGATE
|
declaration is KtProperty && declaration.hasDelegate() -> DELEGATE
|
||||||
!descriptor.hasBackingField(context.trace.bindingContext) -> return
|
!descriptor.hasBackingField(context.trace.bindingContext) -> return
|
||||||
descriptor.isOverridable -> NOT_FINAL
|
descriptor.isOverridable -> NOT_FINAL
|
||||||
DescriptorVisibilities.isPrivate(descriptor.visibility) -> PRIVATE
|
DescriptorVisibilities.isPrivate(descriptor.visibility) -> PRIVATE
|
||||||
declaration.hasCustomAccessor() -> CUSTOM_ACCESSOR
|
declaration is KtProperty && declaration.hasCustomAccessor() -> CUSTOM_ACCESSOR
|
||||||
descriptor.overriddenDescriptors.isNotEmpty() -> OVERRIDES
|
descriptor.overriddenDescriptors.isNotEmpty() -> OVERRIDES
|
||||||
descriptor.isLateInit -> LATEINIT
|
descriptor.isLateInit -> LATEINIT
|
||||||
descriptor.isConst -> CONST
|
descriptor.isConst -> CONST
|
||||||
@@ -83,7 +85,14 @@ class JvmFieldApplicabilityChecker : DeclarationChecker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val annotationEntry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation) ?: return
|
val annotationEntry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation) ?: return
|
||||||
context.trace.report(ErrorsJvm.INAPPLICABLE_JVM_FIELD.on(annotationEntry, problem.errorMessage))
|
|
||||||
|
val factory =
|
||||||
|
if (declaration is KtParameter && !context.languageVersionSettings.supportsFeature(LanguageFeature.ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor)) {
|
||||||
|
ErrorsJvm.INAPPLICABLE_JVM_FIELD_WARNING
|
||||||
|
} else {
|
||||||
|
ErrorsJvm.INAPPLICABLE_JVM_FIELD
|
||||||
|
}
|
||||||
|
context.trace.report(factory.on(annotationEntry, problem.errorMessage))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isInterfaceCompanionWithPublicJvmFieldProperties(companionObject: ClassDescriptor): Boolean {
|
private fun isInterfaceCompanionWithPublicJvmFieldProperties(companionObject: ClassDescriptor): Boolean {
|
||||||
|
|||||||
+1
@@ -120,6 +120,7 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
|
|||||||
MAP.put(UPPER_BOUND_CANNOT_BE_ARRAY, "Upper bound of a type parameter cannot be an array");
|
MAP.put(UPPER_BOUND_CANNOT_BE_ARRAY, "Upper bound of a type parameter cannot be an array");
|
||||||
|
|
||||||
MAP.put(INAPPLICABLE_JVM_FIELD, "{0}", STRING);
|
MAP.put(INAPPLICABLE_JVM_FIELD, "{0}", STRING);
|
||||||
|
MAP.put(INAPPLICABLE_JVM_FIELD_WARNING, "{0}. This warning will become an error in further releases", STRING);
|
||||||
|
|
||||||
MAP.put(JVM_SYNTHETIC_ON_DELEGATE, "'@JvmSynthetic' annotation cannot be used on delegated properties");
|
MAP.put(JVM_SYNTHETIC_ON_DELEGATE, "'@JvmSynthetic' annotation cannot be used on delegated properties");
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ public interface ErrorsJvm {
|
|||||||
DiagnosticFactory0<KtAnnotationEntry> ILLEGAL_JVM_NAME = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<KtAnnotationEntry> ILLEGAL_JVM_NAME = DiagnosticFactory0.create(ERROR);
|
||||||
|
|
||||||
DiagnosticFactory1<KtAnnotationEntry, String> INAPPLICABLE_JVM_FIELD = DiagnosticFactory1.create(ERROR);
|
DiagnosticFactory1<KtAnnotationEntry, String> INAPPLICABLE_JVM_FIELD = DiagnosticFactory1.create(ERROR);
|
||||||
|
DiagnosticFactory1<KtAnnotationEntry, String> INAPPLICABLE_JVM_FIELD_WARNING = DiagnosticFactory1.create(WARNING);
|
||||||
|
|
||||||
DiagnosticFactory0<KtAnnotationEntry> JVM_SYNTHETIC_ON_DELEGATE = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<KtAnnotationEntry> JVM_SYNTHETIC_ON_DELEGATE = DiagnosticFactory0.create(ERROR);
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -1,4 +1,4 @@
|
|||||||
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses
|
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses -ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
@kotlin.jvm.JvmField
|
@kotlin.jvm.JvmField
|
||||||
@@ -114,6 +114,11 @@ open class KKK : K {
|
|||||||
override final val j: Int = 0
|
override final val j: Int = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class JK(
|
||||||
|
override val i: Int,
|
||||||
|
@JvmField override val j: Int,
|
||||||
|
) : K
|
||||||
|
|
||||||
annotation class L {
|
annotation class L {
|
||||||
companion object {
|
companion object {
|
||||||
@JvmField
|
@JvmField
|
||||||
Vendored
+148
@@ -0,0 +1,148 @@
|
|||||||
|
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses -ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
|
||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!>
|
||||||
|
fun foo() {
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!> val x = "A"
|
||||||
|
}
|
||||||
|
|
||||||
|
annotation class DemoAnnotation
|
||||||
|
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@JvmField<!>
|
||||||
|
abstract class C : I{
|
||||||
|
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!> constructor(s: String) {
|
||||||
|
}
|
||||||
|
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!> private fun foo(s: String = "OK") {
|
||||||
|
}
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD, WRONG_ANNOTATION_TARGET!>@JvmField<!> val a: String by lazy { "A" }
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!> open val b: Int = 3
|
||||||
|
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@JvmField<!> abstract val c: Int
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
val customGetter: String = ""
|
||||||
|
get() = field
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
val explicitDefaultGetter: String = ""
|
||||||
|
get
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
var explicitDefaultSetter: String = ""
|
||||||
|
set
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
val explicitDefaultAnnotatedGetter: String = ""
|
||||||
|
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@DemoAnnotation<!> get
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
var explicitDefaultAnnotatedSetter: String = ""
|
||||||
|
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@DemoAnnotation<!> set
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
var customSetter: String = ""
|
||||||
|
set(s) {
|
||||||
|
field = s
|
||||||
|
}
|
||||||
|
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@JvmField<!>
|
||||||
|
val noBackingField: String
|
||||||
|
get() = "a"
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
final override val ai = 3
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
private val private = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
interface I {
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@JvmField<!> val ai: Int
|
||||||
|
<!WRONG_ANNOTATION_TARGET!>@JvmField<!> val bi: Int
|
||||||
|
get() = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
class G {
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
lateinit var lateInit: String
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@delegate:JvmField<!>
|
||||||
|
val s: String by lazy { "s" }
|
||||||
|
}
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
const val Const = 4
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
var i = 5
|
||||||
|
|
||||||
|
class H {
|
||||||
|
companion object {
|
||||||
|
@JvmField
|
||||||
|
var c = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface K {
|
||||||
|
|
||||||
|
val i: Int
|
||||||
|
val j: Int
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
var c = 3
|
||||||
|
|
||||||
|
var x = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class KK : K {
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
override val i: Int = 0
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
override final val j: Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
open class KKK : K {
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
override val i: Int = 0
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
override final val j: Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
class JK(
|
||||||
|
override val i: Int,
|
||||||
|
<!INAPPLICABLE_JVM_FIELD_WARNING!>@JvmField<!> override val j: Int,
|
||||||
|
) : K
|
||||||
|
|
||||||
|
annotation class L {
|
||||||
|
companion object {
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
var c = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object O {
|
||||||
|
@JvmField
|
||||||
|
val c = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
private val private = 3
|
||||||
|
|
||||||
|
inline class Foo(val x: Int)
|
||||||
|
|
||||||
|
object IObject {
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
val c: Foo = Foo(42)
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
val u = 42u
|
||||||
|
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
|
private val r: Result<Int> = TODO()
|
||||||
|
}
|
||||||
+9
@@ -83,6 +83,15 @@ public object IObject {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class JK : K {
|
||||||
|
public constructor JK(/*0*/ i: kotlin.Int, /*1*/ j: kotlin.Int)
|
||||||
|
public open override /*1*/ val i: kotlin.Int
|
||||||
|
@field:kotlin.jvm.JvmField public open override /*1*/ val j: kotlin.Int
|
||||||
|
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 interface K {
|
public interface K {
|
||||||
public abstract val i: kotlin.Int
|
public abstract val i: kotlin.Int
|
||||||
public abstract val j: kotlin.Int
|
public abstract val j: kotlin.Int
|
||||||
Vendored
+148
@@ -0,0 +1,148 @@
|
|||||||
|
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses +ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
|
||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
|
@kotlin.jvm.JvmField
|
||||||
|
fun foo() {
|
||||||
|
@kotlin.jvm.JvmField val x = "A"
|
||||||
|
}
|
||||||
|
|
||||||
|
annotation class DemoAnnotation
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
abstract class C : I{
|
||||||
|
|
||||||
|
@kotlin.jvm.JvmField constructor(s: String) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.jvm.JvmField private fun foo(s: String = "OK") {
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmField val a: String by lazy { "A" }
|
||||||
|
|
||||||
|
@JvmField open val b: Int = 3
|
||||||
|
|
||||||
|
@JvmField abstract val c: Int
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
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) {
|
||||||
|
field = s
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
val noBackingField: String
|
||||||
|
get() = "a"
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
final override val ai = 3
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
private val private = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
interface I {
|
||||||
|
@JvmField val ai: Int
|
||||||
|
@JvmField val bi: Int
|
||||||
|
get() = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
class G {
|
||||||
|
@JvmField
|
||||||
|
lateinit var lateInit: String
|
||||||
|
|
||||||
|
@delegate:JvmField
|
||||||
|
val s: String by lazy { "s" }
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
const val Const = 4
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
var i = 5
|
||||||
|
|
||||||
|
class H {
|
||||||
|
companion object {
|
||||||
|
@JvmField
|
||||||
|
var c = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface K {
|
||||||
|
|
||||||
|
val i: Int
|
||||||
|
val j: Int
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@JvmField
|
||||||
|
var c = 3
|
||||||
|
|
||||||
|
var x = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class KK : K {
|
||||||
|
@JvmField
|
||||||
|
override val i: Int = 0
|
||||||
|
@JvmField
|
||||||
|
override final val j: Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
open class KKK : K {
|
||||||
|
@JvmField
|
||||||
|
override val i: Int = 0
|
||||||
|
@JvmField
|
||||||
|
override final val j: Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
class JK(
|
||||||
|
override val i: Int,
|
||||||
|
@JvmField override val j: Int,
|
||||||
|
) : K
|
||||||
|
|
||||||
|
annotation class L {
|
||||||
|
companion object {
|
||||||
|
@JvmField
|
||||||
|
var c = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object O {
|
||||||
|
@JvmField
|
||||||
|
val c = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
private val private = 3
|
||||||
|
|
||||||
|
inline class Foo(val x: Int)
|
||||||
|
|
||||||
|
object IObject {
|
||||||
|
@JvmField
|
||||||
|
val c: Foo = Foo(42)
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
val u = 42u
|
||||||
|
|
||||||
|
@JvmField
|
||||||
|
private val r: Result<Int> = TODO()
|
||||||
|
}
|
||||||
+6
-1
@@ -1,4 +1,4 @@
|
|||||||
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses
|
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses +ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||||
|
|
||||||
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!>
|
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!>
|
||||||
@@ -114,6 +114,11 @@ open class KKK : K {
|
|||||||
override final val j: Int = 0
|
override final val j: Int = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class JK(
|
||||||
|
override val i: Int,
|
||||||
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!> override val j: Int,
|
||||||
|
) : K
|
||||||
|
|
||||||
annotation class L {
|
annotation class L {
|
||||||
companion object {
|
companion object {
|
||||||
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
|
||||||
Vendored
+151
@@ -0,0 +1,151 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
@field:kotlin.jvm.JvmField public const val Const: kotlin.Int = 4
|
||||||
|
@field:kotlin.jvm.JvmField public var i: kotlin.Int
|
||||||
|
@field:kotlin.jvm.JvmField private val private: kotlin.Int = 3
|
||||||
|
@kotlin.jvm.JvmField public fun foo(): kotlin.Unit
|
||||||
|
|
||||||
|
@kotlin.jvm.JvmField public abstract class C : I {
|
||||||
|
@kotlin.jvm.JvmField public constructor C(/*0*/ s: kotlin.String)
|
||||||
|
@field:kotlin.jvm.JvmField public final val a: kotlin.String
|
||||||
|
@field:kotlin.jvm.JvmField public final override /*1*/ val ai: kotlin.Int = 3
|
||||||
|
@field:kotlin.jvm.JvmField public open val b: kotlin.Int = 3
|
||||||
|
@field:kotlin.jvm.JvmField public open override /*1*/ /*fake_override*/ val bi: kotlin.Int
|
||||||
|
@field:kotlin.jvm.JvmField public abstract val c: kotlin.Int
|
||||||
|
@field:kotlin.jvm.JvmField public final val customGetter: kotlin.String = ""
|
||||||
|
@field:kotlin.jvm.JvmField public final var customSetter: kotlin.String
|
||||||
|
@field:kotlin.jvm.JvmField @get:DemoAnnotation public final val explicitDefaultAnnotatedGetter: kotlin.String = ""
|
||||||
|
@field:kotlin.jvm.JvmField @set:DemoAnnotation public final var explicitDefaultAnnotatedSetter: kotlin.String
|
||||||
|
@field:kotlin.jvm.JvmField public final val explicitDefaultGetter: kotlin.String = ""
|
||||||
|
@field:kotlin.jvm.JvmField public final var explicitDefaultSetter: kotlin.String
|
||||||
|
@field:kotlin.jvm.JvmField public final val noBackingField: kotlin.String
|
||||||
|
@field:kotlin.jvm.JvmField private final val private: kotlin.Int = 3
|
||||||
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
@kotlin.jvm.JvmField private final fun foo(/*0*/ s: kotlin.String = ...): kotlin.Unit
|
||||||
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
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 inline class Foo {
|
||||||
|
public constructor Foo(/*0*/ x: kotlin.Int)
|
||||||
|
public final val x: kotlin.Int
|
||||||
|
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
|
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
|
||||||
|
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class G {
|
||||||
|
public constructor G()
|
||||||
|
@field:kotlin.jvm.JvmField public final lateinit var lateInit: kotlin.String
|
||||||
|
@delegate:kotlin.jvm.JvmField public final val s: 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
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class H {
|
||||||
|
public constructor H()
|
||||||
|
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 companion object Companion {
|
||||||
|
private constructor Companion()
|
||||||
|
@field:kotlin.jvm.JvmField public final var c: kotlin.Int
|
||||||
|
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 interface I {
|
||||||
|
@field:kotlin.jvm.JvmField public abstract val ai: kotlin.Int
|
||||||
|
@field:kotlin.jvm.JvmField public open val bi: kotlin.Int
|
||||||
|
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 object IObject {
|
||||||
|
private constructor IObject()
|
||||||
|
@field:kotlin.jvm.JvmField public final val c: Foo
|
||||||
|
@field:kotlin.jvm.JvmField private final val r: kotlin.Result<kotlin.Int>
|
||||||
|
@field:kotlin.jvm.JvmField public final val u: kotlin.UInt = 42.toUInt()
|
||||||
|
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 JK : K {
|
||||||
|
public constructor JK(/*0*/ i: kotlin.Int, /*1*/ j: kotlin.Int)
|
||||||
|
public open override /*1*/ val i: kotlin.Int
|
||||||
|
@field:kotlin.jvm.JvmField public open override /*1*/ val j: kotlin.Int
|
||||||
|
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 interface K {
|
||||||
|
public abstract val i: kotlin.Int
|
||||||
|
public abstract val j: kotlin.Int
|
||||||
|
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 companion object Companion {
|
||||||
|
private constructor Companion()
|
||||||
|
@field:kotlin.jvm.JvmField public final var c: kotlin.Int
|
||||||
|
public final var x: kotlin.Int
|
||||||
|
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 KK : K {
|
||||||
|
public constructor KK()
|
||||||
|
@field:kotlin.jvm.JvmField public open override /*1*/ val i: kotlin.Int = 0
|
||||||
|
@field:kotlin.jvm.JvmField public final override /*1*/ val j: kotlin.Int = 0
|
||||||
|
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 open class KKK : K {
|
||||||
|
public constructor KKK()
|
||||||
|
@field:kotlin.jvm.JvmField public open override /*1*/ val i: kotlin.Int = 0
|
||||||
|
@field:kotlin.jvm.JvmField public final override /*1*/ val j: kotlin.Int = 0
|
||||||
|
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 annotation class L : kotlin.Annotation {
|
||||||
|
public constructor L()
|
||||||
|
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 companion object Companion {
|
||||||
|
private constructor Companion()
|
||||||
|
@field:kotlin.jvm.JvmField public final var c: kotlin.Int
|
||||||
|
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 object O {
|
||||||
|
private constructor O()
|
||||||
|
@field:kotlin.jvm.JvmField public final val c: kotlin.Int = 3
|
||||||
|
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
|
||||||
|
}
|
||||||
Generated
+9
-3
@@ -31553,9 +31553,15 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("jvmFieldApplicability.kt")
|
@TestMetadata("jvmFieldApplicability_1_5.kt")
|
||||||
public void testJvmFieldApplicability() throws Exception {
|
public void testJvmFieldApplicability_1_5() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability_1_5.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("jvmFieldApplicability_1_6.kt")
|
||||||
|
public void testJvmFieldApplicability_1_6() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability_1_6.kt");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ enum class LanguageFeature(
|
|||||||
* (if @NotNull has TYPE_USE and METHOD target, then `@NotNull Integer []` -> `Array<Int>..Array<out Int>?` instead of `Array<Int>..Array<out Int>`)
|
* (if @NotNull has TYPE_USE and METHOD target, then `@NotNull Integer []` -> `Array<Int>..Array<out Int>?` instead of `Array<Int>..Array<out Int>`)
|
||||||
*/
|
*/
|
||||||
TypeEnhancementImprovementsInStrictMode(KOTLIN_1_6),
|
TypeEnhancementImprovementsInStrictMode(KOTLIN_1_6),
|
||||||
|
ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor(KOTLIN_1_6, kind = BUG_FIX),
|
||||||
|
|
||||||
// Temporarily disabled, see KT-27084/KT-22379
|
// Temporarily disabled, see KT-27084/KT-22379
|
||||||
SoundSmartcastFromLoopConditionForLoopAssignedVariables(sinceVersion = null, kind = BUG_FIX),
|
SoundSmartcastFromLoopConditionForLoopAssignedVariables(sinceVersion = null, kind = BUG_FIX),
|
||||||
|
|||||||
Reference in New Issue
Block a user