From 08647b4ae7c176b6ca1572392dd3980a942105c2 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Thu, 15 Dec 2011 20:15:28 +0400 Subject: [PATCH] rename @JetSignature to @JetClass, better constants in StdlibNames --- .../jet/codegen/FunctionCodegen.java | 8 ++-- .../codegen/ImplementationBodyCodegen.java | 7 ++-- .../resolve/java/JavaDescriptorResolver.java | 8 ++-- .../jet/lang/resolve/java/JvmClassName.java | 42 +++++++++++++++++++ .../jet/lang/resolve/java/StdlibNames.java | 25 +++++------ .../{JetSignature.java => JetClass.java} | 4 +- .../org/jetbrains/jet/rt/TypeInfoParser.java | 6 +-- 7 files changed, 71 insertions(+), 29 deletions(-) create mode 100644 compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java rename stdlib/src/jet/typeinfo/{JetSignature.java => JetClass.java} (85%) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 001ff53bf88..befdaf21a7e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -100,12 +100,12 @@ public class FunctionCodegen { } if(kind == OwnerKind.TRAIT_IMPL) { - AnnotationVisitor av = mv.visitParameterAnnotation(start++, StdlibNames.JET_VALUE_PARAMETER_DESCRIPTOR, true); + AnnotationVisitor av = mv.visitParameterAnnotation(start++, StdlibNames.JET_VALUE_PARAMETER.getDescriptor(), true); av.visit(StdlibNames.JET_VALUE_PARAMETER_NAME_FIELD, "this$self"); av.visitEnd(); } if(receiverParameter.exists()) { - AnnotationVisitor av = mv.visitParameterAnnotation(start++, StdlibNames.JET_VALUE_PARAMETER_DESCRIPTOR, true); + AnnotationVisitor av = mv.visitParameterAnnotation(start++, StdlibNames.JET_VALUE_PARAMETER.getDescriptor(), true); av.visit(StdlibNames.JET_VALUE_PARAMETER_NAME_FIELD, "this$receiver"); if(receiverParameter.getType().isNullable()) { av.visit(StdlibNames.JET_VALUE_PARAMETER_NULLABLE_FIELD, true); @@ -113,12 +113,12 @@ public class FunctionCodegen { av.visitEnd(); } for (final TypeParameterDescriptor typeParameterDescriptor : typeParameters) { - AnnotationVisitor av = mv.visitParameterAnnotation(start++, StdlibNames.JET_TYPE_PARAMETER_DESCRIPTOR, true); + AnnotationVisitor av = mv.visitParameterAnnotation(start++, StdlibNames.JET_TYPE_PARAMETER.getDescriptor(), true); av.visit(StdlibNames.JET_TYPE_PARAMETER_NAME_FIELD, typeParameterDescriptor.getName()); av.visitEnd(); } for(int i = 0; i != paramDescrs.size(); ++i) { - AnnotationVisitor av = mv.visitParameterAnnotation(i + start, StdlibNames.JET_VALUE_PARAMETER_DESCRIPTOR, true); + AnnotationVisitor av = mv.visitParameterAnnotation(i + start, StdlibNames.JET_VALUE_PARAMETER.getDescriptor(), true); ValueParameterDescriptor parameterDescriptor = paramDescrs.get(i); av.visit(StdlibNames.JET_VALUE_PARAMETER_NAME_FIELD, parameterDescriptor.getName()); if(parameterDescriptor.hasDefaultValue()) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 1fe54ebc47f..2d36920442d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -72,9 +72,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } if(myClass instanceof JetClass && signature.getKotlinGenericSignature() != null) { - AnnotationVisitor annotationVisitor = v.newAnnotation(myClass, "Ljet/typeinfo/JetSignature;", true); - //annotationVisitor.visit("value", SignatureUtil.classToSignature((JetClass)myClass, bindingContext, typeMapper)); - annotationVisitor.visit("value", signature.getKotlinGenericSignature()); + AnnotationVisitor annotationVisitor = v.newAnnotation(myClass, StdlibNames.JET_CLASS.getDescriptor(), true); + annotationVisitor.visit(StdlibNames.JET_CLASS_SIGNATURE, signature.getKotlinGenericSignature()); annotationVisitor.visitEnd(); } } @@ -107,7 +106,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { { // superinterfaces - superInterfacesLinkedHashSet.add(StdlibNames.JET_OBJECT_INTERNAL); + superInterfacesLinkedHashSet.add(StdlibNames.JET_OBJECT.getInternalName()); for (JetDelegationSpecifier specifier : myClass.getDelegationSpecifiers()) { JetType superType = bindingContext.get(BindingContext.TYPE, specifier.getTypeReference()); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 9a2bd50a811..e6c73ef29eb 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -381,7 +381,7 @@ public class JavaDescriptorResolver { PsiNameValuePair[] attributes = annotation.getParameterList().getAttributes(); attributes.toString(); - if (annotation.getQualifiedName().equals(StdlibNames.JET_VALUE_PARAMETER_CLASS)) { + if (annotation.getQualifiedName().equals(StdlibNames.JET_VALUE_PARAMETER.getFqName())) { PsiLiteralExpression nameExpression = (PsiLiteralExpression) annotation.findAttributeValue(StdlibNames.JET_VALUE_PARAMETER_NAME_FIELD); if (nameExpression != null) { name = (String) nameExpression.getValue(); @@ -400,7 +400,7 @@ public class JavaDescriptorResolver { if (signatureExpression != null) { typeFromAnnotation = (String) signatureExpression.getValue(); } - } else if (annotation.getQualifiedName().equals(StdlibNames.JET_TYPE_PARAMETER_CLASS)) { + } else if (annotation.getQualifiedName().equals(StdlibNames.JET_TYPE_PARAMETER.getFqName())) { return null; } } @@ -531,7 +531,7 @@ public class JavaDescriptorResolver { private List resolveMethodTypeParameters(PsiMethod method, FunctionDescriptorImpl functionDescriptorImpl) { for (PsiAnnotation annotation : method.getModifierList().getAnnotations()) { - if (annotation.getQualifiedName().equals(StdlibNames.JET_METHOD_CLASS)) { + if (annotation.getQualifiedName().equals(StdlibNames.JET_METHOD.getFqName())) { PsiLiteralExpression attributeValue = (PsiLiteralExpression) annotation.findAttributeValue(StdlibNames.JET_METHOD_TYPE_PARAMETERS_FIELD); if (attributeValue != null) { String typeParametersString = (String) attributeValue.getValue(); @@ -600,7 +600,7 @@ public class JavaDescriptorResolver { String returnTypeFromAnnotation = null; for (PsiAnnotation annotation : method.getModifierList().getAnnotations()) { - if (annotation.getQualifiedName().equals(StdlibNames.JET_METHOD_CLASS)) { + if (annotation.getQualifiedName().equals(StdlibNames.JET_METHOD.getFqName())) { PsiLiteralExpression nullableExpression = (PsiLiteralExpression) annotation.findAttributeValue(StdlibNames.JET_METHOD_NULLABLE_RETURN_TYPE_FIELD); if (nullableExpression != null) { nullable = (Boolean) nullableExpression.getValue(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java new file mode 100644 index 00000000000..db1bcac52ff --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java @@ -0,0 +1,42 @@ +package org.jetbrains.jet.lang.resolve.java; + +import org.jetbrains.annotations.NotNull; + +/** + * @author Stepan Koltsov + */ +public class JvmClassName { + + private final String fqName; + + public JvmClassName(@NotNull String fqName) { + this.fqName = fqName; + } + + public String getFqName() { + return fqName; + } + + private String internalName; + + public String getInternalName() { + if (internalName == null) { + String descriptor = getDescriptor(); + internalName = descriptor.substring(1, descriptor.length() - 1); + } + return internalName; + } + + private String descriptor; + + public String getDescriptor() { + if (descriptor == null) { + StringBuilder sb = new StringBuilder(fqName.length() + 2); + sb.append('L'); + sb.append(fqName.replace('.', '/')); + sb.append(';'); + descriptor = sb.toString(); + } + return descriptor; + } +} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/StdlibNames.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/StdlibNames.java index 6e3e8abeb34..dd071b38631 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/StdlibNames.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/StdlibNames.java @@ -7,32 +7,33 @@ import org.objectweb.asm.Type; */ public class StdlibNames { - public static final String JET_VALUE_PARAMETER_CLASS = "jet.typeinfo.JetValueParameter"; - public static final String JET_VALUE_PARAMETER_DESCRIPTOR = "Ljet/typeinfo/JetValueParameter;"; - + public static final JvmClassName JET_VALUE_PARAMETER = new JvmClassName("jet.typeinfo.JetValueParameter"); + public static final String JET_VALUE_PARAMETER_NAME_FIELD = "name"; public static final String JET_VALUE_PARAMETER_HAS_DEFAULT_VALUE_FIELD = "hasDefaultValue"; public static final String JET_VALUE_PARAMETER_NULLABLE_FIELD = "nullable"; public static final String JET_VALUE_PARAMETER_TYPE_FIELD = "type"; - public static final String JET_TYPE_PARAMETER_CLASS = "jet.typeinfo.JetTypeParameter"; - public static final String JET_TYPE_PARAMETER_DESCRIPTOR = "Ljet/typeinfo/JetTypeParameter;"; - + public static final JvmClassName JET_TYPE_PARAMETER = new JvmClassName("jet.typeinfo.JetTypeParameter"); + public static final String JET_TYPE_PARAMETER_NAME_FIELD = "name"; - public static final String JET_METHOD_CLASS = "jet.typeinfo.JetMethod"; - public static final String JET_METHOD_DESCRIPTOR = "Ljet/typeinfo/JetMethod;"; - + public static final JvmClassName JET_METHOD = new JvmClassName("jet.typeinfo.JetMethod"); + public static final String JET_METHOD_NULLABLE_RETURN_TYPE_FIELD = "nullableReturnType"; public static final String JET_METHOD_RETURN_TYPE_FIELD = "returnType"; public static final String JET_METHOD_TYPE_PARAMETERS_FIELD = "typeParameters"; - public static final String JET_OBJECT_INTERNAL = "jet/JetObject"; - public static final String JET_OBJECT_CLASS = "jet.JetObject"; - public static final String JET_OBJECT_DESCRIPTOR = "Ljet/JetObject;"; + public static final JvmClassName JET_CLASS = new JvmClassName("jet.typeinfo.JetClass"); + + public static final String JET_CLASS_SIGNATURE = "signature"; + + + public static final JvmClassName JET_OBJECT = new JvmClassName("jet.JetObject"); + private StdlibNames() { } diff --git a/stdlib/src/jet/typeinfo/JetSignature.java b/stdlib/src/jet/typeinfo/JetClass.java similarity index 85% rename from stdlib/src/jet/typeinfo/JetSignature.java rename to stdlib/src/jet/typeinfo/JetClass.java index c93f818951b..7a887134347 100644 --- a/stdlib/src/jet/typeinfo/JetSignature.java +++ b/stdlib/src/jet/typeinfo/JetClass.java @@ -11,7 +11,7 @@ import java.util.*; * @url http://confluence.jetbrains.net/display/JET/Jet+Signatures */ @Retention(RetentionPolicy.RUNTIME) -public @interface JetSignature { - String value(); +public @interface JetClass { + String signature(); } diff --git a/stdlib/src/org/jetbrains/jet/rt/TypeInfoParser.java b/stdlib/src/org/jetbrains/jet/rt/TypeInfoParser.java index 78fa32782e4..99910c810e7 100644 --- a/stdlib/src/org/jetbrains/jet/rt/TypeInfoParser.java +++ b/stdlib/src/org/jetbrains/jet/rt/TypeInfoParser.java @@ -1,6 +1,6 @@ package org.jetbrains.jet.rt; -import jet.typeinfo.JetSignature; +import jet.typeinfo.JetClass; import jet.typeinfo.TypeInfo; import jet.typeinfo.TypeInfoProjection; import jet.typeinfo.TypeInfoVariance; @@ -51,9 +51,9 @@ class TypeInfoParser { return signature; } - JetSignature annotation = (JetSignature) klass.getAnnotation(JetSignature.class); + JetClass annotation = (JetClass) klass.getAnnotation(JetClass.class); if(annotation != null) { - String value = annotation.value(); + String value = annotation.signature(); if(value != null) { Class enclosingClass = klass.getEnclosingClass(); Signature signature = new Signature(klass);