Revert "JVM: remove support for disabling NoConstantValueAttributeForNonConstVals"
This is a partial revert of e857966edb.
Specifically, behavior is restored in the old backend, which will allow
to support language version 1.3, where this language feature was not
enabled yet. There are no changes in the JVM IR backend, because to
enable JVM IR with LV 1.3, you need to pass the compiler argument
`-Xuse-ir` which is not stable and we don't guarantee anything about it.
#KT-50251
This commit is contained in:
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.codegen.context.MultifileClassFacadeContext;
|
||||
import org.jetbrains.kotlin.codegen.context.MultifileClassPartContext;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
|
||||
import org.jetbrains.kotlin.config.LanguageFeature;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
|
||||
@@ -343,7 +344,7 @@ public class PropertyCodegen {
|
||||
defaultValue = null;
|
||||
}
|
||||
else if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) {
|
||||
if (descriptor.isConst()) {
|
||||
if (shouldWriteFieldInitializer(descriptor)) {
|
||||
ConstantValue<?> initializer = descriptor.getCompileTimeInitializer();
|
||||
defaultValue = initializer == null ? null : initializer.getValue();
|
||||
}
|
||||
@@ -487,6 +488,20 @@ public class PropertyCodegen {
|
||||
return delegateType;
|
||||
}
|
||||
|
||||
private boolean shouldWriteFieldInitializer(@NotNull PropertyDescriptor descriptor) {
|
||||
if (!descriptor.isConst() &&
|
||||
state.getLanguageVersionSettings().supportsFeature(LanguageFeature.NoConstantValueAttributeForNonConstVals)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//final field of primitive or String type
|
||||
if (!descriptor.isVar()) {
|
||||
Type type = typeMapper.mapType(descriptor);
|
||||
return AsmUtil.isPrimitive(type) || "java.lang.String".equals(type.getClassName());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void generateGetter(@NotNull PropertyDescriptor descriptor, @Nullable KtPropertyAccessor getter) {
|
||||
generateAccessor(
|
||||
getter,
|
||||
|
||||
+5
@@ -2534,6 +2534,11 @@ public class FirLoadCompiledKotlinGenerated extends AbstractFirLoadCompiledKotli
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/ExtVarl.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonConstValWithConstantValueAttribute.kt")
|
||||
public void testNonConstValWithConstantValueAttribute() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/nonConstValWithConstantValueAttribute.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NsVal.kt")
|
||||
public void testNsVal() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/NsVal.kt");
|
||||
|
||||
+9
-3
@@ -1457,9 +1457,15 @@ public class FirBytecodeTextTestGenerated extends AbstractFirBytecodeTextTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nonConstValHasNoDefaultValue.kt")
|
||||
public void testNonConstValHasNoDefaultValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue.kt");
|
||||
@TestMetadata("nonConstValHasNoDefaultValue_after.kt")
|
||||
public void testNonConstValHasNoDefaultValue_after() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue_after.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nonConstValHasNoDefaultValue_before.kt")
|
||||
public void testNonConstValHasNoDefaultValue_before() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue_before.kt");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
// !LANGUAGE: +NoConstantValueAttributeForNonConstVals +JvmFieldInInterface
|
||||
|
||||
class C {
|
||||
val testClassVal = 100
|
||||
|
||||
Vendored
+66
@@ -0,0 +1,66 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
// ^ Disables a language feature introduced in 1.4. This test checks old backend's behavior and is needed as long as we support language version 1.3.
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// FIR status: don't support legacy feature
|
||||
// !LANGUAGE: -NoConstantValueAttributeForNonConstVals
|
||||
|
||||
class C {
|
||||
val testClassVal = 100
|
||||
|
||||
@JvmField
|
||||
val testJvmFieldVal = 105
|
||||
|
||||
companion object {
|
||||
val testCompanionObjectVal = 110
|
||||
|
||||
@JvmStatic
|
||||
val testJvmStaticCompanionObjectVal = 120
|
||||
|
||||
@JvmField
|
||||
val testJvmFieldCompanionObjectVal = 130
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
interface IFoo {
|
||||
companion object {
|
||||
val testInterfaceCompanionObjectVal = 200
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
interface IBar {
|
||||
companion object {
|
||||
@JvmField
|
||||
val testJvmFieldInInterfaceCompanionObject = 210
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
object Obj {
|
||||
val testObjectVal = 300
|
||||
|
||||
@JvmStatic
|
||||
val testJvmStaticObjectVal = 310
|
||||
|
||||
@JvmField
|
||||
val testJvmFieldObjectVal = 320
|
||||
}
|
||||
|
||||
|
||||
val testTopLevelVal = 400
|
||||
|
||||
|
||||
// 1 final I testClassVal = 100
|
||||
// 1 final I testJvmFieldVal = 105
|
||||
// 1 final static I testCompanionObjectVal = 110
|
||||
// 1 final static I testJvmStaticCompanionObjectVal = 120
|
||||
// 1 final static I testJvmFieldCompanionObjectVal = 130
|
||||
// 1 final static I testInterfaceCompanionObjectVal = 200
|
||||
// 1 final static I testJvmFieldInInterfaceCompanionObject = 210
|
||||
// 1 final static I testObjectVal = 300
|
||||
// 1 final static I testJvmStaticObjectVal = 310
|
||||
// 1 final static I testJvmFieldObjectVal = 320
|
||||
// 1 final static I testTopLevelVal = 400
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: -NoConstantValueAttributeForNonConstVals
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
//ALLOW_AST_ACCESS
|
||||
|
||||
package test
|
||||
val nonConstVal1 = 1
|
||||
|
||||
class C {
|
||||
val nonConstVal2 = 2
|
||||
|
||||
companion object {
|
||||
val nonConstVal3 = 3
|
||||
}
|
||||
}
|
||||
|
||||
interface I {
|
||||
companion object {
|
||||
val nonConstVal4 = 4
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package test
|
||||
|
||||
public val nonConstVal1: kotlin.Int = 1
|
||||
public fun <get-nonConstVal1>(): kotlin.Int
|
||||
|
||||
public final class C {
|
||||
/*primary*/ public constructor C()
|
||||
public final val nonConstVal2: kotlin.Int = 2
|
||||
public final fun <get-nonConstVal2>(): kotlin.Int
|
||||
|
||||
public companion object Companion {
|
||||
/*primary*/ private constructor Companion()
|
||||
public final val nonConstVal3: kotlin.Int = 3
|
||||
public final fun <get-nonConstVal3>(): kotlin.Int
|
||||
}
|
||||
}
|
||||
|
||||
public interface I {
|
||||
|
||||
public companion object Companion {
|
||||
/*primary*/ private constructor Companion()
|
||||
public final val nonConstVal4: kotlin.Int = 4
|
||||
public final fun <get-nonConstVal4>(): kotlin.Int
|
||||
}
|
||||
}
|
||||
+9
-3
@@ -1439,9 +1439,15 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nonConstValHasNoDefaultValue.kt")
|
||||
public void testNonConstValHasNoDefaultValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue.kt");
|
||||
@TestMetadata("nonConstValHasNoDefaultValue_after.kt")
|
||||
public void testNonConstValHasNoDefaultValue_after() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue_after.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nonConstValHasNoDefaultValue_before.kt")
|
||||
public void testNonConstValHasNoDefaultValue_before() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue_before.kt");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-3
@@ -1457,9 +1457,15 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nonConstValHasNoDefaultValue.kt")
|
||||
public void testNonConstValHasNoDefaultValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue.kt");
|
||||
@TestMetadata("nonConstValHasNoDefaultValue_after.kt")
|
||||
public void testNonConstValHasNoDefaultValue_after() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue_after.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nonConstValHasNoDefaultValue_before.kt")
|
||||
public void testNonConstValHasNoDefaultValue_before() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeText/constProperty/nonConstValHasNoDefaultValue_before.kt");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
@@ -4212,6 +4212,11 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/ExtVarl.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonConstValWithConstantValueAttribute.kt")
|
||||
public void testNonConstValWithConstantValueAttribute() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/nonConstValWithConstantValueAttribute.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NsVal.kt")
|
||||
public void testNsVal() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/NsVal.kt");
|
||||
|
||||
Generated
+5
@@ -2534,6 +2534,11 @@ public class LoadKotlinWithTypeTableTestGenerated extends AbstractLoadKotlinWith
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/ExtVarl.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonConstValWithConstantValueAttribute.kt")
|
||||
public void testNonConstValWithConstantValueAttribute() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/nonConstValWithConstantValueAttribute.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NsVal.kt")
|
||||
public void testNsVal() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/NsVal.kt");
|
||||
|
||||
+5
@@ -4213,6 +4213,11 @@ public class IrLoadJavaTestGenerated extends AbstractIrLoadJavaTest {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/ExtVarl.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonConstValWithConstantValueAttribute.kt")
|
||||
public void testNonConstValWithConstantValueAttribute() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/nonConstValWithConstantValueAttribute.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NsVal.kt")
|
||||
public void testNsVal() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/NsVal.kt");
|
||||
|
||||
Generated
+5
@@ -4212,6 +4212,11 @@ public class LoadJavaUsingJavacTestGenerated extends AbstractLoadJavaUsingJavacT
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/ExtVarl.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonConstValWithConstantValueAttribute.kt")
|
||||
public void testNonConstValWithConstantValueAttribute() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/nonConstValWithConstantValueAttribute.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NsVal.kt")
|
||||
public void testNsVal() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/NsVal.kt");
|
||||
|
||||
+5
@@ -2536,6 +2536,11 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/ExtVarl.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonConstValWithConstantValueAttribute.kt")
|
||||
public void testNonConstValWithConstantValueAttribute() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/nonConstValWithConstantValueAttribute.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NsVal.kt")
|
||||
public void testNsVal() throws Exception {
|
||||
runTest("compiler/testData/loadJava/compiledKotlin/prop/NsVal.kt");
|
||||
|
||||
Reference in New Issue
Block a user