diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java index 694c1d7c0e5..11df5a72bac 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java @@ -25,7 +25,6 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassOrPackageFragmentDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -64,17 +63,17 @@ public abstract class BaseDescriptorDeserializer { switch (kind) { case FUNCTION: if (proto.hasExtension(JavaProtoBuf.methodSignature)) { - return deserializer.methodSignature(proto.getExtension(JavaProtoBuf.methodSignature)); + return MemberSignature.fromAsmMethod(deserializer.methodSignature(proto.getExtension(JavaProtoBuf.methodSignature))); } break; case PROPERTY_GETTER: if (proto.hasExtension(JavaProtoBuf.propertySignature)) { - return deserializer.methodSignature(proto.getExtension(JavaProtoBuf.propertySignature).getGetter()); + return MemberSignature.fromAsmMethod(deserializer.methodSignature(proto.getExtension(JavaProtoBuf.propertySignature).getGetter())); } break; case PROPERTY_SETTER: if (proto.hasExtension(JavaProtoBuf.propertySignature)) { - return deserializer.methodSignature(proto.getExtension(JavaProtoBuf.propertySignature).getSetter()); + return MemberSignature.fromAsmMethod(deserializer.methodSignature(proto.getExtension(JavaProtoBuf.propertySignature).getSetter())); } break; case PROPERTY: @@ -88,7 +87,7 @@ public abstract class BaseDescriptorDeserializer { return MemberSignature.fromFieldNameAndDesc(name, type); } else if (propertySignature.hasSyntheticMethod()) { - return deserializer.methodSignature(propertySignature.getSyntheticMethod()); + return MemberSignature.fromAsmMethod(deserializer.methodSignature(propertySignature.getSyntheticMethod())); } } break; @@ -157,58 +156,4 @@ public abstract class BaseDescriptorDeserializer { throw new IllegalStateException("Unrecognized descriptor: " + descriptor); } } - - protected static class SignatureDeserializer { - // These types are ordered according to their sorts, this is significant for deserialization - private static final char[] PRIMITIVE_TYPES = new char[] { 'V', 'Z', 'C', 'B', 'S', 'I', 'F', 'J', 'D' }; - - private final NameResolver nameResolver; - - public SignatureDeserializer(@NotNull NameResolver nameResolver) { - this.nameResolver = nameResolver; - } - - @NotNull - public MemberSignature methodSignature(@NotNull JavaProtoBuf.JavaMethodSignature signature) { - Name name = nameResolver.getName(signature.getName()); - - StringBuilder sb = new StringBuilder(); - sb.append('('); - for (int i = 0, length = signature.getParameterTypeCount(); i < length; i++) { - typeDescriptor(signature.getParameterType(i), sb); - } - sb.append(')'); - typeDescriptor(signature.getReturnType(), sb); - - return MemberSignature.fromMethodNameAndDesc(name, sb.toString()); - } - - @NotNull - public String typeDescriptor(@NotNull JavaProtoBuf.JavaType type) { - return typeDescriptor(type, new StringBuilder()).toString(); - } - - @NotNull - private StringBuilder typeDescriptor(@NotNull JavaProtoBuf.JavaType type, @NotNull StringBuilder sb) { - for (int i = 0; i < type.getArrayDimension(); i++) { - sb.append('['); - } - - if (type.hasPrimitiveType()) { - sb.append(PRIMITIVE_TYPES[type.getPrimitiveType().ordinal()]); - } - else { - sb.append("L"); - sb.append(fqNameToInternalName(nameResolver.getFqName(type.getClassFqName()))); - sb.append(";"); - } - - return sb; - } - - @NotNull - private static String fqNameToInternalName(@NotNull FqName fqName) { - return fqName.asString().replace('.', '/'); - } - } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DescriptorDeserializersStorage.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DescriptorDeserializersStorage.java index e1ecbecbfa9..605cdd98472 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DescriptorDeserializersStorage.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DescriptorDeserializersStorage.java @@ -19,9 +19,10 @@ package org.jetbrains.jet.lang.resolve.kotlin; import kotlin.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.asm4.commons.Method; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.jet.lang.resolve.constants.*; -import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; +import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; +import org.jetbrains.jet.lang.resolve.constants.ConstantsPackage; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter; import org.jetbrains.jet.lang.resolve.name.Name; @@ -152,6 +153,11 @@ public class DescriptorDeserializersStorage { return new MemberSignature(name.asString() + desc); } + @NotNull + public static MemberSignature fromAsmMethod(@NotNull Method method) { + return new MemberSignature(method.toString()); + } + @NotNull public static MemberSignature fromFieldNameAndDesc(@NotNull Name name, @NotNull String desc) { return new MemberSignature(name.asString() + "#" + desc); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/SignatureDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/SignatureDeserializer.java new file mode 100644 index 00000000000..0c06be8674d --- /dev/null +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/SignatureDeserializer.java @@ -0,0 +1,78 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.kotlin; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.asm4.commons.Method; +import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf; +import org.jetbrains.jet.descriptors.serialization.NameResolver; +import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.Name; + +public class SignatureDeserializer { + // These types are ordered according to their sorts, this is significant for deserialization + private static final char[] PRIMITIVE_TYPES = new char[] { 'V', 'Z', 'C', 'B', 'S', 'I', 'F', 'J', 'D' }; + + private final NameResolver nameResolver; + + public SignatureDeserializer(@NotNull NameResolver nameResolver) { + this.nameResolver = nameResolver; + } + + @NotNull + public Method methodSignature(@NotNull JavaProtoBuf.JavaMethodSignature signature) { + Name name = nameResolver.getName(signature.getName()); + + StringBuilder sb = new StringBuilder(); + sb.append('('); + for (int i = 0, length = signature.getParameterTypeCount(); i < length; i++) { + typeDescriptor(signature.getParameterType(i), sb); + } + sb.append(')'); + typeDescriptor(signature.getReturnType(), sb); + + return new Method(name.asString(), sb.toString()); + } + + @NotNull + public String typeDescriptor(@NotNull JavaProtoBuf.JavaType type) { + return typeDescriptor(type, new StringBuilder()).toString(); + } + + @NotNull + private StringBuilder typeDescriptor(@NotNull JavaProtoBuf.JavaType type, @NotNull StringBuilder sb) { + for (int i = 0; i < type.getArrayDimension(); i++) { + sb.append('['); + } + + if (type.hasPrimitiveType()) { + sb.append(PRIMITIVE_TYPES[type.getPrimitiveType().ordinal()]); + } + else { + sb.append("L"); + sb.append(fqNameToInternalName(nameResolver.getFqName(type.getClassFqName()))); + sb.append(";"); + } + + return sb; + } + + @NotNull + private static String fqNameToInternalName(@NotNull FqName fqName) { + return fqName.asString().replace('.', '/'); + } +}