Delete JvmClassName.byClass, refactor JvmAnnotationNames

Store constant class names as instances of FqName instead of JvmClassName. This
is done to minimize usages of the method 'JvmClassName.getFqName()', since it's
wrong and shouldn't be used
This commit is contained in:
Alexander Udalov
2013-09-26 22:19:35 +04:00
parent 6aab9fe04e
commit 45bc7c2926
17 changed files with 93 additions and 89 deletions
@@ -19,37 +19,26 @@ package org.jetbrains.jet.lang.resolve.java;
import jet.KotlinClass;
import jet.KotlinPackage;
import jet.KotlinPackageFragment;
import jet.runtime.typeinfo.KotlinSignature;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.rt.annotation.AssertInvisibleInResolver;
import org.jetbrains.jet.lang.resolve.name.FqName;
import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.fqNameByClass;
public final class JvmAnnotationNames {
public static final JvmClassName KOTLIN_CLASS = JvmClassName.byClass(KotlinClass.class);
public static final FqName KOTLIN_CLASS = fqNameByClass(KotlinClass.class);
public static final JvmClassName KOTLIN_PACKAGE = JvmClassName.byClass(KotlinPackage.class);
public static final FqName KOTLIN_PACKAGE = fqNameByClass(KotlinPackage.class);
public static final JvmClassName KOTLIN_PACKAGE_FRAGMENT = JvmClassName.byClass(KotlinPackageFragment.class);
public static final FqName KOTLIN_PACKAGE_FRAGMENT = fqNameByClass(KotlinPackageFragment.class);
public static final String ABI_VERSION_FIELD_NAME = "abiVersion";
public static final String DATA_FIELD_NAME = "data";
@Deprecated
public static final JvmClassName OLD_JET_CLASS_ANNOTATION = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetClass");
public static final FqName OLD_JET_CLASS_ANNOTATION = new FqName("jet.runtime.typeinfo.JetClass");
@Deprecated
public static final JvmClassName OLD_JET_PACKAGE_CLASS_ANNOTATION = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetPackageClass");
public static final JvmClassName ASSERT_INVISIBLE_IN_RESOLVER = JvmClassName.byClass(AssertInvisibleInResolver.class);
public static final JvmClassName KOTLIN_SIGNATURE = JvmClassName.byClass(KotlinSignature.class);
public static final Name KOTLIN_SIGNATURE_VALUE_FIELD_NAME = Name.identifier("value");
public static final JvmClassName JETBRAINS_NOT_NULL_ANNOTATION = JvmClassName.byClass(NotNull.class);
public static final JvmClassName JETBRAINS_MUTABLE_ANNOTATION = JvmClassName.byFqNameWithoutInnerClasses("org.jetbrains.annotations.Mutable");
public static final JvmClassName JETBRAINS_READONLY_ANNOTATION = JvmClassName.byFqNameWithoutInnerClasses("org.jetbrains.annotations.ReadOnly");
public static final FqName OLD_JET_PACKAGE_CLASS_ANNOTATION = new FqName("jet.runtime.typeinfo.JetPackageClass");
private JvmAnnotationNames() {
}
@@ -51,11 +51,6 @@ public class JvmClassName {
return byFqNameWithoutInnerClasses(new FqName(fqName));
}
@NotNull
public static JvmClassName byClass(@NotNull Class<?> klass) {
return byFqNameWithoutInnerClasses(new FqName(klass.getCanonicalName()));
}
@NotNull
private static String encodeSpecialNames(@NotNull String str) {
String encodedObjectNames = StringUtil.replace(str, JvmAbi.CLASS_OBJECT_CLASS_NAME, CLASS_OBJECT_REPLACE_GUARD);
@@ -39,6 +39,8 @@ import org.jetbrains.jet.lang.types.lang.PrimitiveType;
import java.util.*;
import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.fqNameByClass;
public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements PlatformToKotlinClassMap {
private static final FqName JAVA_LANG_DEPRECATED = new FqName("java.lang.Deprecated");
@@ -113,18 +115,10 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements
return annotation;
}
private static FqName getJavaClassFqName(@NotNull Class<?> javaClass) {
return new FqName(javaClass.getName().replace('$', '.'));
}
@Override
protected void register(
@NotNull Class<?> javaClass,
@NotNull ClassDescriptor kotlinDescriptor,
@NotNull Direction direction
) {
protected void register(@NotNull Class<?> javaClass, @NotNull ClassDescriptor kotlinDescriptor, @NotNull Direction direction) {
if (direction == Direction.BOTH || direction == Direction.JAVA_TO_KOTLIN) {
register(getJavaClassFqName(javaClass), kotlinDescriptor);
register(fqNameByClass(javaClass), kotlinDescriptor);
}
}
@@ -136,7 +130,7 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements
@NotNull Direction direction
) {
if (direction == Direction.BOTH || direction == Direction.JAVA_TO_KOTLIN) {
FqName javaClassName = getJavaClassFqName(javaClass);
FqName javaClassName = fqNameByClass(javaClass);
register(javaClassName, kotlinDescriptor);
registerCovariant(javaClassName, kotlinMutableDescriptor);
}
@@ -43,7 +43,7 @@ public final class DescriptorResolverUtils {
if (javaClass.getOriginKind() == JavaClass.OriginKind.COMPILED) {
FqName fqName = javaClass.getFqName();
if (fqName != null && PackageClassUtils.isPackageClassFqName(fqName)) {
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE.getFqName()) != null;
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE) != null;
}
}
return false;
@@ -51,7 +51,7 @@ public final class DescriptorResolverUtils {
public static boolean isCompiledKotlinClass(@NotNull JavaClass javaClass) {
if (javaClass.getOriginKind() == JavaClass.OriginKind.COMPILED) {
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_CLASS.getFqName()) != null;
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_CLASS) != null;
}
return false;
}
@@ -60,6 +60,11 @@ public final class DescriptorResolverUtils {
return isCompiledKotlinClass(javaClass) || isCompiledKotlinPackageClass(javaClass);
}
@NotNull
public static FqName fqNameByClass(@NotNull Class<?> clazz) {
return new FqName(clazz.getCanonicalName());
}
@NotNull
public static <D extends CallableMemberDescriptor> Collection<D> resolveOverrides(
@NotNull Name name,
@@ -23,7 +23,6 @@ import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotation;
import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotationArgument;
@@ -37,9 +36,13 @@ import java.util.Collection;
import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.fqNameByClass;
public final class JavaAnnotationResolver {
public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
public static final FqName JETBRAINS_NOT_NULL_ANNOTATION = fqNameByClass(NotNull.class);
public static final FqName JETBRAINS_MUTABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Mutable");
public static final FqName JETBRAINS_READONLY_ANNOTATION = new FqName("org.jetbrains.annotations.ReadOnly");
private JavaClassResolver classResolver;
private JavaAnnotationArgumentResolver argumentResolver;
@@ -102,9 +105,9 @@ public final class JavaAnnotationResolver {
// Don't process internal jet annotations and jetbrains NotNull annotations
if (fqName.asString().startsWith("jet.runtime.typeinfo.")
|| fqName.equals(JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION.getFqName())
|| fqName.equals(JvmAnnotationNames.KOTLIN_CLASS.getFqName())
|| fqName.equals(JvmAnnotationNames.KOTLIN_PACKAGE.getFqName())
|| fqName.equals(JETBRAINS_NOT_NULL_ANNOTATION)
|| fqName.equals(JvmAnnotationNames.KOTLIN_CLASS)
|| fqName.equals(JvmAnnotationNames.KOTLIN_PACKAGE)
) {
return null;
}
@@ -143,24 +146,24 @@ public final class JavaAnnotationResolver {
}
@Nullable
public JavaAnnotation findAnnotationWithExternal(@NotNull JavaAnnotationOwner owner, @NotNull JvmClassName name) {
JavaAnnotation annotation = owner.findAnnotation(name.getFqName());
public JavaAnnotation findAnnotationWithExternal(@NotNull JavaAnnotationOwner owner, @NotNull FqName name) {
JavaAnnotation annotation = owner.findAnnotation(name);
if (annotation != null) {
return annotation;
}
return externalAnnotationResolver.findExternalAnnotation(owner, name.getFqName());
return externalAnnotationResolver.findExternalAnnotation(owner, name);
}
public boolean hasNotNullAnnotation(@NotNull JavaAnnotationOwner owner) {
return findAnnotationWithExternal(owner, JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION) != null;
return findAnnotationWithExternal(owner, JETBRAINS_NOT_NULL_ANNOTATION) != null;
}
public boolean hasMutableAnnotation(@NotNull JavaAnnotationOwner owner) {
return findAnnotationWithExternal(owner, JvmAnnotationNames.JETBRAINS_MUTABLE_ANNOTATION) != null;
return findAnnotationWithExternal(owner, JETBRAINS_MUTABLE_ANNOTATION) != null;
}
public boolean hasReadonlyAnnotation(@NotNull JavaAnnotationOwner owner) {
return findAnnotationWithExternal(owner, JvmAnnotationNames.JETBRAINS_READONLY_ANNOTATION) != null;
return findAnnotationWithExternal(owner, JETBRAINS_READONLY_ANNOTATION) != null;
}
}
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
import org.jetbrains.jet.lang.resolve.java.JavaClassFinder;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaEnumClassObjectDescriptor;
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
@@ -48,14 +47,17 @@ import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.rt.annotation.AssertInvisibleInResolver;
import javax.inject.Inject;
import java.util.*;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.fqNameByClass;
public final class JavaClassResolver {
private static final FqName ASSERT_INVISIBLE_IN_RESOLVER_ANNOTATION = fqNameByClass(AssertInvisibleInResolver.class);
private static final Logger LOG = Logger.getInstance(JavaClassResolver.class);
@NotNull
@@ -207,7 +209,7 @@ public final class JavaClassResolver {
}
if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(qualifiedName.parent())) {
if (javaClass.findAnnotation(JvmAnnotationNames.ASSERT_INVISIBLE_IN_RESOLVER.getFqName()) != null) {
if (javaClass.findAnnotation(ASSERT_INVISIBLE_IN_RESOLVER_ANNOTATION) != null) {
if (ApplicationManager.getApplication().isInternal()) {
LOG.error("classpath is configured incorrectly:" +
" class " + qualifiedName + " from runtime must not be loaded by compiler");
@@ -138,9 +138,9 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
}
private static boolean ignoreAnnotation(@NotNull JvmClassName className) {
// TODO: JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION ?
return className.equals(JvmAnnotationNames.KOTLIN_CLASS)
|| className.equals(JvmAnnotationNames.KOTLIN_PACKAGE)
// TODO: JETBRAINS_NOT_NULL_ANNOTATION ?
return className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS))
|| className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_PACKAGE))
|| className.getInternalName().startsWith("jet/runtime/typeinfo/");
}
@@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.resolve.java.AbiVersionUtil;
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.ArrayList;
@@ -46,8 +47,8 @@ import static org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass.Annotat
@NotNull
private final JvmClassName annotation;
private HeaderType(@NotNull JvmClassName annotation) {
this.annotation = annotation;
private HeaderType(@NotNull FqName annotation) {
this.annotation = JvmClassName.byFqNameWithoutInnerClasses(annotation);
}
@Nullable