Remove all class object related constants and utils from JvmAbi
This commit is contained in:
@@ -16,9 +16,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.codegen;
|
package org.jetbrains.kotlin.codegen;
|
||||||
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
|
import org.jetbrains.kotlin.name.SpecialNames;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@@ -144,7 +144,7 @@ public class ClassGenTest extends CodegenTestCase {
|
|||||||
loadFile("classes/classObjectIsInnerClass.kt");
|
loadFile("classes/classObjectIsInnerClass.kt");
|
||||||
GeneratedClassLoader loader = generateAndCreateClassLoader();
|
GeneratedClassLoader loader = generateAndCreateClassLoader();
|
||||||
Class<?> a = loader.loadClass("A");
|
Class<?> a = loader.loadClass("A");
|
||||||
Class<?> aClassObject = loader.loadClass("A" + JvmAbi.CLASS_OBJECT_SUFFIX);
|
Class<?> aClassObject = loader.loadClass("A$" + SpecialNames.DEFAULT_NAME_FOR_DEFAULT_OBJECT.asString());
|
||||||
assertSameElements(a.getDeclaredClasses(), aClassObject);
|
assertSameElements(a.getDeclaredClasses(), aClassObject);
|
||||||
assertEquals(a, aClassObject.getDeclaringClass());
|
assertEquals(a, aClassObject.getDeclaringClass());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.codegen;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.name.SpecialNames;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
import org.jetbrains.kotlin.utils.UtilsPackage;
|
import org.jetbrains.kotlin.utils.UtilsPackage;
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader;
|
import org.jetbrains.org.objectweb.asm.ClassReader;
|
||||||
@@ -44,13 +44,14 @@ public class InnerClassInfoGenTest extends CodegenTestCase {
|
|||||||
public void testInnerClassInfo() {
|
public void testInnerClassInfo() {
|
||||||
InnerClassAttribute innerB = new InnerClassAttribute("A$B", "A", "B", ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
|
InnerClassAttribute innerB = new InnerClassAttribute("A$B", "A", "B", ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
|
||||||
InnerClassAttribute innerC = new InnerClassAttribute("A$B$C", "A$B", "C", ACC_PUBLIC | ACC_FINAL);
|
InnerClassAttribute innerC = new InnerClassAttribute("A$B$C", "A$B", "C", ACC_PUBLIC | ACC_FINAL);
|
||||||
|
String classObjectDefaultName = SpecialNames.DEFAULT_NAME_FOR_DEFAULT_OBJECT.asString();
|
||||||
InnerClassAttribute innerAClassObject = new InnerClassAttribute(
|
InnerClassAttribute innerAClassObject = new InnerClassAttribute(
|
||||||
"A" + JvmAbi.CLASS_OBJECT_SUFFIX, "A", JvmAbi.CLASS_OBJECT_CLASS_NAME, ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
|
"A$" + classObjectDefaultName, "A", classObjectDefaultName, ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
|
||||||
|
|
||||||
extractAndCompareInnerClasses("A", innerB, innerAClassObject);
|
extractAndCompareInnerClasses("A", innerB, innerAClassObject);
|
||||||
extractAndCompareInnerClasses("A$B", innerB, innerC);
|
extractAndCompareInnerClasses("A$B", innerB, innerC);
|
||||||
extractAndCompareInnerClasses("A$B$C", innerB, innerC);
|
extractAndCompareInnerClasses("A$B$C", innerB, innerC);
|
||||||
extractAndCompareInnerClasses("A" + JvmAbi.CLASS_OBJECT_SUFFIX, innerAClassObject);
|
extractAndCompareInnerClasses("A$" + classObjectDefaultName, innerAClassObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testLocalClass() {
|
public void testLocalClass() {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.codegen;
|
package org.jetbrains.kotlin.codegen;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.name.SpecialNames;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes;
|
import org.jetbrains.org.objectweb.asm.Opcodes;
|
||||||
|
|
||||||
@@ -248,7 +248,7 @@ public class PropertyGenTest extends CodegenTestCase {
|
|||||||
findDeclaredMethodByName(c, "getExtension");
|
findDeclaredMethodByName(c, "getExtension");
|
||||||
findDeclaredMethodByName(c, "setExtension");
|
findDeclaredMethodByName(c, "setExtension");
|
||||||
|
|
||||||
findDeclaredMethodByName(initializedClassLoader.loadClass("C" + JvmAbi.CLASS_OBJECT_SUFFIX), "getClassObjectVal");
|
findDeclaredMethodByName(initializedClassLoader.loadClass("C$" + SpecialNames.DEFAULT_NAME_FOR_DEFAULT_OBJECT.asString()), "getClassObjectVal");
|
||||||
|
|
||||||
assertNull("Property should not have a getter", findDeclaredMethodByNameOrNull(c, "getVarNoAccessors"));
|
assertNull("Property should not have a getter", findDeclaredMethodByNameOrNull(c, "getVarNoAccessors"));
|
||||||
assertNull("Property should not have a setter", findDeclaredMethodByNameOrNull(c, "setVarNoAccessors"));
|
assertNull("Property should not have a setter", findDeclaredMethodByNameOrNull(c, "setVarNoAccessors"));
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.load.java;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.name.SpecialNames;
|
|
||||||
|
|
||||||
public final class JvmAbi {
|
public final class JvmAbi {
|
||||||
/**
|
/**
|
||||||
@@ -36,24 +35,16 @@ public final class JvmAbi {
|
|||||||
public static final String GETTER_PREFIX = "get";
|
public static final String GETTER_PREFIX = "get";
|
||||||
public static final String SETTER_PREFIX = "set";
|
public static final String SETTER_PREFIX = "set";
|
||||||
|
|
||||||
public static final String CLASS_OBJECT_CLASS_NAME = SpecialNames.DEFAULT_NAME_FOR_DEFAULT_OBJECT.asString();
|
|
||||||
public static final String CLASS_OBJECT_SUFFIX = "$" + CLASS_OBJECT_CLASS_NAME;
|
|
||||||
|
|
||||||
public static final String DELEGATED_PROPERTY_NAME_SUFFIX = "$delegate";
|
public static final String DELEGATED_PROPERTY_NAME_SUFFIX = "$delegate";
|
||||||
public static final String PROPERTY_METADATA_ARRAY_NAME = "$propertyMetadata";
|
public static final String PROPERTY_METADATA_ARRAY_NAME = "$propertyMetadata";
|
||||||
public static final String ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX = "$annotations";
|
public static final String ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX = "$annotations";
|
||||||
|
|
||||||
public static final String INSTANCE_FIELD = "INSTANCE$";
|
public static final String INSTANCE_FIELD = "INSTANCE$";
|
||||||
public static final String CLASS_OBJECT_FIELD = CLASS_OBJECT_CLASS_NAME;
|
|
||||||
|
|
||||||
public static final FqName K_OBJECT = new FqName("kotlin.jvm.internal.KObject");
|
public static final FqName K_OBJECT = new FqName("kotlin.jvm.internal.KObject");
|
||||||
public static final String KOTLIN_CLASS_FIELD_NAME = "$kotlinClass";
|
public static final String KOTLIN_CLASS_FIELD_NAME = "$kotlinClass";
|
||||||
public static final String KOTLIN_PACKAGE_FIELD_NAME = "$kotlinPackage";
|
public static final String KOTLIN_PACKAGE_FIELD_NAME = "$kotlinPackage";
|
||||||
|
|
||||||
public static boolean isClassObjectFqName(@NotNull FqName fqName) {
|
|
||||||
return fqName.lastSegmentIs(Name.identifier(CLASS_OBJECT_CLASS_NAME));
|
|
||||||
}
|
|
||||||
|
|
||||||
@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;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.asJava.LightClassUtil;
|
|||||||
import org.jetbrains.kotlin.idea.JetLightCodeInsightFixtureTestCase;
|
import org.jetbrains.kotlin.idea.JetLightCodeInsightFixtureTestCase;
|
||||||
import org.jetbrains.kotlin.idea.JetLightProjectDescriptor;
|
import org.jetbrains.kotlin.idea.JetLightProjectDescriptor;
|
||||||
import org.jetbrains.kotlin.idea.PluginTestCaseBase;
|
import org.jetbrains.kotlin.idea.PluginTestCaseBase;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.name.SpecialNames;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
|
|
||||||
public class JetJavaFacadeTest extends JetLightCodeInsightFixtureTestCase {
|
public class JetJavaFacadeTest extends JetLightCodeInsightFixtureTestCase {
|
||||||
@@ -186,20 +186,21 @@ public class JetJavaFacadeTest extends JetLightCodeInsightFixtureTestCase {
|
|||||||
PsiField classobjField = theClass.findFieldByName("$classobj", false);
|
PsiField classobjField = theClass.findFieldByName("$classobj", false);
|
||||||
assertNull(classobjField);
|
assertNull(classobjField);
|
||||||
|
|
||||||
PsiClass classObjectClass = theClass.findInnerClassByName("object", false);
|
String defaultClassObjectName = SpecialNames.DEFAULT_NAME_FOR_DEFAULT_OBJECT.asString();
|
||||||
|
PsiClass classObjectClass = theClass.findInnerClassByName(defaultClassObjectName, false);
|
||||||
assertNotNull(classObjectClass);
|
assertNotNull(classObjectClass);
|
||||||
assertEquals("foo.TheClass.object", classObjectClass.getQualifiedName());
|
assertEquals("foo.TheClass." + defaultClassObjectName, classObjectClass.getQualifiedName());
|
||||||
assertTrue(classObjectClass.hasModifierProperty(PsiModifier.STATIC));
|
assertTrue(classObjectClass.hasModifierProperty(PsiModifier.STATIC));
|
||||||
|
|
||||||
PsiField instance = theClass.findFieldByName(JvmAbi.CLASS_OBJECT_FIELD, false);
|
PsiField instance = theClass.findFieldByName(defaultClassObjectName, false);
|
||||||
assertNotNull(instance);
|
assertNotNull(instance);
|
||||||
assertEquals("foo.TheClass.object", instance.getType().getCanonicalText());
|
assertEquals("foo.TheClass." + defaultClassObjectName, instance.getType().getCanonicalText());
|
||||||
assertTrue(instance.hasModifierProperty(PsiModifier.PUBLIC));
|
assertTrue(instance.hasModifierProperty(PsiModifier.PUBLIC));
|
||||||
assertTrue(instance.hasModifierProperty(PsiModifier.STATIC));
|
assertTrue(instance.hasModifierProperty(PsiModifier.STATIC));
|
||||||
assertTrue(instance.hasModifierProperty(PsiModifier.FINAL));
|
assertTrue(instance.hasModifierProperty(PsiModifier.FINAL));
|
||||||
|
|
||||||
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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user