Drop 'OBJECT$' field deprecated in M11
This commit is contained in:
@@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.kotlin.builtins.CompanionObjectMapping;
|
import org.jetbrains.kotlin.builtins.CompanionObjectMapping;
|
||||||
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor;
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.org.objectweb.asm.Type;
|
import org.jetbrains.org.objectweb.asm.Type;
|
||||||
@@ -46,18 +45,6 @@ public class FieldInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@NotNull
|
|
||||||
public static FieldInfo deprecatedFieldForCompanionObject(@NotNull ClassDescriptor companionObject, @NotNull JetTypeMapper typeMapper) {
|
|
||||||
assert DescriptorUtils.isCompanionObject(companionObject) : "Not a companion object: " + companionObject;
|
|
||||||
return new FieldInfo(
|
|
||||||
typeMapper.mapType((ClassifierDescriptor) companionObject.getContainingDeclaration()),
|
|
||||||
typeMapper.mapType(companionObject),
|
|
||||||
JvmAbi.DEPRECATED_COMPANION_OBJECT_FIELD,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static FieldInfo createForHiddenField(@NotNull Type owner, @NotNull Type fieldType, @NotNull String fieldName) {
|
public static FieldInfo createForHiddenField(@NotNull Type owner, @NotNull Type fieldType, @NotNull String fieldName) {
|
||||||
return new FieldInfo(owner, fieldType, fieldName, false);
|
return new FieldInfo(owner, fieldType, fieldName, false);
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ import org.jetbrains.kotlin.load.java.JvmAbi;
|
|||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinClass;
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinClass;
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor;
|
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
@@ -1008,12 +1007,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
StackValue.Field field = StackValue.singleton(companionObjectDescriptor, typeMapper);
|
StackValue.Field field = StackValue.singleton(companionObjectDescriptor, typeMapper);
|
||||||
v.newField(OtherOrigin(companionObject), ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null);
|
v.newField(OtherOrigin(companionObject), ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null);
|
||||||
|
|
||||||
StackValue.Field deprecatedField = StackValue.deprecatedCompanionObjectAccessor(companionObjectDescriptor, typeMapper);
|
|
||||||
FieldVisitor fv = v.newField(OtherOrigin(companionObject), ACC_PUBLIC | ACC_STATIC | ACC_FINAL | ACC_DEPRECATED,
|
|
||||||
deprecatedField.name, deprecatedField.type.getDescriptor(), null, null);
|
|
||||||
|
|
||||||
fv.visitAnnotation(asmDescByFqNameWithoutInnerClasses(new FqName("java.lang.Deprecated")), true).visitEnd();
|
|
||||||
|
|
||||||
if (state.getClassBuilderMode() != ClassBuilderMode.FULL) return;
|
if (state.getClassBuilderMode() != ClassBuilderMode.FULL) return;
|
||||||
|
|
||||||
if (!isCompanionObjectWithBackingFieldsInOuter(companionObjectDescriptor)) {
|
if (!isCompanionObjectWithBackingFieldsInOuter(companionObjectDescriptor)) {
|
||||||
@@ -1074,7 +1067,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
codegen.v.dup();
|
codegen.v.dup();
|
||||||
StackValue instance = StackValue.onStack(typeMapper.mapClass(companionObject));
|
StackValue instance = StackValue.onStack(typeMapper.mapClass(companionObject));
|
||||||
StackValue.singleton(companionObject, typeMapper).store(instance, codegen.v, true);
|
StackValue.singleton(companionObject, typeMapper).store(instance, codegen.v, true);
|
||||||
StackValue.deprecatedCompanionObjectAccessor(companionObject, typeMapper).store(instance, codegen.v, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generatePrimaryConstructor(final DelegationFieldsInfo delegationFieldsInfo) {
|
private void generatePrimaryConstructor(final DelegationFieldsInfo delegationFieldsInfo) {
|
||||||
|
|||||||
@@ -552,10 +552,6 @@ public abstract class StackValue {
|
|||||||
return field(FieldInfo.createForSingleton(classDescriptor, typeMapper));
|
return field(FieldInfo.createForSingleton(classDescriptor, typeMapper));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Field deprecatedCompanionObjectAccessor(ClassDescriptor classDescriptor, JetTypeMapper typeMapper) {
|
|
||||||
return field(FieldInfo.deprecatedFieldForCompanionObject(classDescriptor, typeMapper));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static StackValue operation(Type type, Function1<InstructionAdapter, Unit> lambda) {
|
public static StackValue operation(Type type, Function1<InstructionAdapter, Unit> lambda) {
|
||||||
return new OperationStackValue(type, lambda);
|
return new OperationStackValue(type, lambda);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,9 +154,8 @@ public class LightClassUtil {
|
|||||||
PsiClass outerPsiClass = getWrappingClass(companionObject);
|
PsiClass outerPsiClass = getWrappingClass(companionObject);
|
||||||
if (outerPsiClass != null) {
|
if (outerPsiClass != null) {
|
||||||
for (PsiField fieldOfParent : outerPsiClass.getFields()) {
|
for (PsiField fieldOfParent : outerPsiClass.getFields()) {
|
||||||
if (!(fieldOfParent instanceof KotlinLightElement)) continue;
|
if ((fieldOfParent instanceof KotlinLightElement) &&
|
||||||
if (((KotlinLightElement<?, ?>) fieldOfParent).getOrigin() == companionObject &&
|
((KotlinLightElement<?, ?>) fieldOfParent).getOrigin() == companionObject) {
|
||||||
fieldOfParent.getName().equals(companionObject.getName())) { // TODO this check is relevant while light class has deprecated OBJECT$ field
|
|
||||||
return fieldOfParent;
|
return fieldOfParent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-5
@@ -3,11 +3,6 @@ public final class ClassObjectField {
|
|||||||
public static final java.lang.String x = "";
|
public static final java.lang.String x = "";
|
||||||
private static final java.lang.String y = "";
|
private static final java.lang.String y = "";
|
||||||
public static final ClassObjectField.Companion Companion;
|
public static final ClassObjectField.Companion Companion;
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
@java.lang.Deprecated
|
|
||||||
public static final ClassObjectField.Companion OBJECT$;
|
|
||||||
|
|
||||||
public ClassObjectField() { /* compiled code */ }
|
public ClassObjectField() { /* compiled code */ }
|
||||||
|
|
||||||
|
|||||||
-5
@@ -1,10 +1,5 @@
|
|||||||
public interface TraitClassObjectField {
|
public interface TraitClassObjectField {
|
||||||
TraitClassObjectField.Companion Companion;
|
TraitClassObjectField.Companion Companion;
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
@java.lang.Deprecated
|
|
||||||
TraitClassObjectField.Companion OBJECT$;
|
|
||||||
@org.jetbrains.annotations.Nullable
|
@org.jetbrains.annotations.Nullable
|
||||||
java.lang.String x = "";
|
java.lang.String x = "";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
public class J {
|
public class J {
|
||||||
public static int f() {
|
public static int f() {
|
||||||
return A.Companion.getI1() + A.OBJECT$.getI2() + B.Named.getI1() + B.OBJECT$.getI2();
|
return A.Companion.getI1() + A.Companion.getI2() + B.Named.getI1() + B.Named.getI2();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-6
@@ -3,9 +3,3 @@ class C {
|
|||||||
|
|
||||||
val <!REDECLARATION!>Companion<!> = C
|
val <!REDECLARATION!>Companion<!> = C
|
||||||
}
|
}
|
||||||
|
|
||||||
class D {
|
|
||||||
companion <!CONFLICTING_JVM_DECLARATIONS!>object<!> {}
|
|
||||||
|
|
||||||
<!CONFLICTING_JVM_DECLARATIONS!>val `OBJECT$`<!> = D
|
|
||||||
}
|
|
||||||
-15
@@ -14,18 +14,3 @@ internal final class C {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal final class D {
|
|
||||||
public constructor D()
|
|
||||||
internal final val `OBJECT$`: D.Companion
|
|
||||||
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()
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
-8
@@ -11,11 +11,3 @@ class C {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class D {
|
|
||||||
companion <!CONFLICTING_JVM_DECLARATIONS!>object<!> {
|
|
||||||
<!CONFLICTING_JVM_DECLARATIONS!>val `OBJECT$`<!> = this
|
|
||||||
}
|
|
||||||
|
|
||||||
val `OBJECT$` = D
|
|
||||||
}
|
|
||||||
-16
@@ -29,19 +29,3 @@ internal final class C {
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal final class D {
|
|
||||||
public constructor D()
|
|
||||||
internal final val `OBJECT$`: D.Companion
|
|
||||||
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()
|
|
||||||
internal final val `OBJECT$`: D.Companion
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -45,10 +45,6 @@ public final class JvmAbi {
|
|||||||
public static final String KOTLIN_PACKAGE_FIELD_NAME = "$kotlinPackage";
|
public static final String KOTLIN_PACKAGE_FIELD_NAME = "$kotlinPackage";
|
||||||
public static final ClassId REFLECTION_FACTORY_IMPL = ClassId.topLevel(new FqName("kotlin.reflect.jvm.internal.ReflectionFactoryImpl"));
|
public static final ClassId REFLECTION_FACTORY_IMPL = ClassId.topLevel(new FqName("kotlin.reflect.jvm.internal.ReflectionFactoryImpl"));
|
||||||
|
|
||||||
//TODO: To be removed after kotlin M11
|
|
||||||
@Deprecated
|
|
||||||
public static final String DEPRECATED_COMPANION_OBJECT_FIELD = "OBJECT$";
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static String getSyntheticMethodNameForAnnotatedProperty(@NotNull Name propertyName) {
|
public static String getSyntheticMethodNameForAnnotatedProperty(@NotNull Name propertyName) {
|
||||||
return propertyName.asString() + ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX;
|
return propertyName.asString() + ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX;
|
||||||
|
|||||||
@@ -5,4 +5,3 @@ public class Testing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EXIST: Companion
|
// EXIST: Companion
|
||||||
// EXIST: OBJECT$
|
|
||||||
-8
@@ -11,11 +11,3 @@ class C {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class D {
|
|
||||||
companion <error>object A</error> {
|
|
||||||
<error>val `OBJECT$`</error> = this
|
|
||||||
}
|
|
||||||
|
|
||||||
val `OBJECT$` = D
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
public class ClassObjectField {
|
|
||||||
public static void foo() {
|
|
||||||
k.ClassWithClassObject.OB<caret>JECT$.f();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// REF: companion object of (k).ClassWithClassObject
|
|
||||||
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.asJava.LightClassUtil;
|
|||||||
import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase;
|
import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase;
|
||||||
import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor;
|
import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor;
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
|
||||||
import org.jetbrains.kotlin.name.SpecialNames;
|
import org.jetbrains.kotlin.name.SpecialNames;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
|
|
||||||
@@ -199,14 +198,6 @@ public class JetJavaFacadeTest extends JetLightCodeInsightFixtureTestCase {
|
|||||||
assertTrue(instance.hasModifierProperty(PsiModifier.STATIC));
|
assertTrue(instance.hasModifierProperty(PsiModifier.STATIC));
|
||||||
assertTrue(instance.hasModifierProperty(PsiModifier.FINAL));
|
assertTrue(instance.hasModifierProperty(PsiModifier.FINAL));
|
||||||
|
|
||||||
PsiField deprecatedAccessor = theClass.findFieldByName(JvmAbi.DEPRECATED_COMPANION_OBJECT_FIELD, false);
|
|
||||||
assertNotNull(deprecatedAccessor);
|
|
||||||
assertEquals("foo.TheClass." + defaultCompanionObjectName, deprecatedAccessor.getType().getCanonicalText());
|
|
||||||
assertTrue(deprecatedAccessor.hasModifierProperty(PsiModifier.PUBLIC));
|
|
||||||
assertTrue(deprecatedAccessor.hasModifierProperty(PsiModifier.STATIC));
|
|
||||||
assertTrue(deprecatedAccessor.hasModifierProperty(PsiModifier.FINAL));
|
|
||||||
assertTrue(deprecatedAccessor.isDeprecated());
|
|
||||||
|
|
||||||
PsiMethod[] methods = classObjectClass.findMethodsByName("getOut", false);
|
PsiMethod[] methods = classObjectClass.findMethodsByName("getOut", false);
|
||||||
|
|
||||||
assertEquals("java.io.PrintStream", methods[0].getReturnType().getCanonicalText());
|
assertEquals("java.io.PrintStream", methods[0].getReturnType().getCanonicalText());
|
||||||
|
|||||||
@@ -77,12 +77,6 @@ public class ReferenceResolveInJavaTestGenerated extends AbstractReferenceResolv
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("DeprecatedClassObjectField.java")
|
|
||||||
public void testDeprecatedClassObjectField() throws Exception {
|
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/referenceInJava/DeprecatedClassObjectField.java");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("EnumEntry.java")
|
@TestMetadata("EnumEntry.java")
|
||||||
public void testEnumEntry() throws Exception {
|
public void testEnumEntry() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/referenceInJava/EnumEntry.java");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/referenceInJava/EnumEntry.java");
|
||||||
|
|||||||
-2
@@ -6,5 +6,3 @@ m 1 0/SomeClass$Companion access$init$0
|
|||||||
c 0 0/SomeClass$SomeInnerObject
|
c 0 0/SomeClass$SomeInnerObject
|
||||||
c 0 0/SomeClass$InnerClass
|
c 0 0/SomeClass$InnerClass
|
||||||
c 0 0/SomeClass$NestedClass
|
c 0 0/SomeClass$NestedClass
|
||||||
a java.lang.Deprecated 2
|
|
||||||
f 2 0/SomeClass OBJECT$
|
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
java.lang.Deprecated org.test.SomeClass OBJECT$
|
|
||||||
javax.inject.Named org.test.SomeClass.Companion
|
javax.inject.Named org.test.SomeClass.Companion
|
||||||
javax.inject.Named org.test.SomeClass.InnerClass
|
javax.inject.Named org.test.SomeClass.InnerClass
|
||||||
javax.inject.Named org.test.SomeClass.NestedClass
|
javax.inject.Named org.test.SomeClass.NestedClass
|
||||||
|
|||||||
-2
@@ -5,7 +5,5 @@ a kotlin.inline 1
|
|||||||
m 1 0/SomeClass$Companion a
|
m 1 0/SomeClass$Companion a
|
||||||
a org.jetbrains.annotations.NotNull 2
|
a org.jetbrains.annotations.NotNull 2
|
||||||
m 2 0/SomeClass$Companion access$init$0
|
m 2 0/SomeClass$Companion access$init$0
|
||||||
a java.lang.Deprecated 3
|
|
||||||
f 3 0/SomeClass OBJECT$
|
|
||||||
m 0 0/SomeClass a
|
m 0 0/SomeClass a
|
||||||
m 1 0/SomeClass a
|
m 1 0/SomeClass a
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
java.lang.Deprecated org.test.SomeClass OBJECT$
|
|
||||||
kotlin.inline org.test.SomeClass.Companion a
|
kotlin.inline org.test.SomeClass.Companion a
|
||||||
kotlin.platform.platformStatic org.test.SomeClass.Companion a
|
kotlin.platform.platformStatic org.test.SomeClass.Companion a
|
||||||
org.jetbrains.annotations.NotNull org.test.SomeClass.Companion access$init$0
|
org.jetbrains.annotations.NotNull org.test.SomeClass.Companion access$init$0
|
||||||
-1
@@ -5,4 +5,3 @@ c 0 0/SomeClass$SomeInnerObject
|
|||||||
c 0 0/SomeClass$InnerClass
|
c 0 0/SomeClass$InnerClass
|
||||||
c 0 0/SomeClass$InnerClass$InnerClassInInnerClass
|
c 0 0/SomeClass$InnerClass$InnerClassInInnerClass
|
||||||
c 0 0/SomeClass$NestedClass
|
c 0 0/SomeClass$NestedClass
|
||||||
f 0 0/SomeClass OBJECT$
|
|
||||||
|
|||||||
-2
@@ -3,7 +3,5 @@ p org.test 0
|
|||||||
m 0 0/SomeClass$Companion a
|
m 0 0/SomeClass$Companion a
|
||||||
a kotlin.inline 1
|
a kotlin.inline 1
|
||||||
m 1 0/SomeClass$Companion a
|
m 1 0/SomeClass$Companion a
|
||||||
a java.lang.Deprecated 2
|
|
||||||
f 2 0/SomeClass OBJECT$
|
|
||||||
m 0 0/SomeClass a
|
m 0 0/SomeClass a
|
||||||
m 1 0/SomeClass a
|
m 1 0/SomeClass a
|
||||||
|
|||||||
Reference in New Issue
Block a user