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
|
||||
@TestMetadata("jvmFieldApplicability.kt")
|
||||
public void testJvmFieldApplicability() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt");
|
||||
@TestMetadata("jvmFieldApplicability_1_5.kt")
|
||||
public void testJvmFieldApplicability_1_5() throws Exception {
|
||||
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.JvmAbi
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtParameter
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.KtValueArgument
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
@@ -53,18 +55,18 @@ class JvmFieldApplicabilityChecker : DeclarationChecker {
|
||||
}
|
||||
|
||||
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()
|
||||
?: descriptor.delegateField?.annotations?.findAnnotation(JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME)
|
||||
?: return
|
||||
|
||||
val problem = when {
|
||||
declaration.hasDelegate() -> DELEGATE
|
||||
declaration is KtProperty && declaration.hasDelegate() -> DELEGATE
|
||||
!descriptor.hasBackingField(context.trace.bindingContext) -> return
|
||||
descriptor.isOverridable -> NOT_FINAL
|
||||
DescriptorVisibilities.isPrivate(descriptor.visibility) -> PRIVATE
|
||||
declaration.hasCustomAccessor() -> CUSTOM_ACCESSOR
|
||||
declaration is KtProperty && declaration.hasCustomAccessor() -> CUSTOM_ACCESSOR
|
||||
descriptor.overriddenDescriptors.isNotEmpty() -> OVERRIDES
|
||||
descriptor.isLateInit -> LATEINIT
|
||||
descriptor.isConst -> CONST
|
||||
@@ -83,7 +85,14 @@ class JvmFieldApplicabilityChecker : DeclarationChecker {
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
+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(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");
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ public interface ErrorsJvm {
|
||||
DiagnosticFactory0<KtAnnotationEntry> ILLEGAL_JVM_NAME = DiagnosticFactory0.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);
|
||||
|
||||
|
||||
+6
-1
@@ -1,4 +1,4 @@
|
||||
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses
|
||||
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses -ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
@kotlin.jvm.JvmField
|
||||
@@ -114,6 +114,11 @@ open class KKK : K {
|
||||
override final val j: Int = 0
|
||||
}
|
||||
|
||||
class JK(
|
||||
override val i: Int,
|
||||
@JvmField override val j: Int,
|
||||
) : K
|
||||
|
||||
annotation class L {
|
||||
companion object {
|
||||
@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 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
|
||||
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
|
||||
|
||||
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!>
|
||||
@@ -114,6 +114,11 @@ open class KKK : K {
|
||||
override final val j: Int = 0
|
||||
}
|
||||
|
||||
class JK(
|
||||
override val i: Int,
|
||||
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!> override val j: Int,
|
||||
) : K
|
||||
|
||||
annotation class L {
|
||||
companion object {
|
||||
<!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
|
||||
@TestMetadata("jvmFieldApplicability.kt")
|
||||
public void testJvmFieldApplicability() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/jvmField/jvmFieldApplicability.kt");
|
||||
@TestMetadata("jvmFieldApplicability_1_5.kt")
|
||||
public void testJvmFieldApplicability_1_5() throws Exception {
|
||||
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>`)
|
||||
*/
|
||||
TypeEnhancementImprovementsInStrictMode(KOTLIN_1_6),
|
||||
ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor(KOTLIN_1_6, kind = BUG_FIX),
|
||||
|
||||
// Temporarily disabled, see KT-27084/KT-22379
|
||||
SoundSmartcastFromLoopConditionForLoopAssignedVariables(sinceVersion = null, kind = BUG_FIX),
|
||||
|
||||
Reference in New Issue
Block a user