diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index 42556728d58..55a52f72e9b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -835,13 +835,6 @@ public class AsmUtil { return asmTypeByFqNameWithoutInnerClasses(fqName).getDescriptor(); } - @NotNull - public static String shortNameByAsmType(@NotNull Type type) { - String internalName = type.getInternalName(); - int lastSlash = internalName.lastIndexOf('/'); - return lastSlash < 0 ? internalName : internalName.substring(lastSlash + 1); - } - @NotNull public static Type asmTypeByFqNameWithoutInnerClasses(@NotNull FqName fqName) { return Type.getObjectType(internalNameByFqNameWithoutInnerClasses(fqName)); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 9bc0e480cbf..b8ac1b0c4c8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -77,11 +77,13 @@ import java.util.Set; import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isNullableAny; import static org.jetbrains.kotlin.codegen.AsmUtil.*; -import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.*; +import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.INDEX_FOR_VALUE_PARAMETER; +import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.METHOD_FOR_FUNCTION; import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION; import static org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget.*; import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.getSourceFromDescriptor; -import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; +import static org.jetbrains.kotlin.resolve.DescriptorUtils.getSuperClassDescriptor; +import static org.jetbrains.kotlin.resolve.DescriptorUtils.isInterface; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE; import static org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils.*; import static org.jetbrains.org.objectweb.asm.Opcodes.*; @@ -172,10 +174,6 @@ public class FunctionCodegen { jvmSignature.getGenericsSignature(), getThrownExceptions(functionDescriptor, typeMapper)); - String implClassName = CodegenContextUtil.getImplementationClassShortName(owner); - if (implClassName != null) { - v.getSerializationBindings().put(METHOD_IMPL_CLASS_NAME, functionDescriptor, implClassName); - } if (CodegenContextUtil.isImplClassOwner(owner)) { v.getSerializationBindings().put(METHOD_FOR_FUNCTION, functionDescriptor, asmMethod); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java index 352ed50b6b5..1841ba54d33 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java @@ -57,7 +57,8 @@ import java.util.List; import static org.jetbrains.kotlin.codegen.AsmUtil.*; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface; -import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.*; +import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.FIELD_FOR_PROPERTY; +import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.SYNTHETIC_METHOD_FOR_PROPERTY; import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.K_PROPERTY_TYPE; import static org.jetbrains.kotlin.resolve.jvm.annotations.AnnotationUtilKt.hasJvmFieldAnnotation; @@ -111,11 +112,6 @@ public class PropertyCodegen { assert kind == OwnerKind.PACKAGE || kind == OwnerKind.IMPLEMENTATION || kind == OwnerKind.DEFAULT_IMPLS : "Generating property with a wrong kind (" + kind + "): " + descriptor; - String implClassName = CodegenContextUtil.getImplementationClassShortName(context); - if (implClassName != null) { - v.getSerializationBindings().put(PROPERTY_IMPL_CLASS_NAME, descriptor, implClassName); - } - if (CodegenContextUtil.isImplClassOwner(context)) { assert declaration != null : "Declaration is null for different context: " + context; @@ -266,10 +262,6 @@ public class PropertyCodegen { mv.visitInsn(Opcodes.RETURN); mv.visitEnd(); } - else { - Type tImplType = typeMapper.mapDefaultImpls((ClassDescriptor) context.getContextDescriptor()); - v.getSerializationBindings().put(PROPERTY_IMPL_CLASS_NAME, descriptor, shortNameByAsmType(tImplType)); - } if (kind != OwnerKind.DEFAULT_IMPLS) { v.getSerializationBindings().put(SYNTHETIC_METHOD_FOR_PROPERTY, descriptor, new Method(name, desc)); @@ -330,7 +322,6 @@ public class PropertyCodegen { ImplementationBodyCodegen codegen = (ImplementationBodyCodegen) memberCodegen.getParentCodegen(); builder = codegen.v; backingFieldContext = codegen.context; - v.getSerializationBindings().put(STATIC_FIELD_IN_OUTER_CLASS, propertyDescriptor); } if (isObject(propertyDescriptor.getContainingDeclaration()) && diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContextUtil.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContextUtil.kt index b09101aec51..072ca16fc3c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContextUtil.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContextUtil.kt @@ -16,10 +16,8 @@ package org.jetbrains.kotlin.codegen.context -import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.org.objectweb.asm.Type - public object CodegenContextUtil { @JvmStatic public fun getImplementationOwnerClassType(owner: CodegenContext<*>): Type? = @@ -29,11 +27,7 @@ public object CodegenContextUtil { else -> null } - @JvmStatic - public fun getImplementationClassShortName(owner: CodegenContext<*>): String? = - getImplementationOwnerClassType(owner)?.let { AsmUtil.shortNameByAsmType(it) } - @JvmStatic public fun isImplClassOwner(owner: CodegenContext<*>): Boolean = owner !is DelegatingFacadeContext -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializationBindings.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializationBindings.java index a0bf9c0a2ec..5d82ae28a0d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializationBindings.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializationBindings.java @@ -36,12 +36,6 @@ public final class JvmSerializationBindings { SerializationMappingSlice.create(); public static final SerializationMappingSlice SYNTHETIC_METHOD_FOR_PROPERTY = SerializationMappingSlice.create(); - public static final SerializationMappingSlice METHOD_IMPL_CLASS_NAME = - SerializationMappingSlice.create(); - public static final SerializationMappingSlice PROPERTY_IMPL_CLASS_NAME = - SerializationMappingSlice.create(); - public static final SerializationMappingSetSlice STATIC_FIELD_IN_OUTER_CLASS = - SerializationMappingSetSlice.create(); public static final SerializationMappingSlice INDEX_FOR_VALUE_PARAMETER = SerializationMappingSlice.create(); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java index dfb636fad2d..810556ecc18 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java @@ -109,11 +109,6 @@ public class JvmSerializerExtension extends SerializerExtension { proto.setExtension(JvmProtoBuf.methodSignature, signature); } } - - String name = bindings.get(METHOD_IMPL_CLASS_NAME, descriptor); - if (name != null) { - proto.setExtension(JvmProtoBuf.methodImplClassName, stringTable.getStringIndex(name)); - } } @Override @@ -126,35 +121,18 @@ public class JvmSerializerExtension extends SerializerExtension { Method setterMethod = setter == null ? null : bindings.get(METHOD_FOR_FUNCTION, setter); Pair field = bindings.get(FIELD_FOR_PROPERTY, descriptor); - String fieldName; - String fieldDesc; - boolean isStaticInOuter; - if (field != null) { - fieldName = field.second; - fieldDesc = field.first.getDescriptor(); - isStaticInOuter = bindings.get(STATIC_FIELD_IN_OUTER_CLASS, descriptor); - } - else { - fieldName = null; - fieldDesc = null; - isStaticInOuter = false; - } - Method syntheticMethod = bindings.get(SYNTHETIC_METHOD_FOR_PROPERTY, descriptor); JvmProtoBuf.JvmPropertySignature signature = signatureSerializer.propertySignature( - descriptor, fieldName, fieldDesc, isStaticInOuter, + descriptor, + field != null ? field.second : null, + field != null ? field.first.getDescriptor() : null, syntheticMethod != null ? signatureSerializer.methodSignature(null, syntheticMethod) : null, getterMethod != null ? signatureSerializer.methodSignature(null, getterMethod) : null, setterMethod != null ? signatureSerializer.methodSignature(null, setterMethod) : null ); proto.setExtension(JvmProtoBuf.propertySignature, signature); - - String name = bindings.get(PROPERTY_IMPL_CLASS_NAME, descriptor); - if (name != null) { - proto.setExtension(JvmProtoBuf.propertyImplClassName, stringTable.getStringIndex(name)); - } } private class SignatureSerializer { @@ -230,7 +208,6 @@ public class JvmSerializerExtension extends SerializerExtension { @NotNull PropertyDescriptor descriptor, @Nullable String fieldName, @Nullable String fieldDesc, - boolean isStaticInOuter, @Nullable JvmProtoBuf.JvmMethodSignature syntheticMethod, @Nullable JvmProtoBuf.JvmMethodSignature getter, @Nullable JvmProtoBuf.JvmMethodSignature setter @@ -239,7 +216,7 @@ public class JvmSerializerExtension extends SerializerExtension { if (fieldDesc != null) { assert fieldName != null : "Field name shouldn't be null when there's a field type: " + fieldDesc; - signature.setField(fieldSignature(descriptor, fieldName, fieldDesc, isStaticInOuter)); + signature.setField(fieldSignature(descriptor, fieldName, fieldDesc)); } if (syntheticMethod != null) { @@ -260,8 +237,7 @@ public class JvmSerializerExtension extends SerializerExtension { public JvmProtoBuf.JvmFieldSignature fieldSignature( @NotNull PropertyDescriptor descriptor, @NotNull String name, - @NotNull String desc, - boolean isStaticInOuter + @NotNull String desc ) { JvmProtoBuf.JvmFieldSignature.Builder builder = JvmProtoBuf.JvmFieldSignature.newBuilder(); if (!descriptor.getName().asString().equals(name)) { @@ -270,9 +246,6 @@ public class JvmSerializerExtension extends SerializerExtension { if (requiresSignature(descriptor, desc)) { builder.setDesc(stringTable.getStringIndex(desc)); } - if (isStaticInOuter) { - builder.setIsStaticInOuter(true); - } return builder.build(); } } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java b/compiler/tests/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java index e03c41939fa..ebd8e91581a 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java @@ -9,9 +9,7 @@ public final class DebugJvmProtoBuf { com.google.protobuf.ExtensionRegistry registry) { registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.constructorSignature); registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.methodSignature); - registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.methodImplClassName); registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.propertySignature); - registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.propertyImplClassName); registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.typeAnnotation); registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.isRaw); registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.typeParameterAnnotation); @@ -2905,26 +2903,6 @@ public final class DebugJvmProtoBuf { * */ int getDesc(); - - // optional bool is_static_in_outer = 3 [default = false]; - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - boolean hasIsStaticInOuter(); - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - boolean getIsStaticInOuter(); } /** * Protobuf type {@code org.jetbrains.kotlin.serialization.jvm.JvmFieldSignature} @@ -2987,11 +2965,6 @@ public final class DebugJvmProtoBuf { desc_ = input.readInt32(); break; } - case 24: { - bitField0_ |= 0x00000004; - isStaticInOuter_ = input.readBool(); - break; - } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -3072,36 +3045,9 @@ public final class DebugJvmProtoBuf { return desc_; } - // optional bool is_static_in_outer = 3 [default = false]; - public static final int IS_STATIC_IN_OUTER_FIELD_NUMBER = 3; - private boolean isStaticInOuter_; - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - public boolean hasIsStaticInOuter() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - public boolean getIsStaticInOuter() { - return isStaticInOuter_; - } - private void initFields() { name_ = 0; desc_ = 0; - isStaticInOuter_ = false; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -3121,9 +3067,6 @@ public final class DebugJvmProtoBuf { if (((bitField0_ & 0x00000002) == 0x00000002)) { output.writeInt32(2, desc_); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBool(3, isStaticInOuter_); - } getUnknownFields().writeTo(output); } @@ -3141,10 +3084,6 @@ public final class DebugJvmProtoBuf { size += com.google.protobuf.CodedOutputStream .computeInt32Size(2, desc_); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(3, isStaticInOuter_); - } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -3265,8 +3204,6 @@ public final class DebugJvmProtoBuf { bitField0_ = (bitField0_ & ~0x00000001); desc_ = 0; bitField0_ = (bitField0_ & ~0x00000002); - isStaticInOuter_ = false; - bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -3303,10 +3240,6 @@ public final class DebugJvmProtoBuf { to_bitField0_ |= 0x00000002; } result.desc_ = desc_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.isStaticInOuter_ = isStaticInOuter_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -3329,9 +3262,6 @@ public final class DebugJvmProtoBuf { if (other.hasDesc()) { setDesc(other.getDesc()); } - if (other.hasIsStaticInOuter()) { - setIsStaticInOuter(other.getIsStaticInOuter()); - } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -3441,59 +3371,6 @@ public final class DebugJvmProtoBuf { return this; } - // optional bool is_static_in_outer = 3 [default = false]; - private boolean isStaticInOuter_ ; - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public boolean hasIsStaticInOuter() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public boolean getIsStaticInOuter() { - return isStaticInOuter_; - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public Builder setIsStaticInOuter(boolean value) { - bitField0_ |= 0x00000004; - isStaticInOuter_ = value; - onChanged(); - return this; - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public Builder clearIsStaticInOuter() { - bitField0_ = (bitField0_ & ~0x00000004); - isStaticInOuter_ = false; - onChanged(); - return this; - } - // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.jvm.JvmFieldSignature) } @@ -4670,17 +4547,6 @@ public final class DebugJvmProtoBuf { .newFileScopedGeneratedExtension( org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.JvmMethodSignature.class, org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.JvmMethodSignature.getDefaultInstance()); - public static final int METHOD_IMPL_CLASS_NAME_FIELD_NUMBER = 101; - /** - * extend .org.jetbrains.kotlin.serialization.Function { ... } - */ - public static final - com.google.protobuf.GeneratedMessage.GeneratedExtension< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Function, - java.lang.Integer> methodImplClassName = com.google.protobuf.GeneratedMessage - .newFileScopedGeneratedExtension( - java.lang.Integer.class, - null); public static final int PROPERTY_SIGNATURE_FIELD_NUMBER = 100; /** * extend .org.jetbrains.kotlin.serialization.Property { ... } @@ -4692,17 +4558,6 @@ public final class DebugJvmProtoBuf { .newFileScopedGeneratedExtension( org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.JvmPropertySignature.class, org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.JvmPropertySignature.getDefaultInstance()); - public static final int PROPERTY_IMPL_CLASS_NAME_FIELD_NUMBER = 101; - /** - * extend .org.jetbrains.kotlin.serialization.Property { ... } - */ - public static final - com.google.protobuf.GeneratedMessage.GeneratedExtension< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Property, - java.lang.Integer> propertyImplClassName = com.google.protobuf.GeneratedMessage - .newFileScopedGeneratedExtension( - java.lang.Integer.class, - null); public static final int TYPE_ANNOTATION_FIELD_NUMBER = 100; /** * extend .org.jetbrains.kotlin.serialization.Type { ... } @@ -4809,45 +4664,40 @@ public final class DebugJvmProtoBuf { "ration\022\010\n\004NONE\020\000\022\030\n\024INTERNAL_TO_CLASS_ID" + "\020\001\022\024\n\020DESC_TO_CLASS_ID\020\002\"<\n\022JvmMethodSig" + "nature\022\022\n\004name\030\001 \001(\005B\004\230\265\030\001\022\022\n\004desc\030\002 \001(\005" + - "B\004\230\265\030\001\"^\n\021JvmFieldSignature\022\022\n\004name\030\001 \001(" + - "\005B\004\230\265\030\001\022\022\n\004desc\030\002 \001(\005B\004\230\265\030\001\022!\n\022is_static" + - "_in_outer\030\003 \001(\010:\005false\"\316\002\n\024JvmPropertySi", - "gnature\022H\n\005field\030\001 \001(\01329.org.jetbrains.k" + - "otlin.serialization.jvm.JvmFieldSignatur" + - "e\022T\n\020synthetic_method\030\002 \001(\0132:.org.jetbra" + - "ins.kotlin.serialization.jvm.JvmMethodSi" + - "gnature\022J\n\006getter\030\003 \001(\0132:.org.jetbrains." + - "kotlin.serialization.jvm.JvmMethodSignat" + - "ure\022J\n\006setter\030\004 \001(\0132:.org.jetbrains.kotl" + - "in.serialization.jvm.JvmMethodSignature:" + - "\212\001\n\025constructor_signature\022/.org.jetbrain" + - "s.kotlin.serialization.Constructor\030d \001(\013", - "2:.org.jetbrains.kotlin.serialization.jv" + - "m.JvmMethodSignature:\202\001\n\020method_signatur" + - "e\022,.org.jetbrains.kotlin.serialization.F" + - "unction\030d \001(\0132:.org.jetbrains.kotlin.ser" + - "ialization.jvm.JvmMethodSignature:R\n\026met" + - "hod_impl_class_name\022,.org.jetbrains.kotl" + - "in.serialization.Function\030e \001(\005B\004\230\265\030\001:\206\001" + - "\n\022property_signature\022,.org.jetbrains.kot" + - "lin.serialization.Property\030d \001(\0132<.org.j" + - "etbrains.kotlin.serialization.jvm.JvmPro", - "pertySignature:T\n\030property_impl_class_na" + - "me\022,.org.jetbrains.kotlin.serialization." + - "Property\030e \001(\005B\004\230\265\030\001:q\n\017type_annotation\022" + - "(.org.jetbrains.kotlin.serialization.Typ" + - "e\030d \003(\0132..org.jetbrains.kotlin.serializa" + - "tion.Annotation:8\n\006is_raw\022(.org.jetbrain" + - "s.kotlin.serialization.Type\030e \001(\010:\204\001\n\031ty" + - "pe_parameter_annotation\0221.org.jetbrains." + - "kotlin.serialization.TypeParameter\030d \003(\013" + - "2..org.jetbrains.kotlin.serialization.An", - "notation:A\n\005index\0222.org.jetbrains.kotlin" + - ".serialization.ValueParameter\030d \001(\005:s\n\020c" + - "lass_annotation\022).org.jetbrains.kotlin.s" + - "erialization.Class\030d \003(\0132..org.jetbrains" + - ".kotlin.serialization.AnnotationB\022B\020Debu" + - "gJvmProtoBuf" + "B\004\230\265\030\001\";\n\021JvmFieldSignature\022\022\n\004name\030\001 \001(" + + "\005B\004\230\265\030\001\022\022\n\004desc\030\002 \001(\005B\004\230\265\030\001\"\316\002\n\024JvmPrope" + + "rtySignature\022H\n\005field\030\001 \001(\01329.org.jetbra", + "ins.kotlin.serialization.jvm.JvmFieldSig" + + "nature\022T\n\020synthetic_method\030\002 \001(\0132:.org.j" + + "etbrains.kotlin.serialization.jvm.JvmMet" + + "hodSignature\022J\n\006getter\030\003 \001(\0132:.org.jetbr" + + "ains.kotlin.serialization.jvm.JvmMethodS" + + "ignature\022J\n\006setter\030\004 \001(\0132:.org.jetbrains" + + ".kotlin.serialization.jvm.JvmMethodSigna" + + "ture:\212\001\n\025constructor_signature\022/.org.jet" + + "brains.kotlin.serialization.Constructor\030" + + "d \001(\0132:.org.jetbrains.kotlin.serializati", + "on.jvm.JvmMethodSignature:\202\001\n\020method_sig" + + "nature\022,.org.jetbrains.kotlin.serializat" + + "ion.Function\030d \001(\0132:.org.jetbrains.kotli" + + "n.serialization.jvm.JvmMethodSignature:\206" + + "\001\n\022property_signature\022,.org.jetbrains.ko" + + "tlin.serialization.Property\030d \001(\0132<.org." + + "jetbrains.kotlin.serialization.jvm.JvmPr" + + "opertySignature:q\n\017type_annotation\022(.org" + + ".jetbrains.kotlin.serialization.Type\030d \003" + + "(\0132..org.jetbrains.kotlin.serialization.", + "Annotation:8\n\006is_raw\022(.org.jetbrains.kot" + + "lin.serialization.Type\030e \001(\010:\204\001\n\031type_pa" + + "rameter_annotation\0221.org.jetbrains.kotli" + + "n.serialization.TypeParameter\030d \003(\0132..or" + + "g.jetbrains.kotlin.serialization.Annotat" + + "ion:A\n\005index\0222.org.jetbrains.kotlin.seri" + + "alization.ValueParameter\030d \001(\005:s\n\020class_" + + "annotation\022).org.jetbrains.kotlin.serial" + + "ization.Class\030d \003(\0132..org.jetbrains.kotl" + + "in.serialization.AnnotationB\022B\020DebugJvmP", + "rotoBuf" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -4877,7 +4727,7 @@ public final class DebugJvmProtoBuf { internal_static_org_jetbrains_kotlin_serialization_jvm_JvmFieldSignature_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_jvm_JvmFieldSignature_descriptor, - new java.lang.String[] { "Name", "Desc", "IsStaticInOuter", }); + new java.lang.String[] { "Name", "Desc", }); internal_static_org_jetbrains_kotlin_serialization_jvm_JvmPropertySignature_descriptor = getDescriptor().getMessageTypes().get(3); internal_static_org_jetbrains_kotlin_serialization_jvm_JvmPropertySignature_fieldAccessorTable = new @@ -4886,22 +4736,18 @@ public final class DebugJvmProtoBuf { new java.lang.String[] { "Field", "SyntheticMethod", "Getter", "Setter", }); constructorSignature.internalInit(descriptor.getExtensions().get(0)); methodSignature.internalInit(descriptor.getExtensions().get(1)); - methodImplClassName.internalInit(descriptor.getExtensions().get(2)); - propertySignature.internalInit(descriptor.getExtensions().get(3)); - propertyImplClassName.internalInit(descriptor.getExtensions().get(4)); - typeAnnotation.internalInit(descriptor.getExtensions().get(5)); - isRaw.internalInit(descriptor.getExtensions().get(6)); - typeParameterAnnotation.internalInit(descriptor.getExtensions().get(7)); - index.internalInit(descriptor.getExtensions().get(8)); - classAnnotation.internalInit(descriptor.getExtensions().get(9)); + propertySignature.internalInit(descriptor.getExtensions().get(2)); + typeAnnotation.internalInit(descriptor.getExtensions().get(3)); + isRaw.internalInit(descriptor.getExtensions().get(4)); + typeParameterAnnotation.internalInit(descriptor.getExtensions().get(5)); + index.internalInit(descriptor.getExtensions().get(6)); + classAnnotation.internalInit(descriptor.getExtensions().get(7)); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable); registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable); registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable); registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable); - registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable); - registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable); return registry; } }; diff --git a/core/descriptor.loader.java/src/jvm_descriptors.proto b/core/descriptor.loader.java/src/jvm_descriptors.proto index e19ac8f4ffa..287fa66d7e8 100644 --- a/core/descriptor.loader.java/src/jvm_descriptors.proto +++ b/core/descriptor.loader.java/src/jvm_descriptors.proto @@ -76,10 +76,6 @@ message JvmFieldSignature { // JVM descriptor of the field type, e.g. 'Ljava/lang/String;' optional int32 desc = 2 [(string_id_in_table) = true]; - - // True iff this field is a backing field for a companion object and is really present as a static - // field in the outer class, not as an instance field here - optional bool is_static_in_outer = 3 [default = false]; } message JvmPropertySignature { @@ -98,20 +94,10 @@ extend Constructor { extend Function { optional JvmMethodSignature method_signature = 100; - - // Package-less name of the class with the callable's body and annotations, if it differs from the class it's serialized into. - // E.g. for a class "A/B/C$D" this would be "C$D". - // This is needed to find the class to load annotations from in the following cases: - // 1) annotations on top-level members are written to compiled package part classes - // 2) annotations on properties in traits are written to TImpl classes - optional int32 method_impl_class_name = 101 [(string_id_in_table) = true]; } extend Property { optional JvmPropertySignature property_signature = 100; - - // see Function#method_impl_class_name - optional int32 property_impl_class_name = 101 [(string_id_in_table) = true]; } extend Type { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBuf.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBuf.java index 19ff54b545b..c9ff4a211fa 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBuf.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBuf.java @@ -9,9 +9,7 @@ public final class JvmProtoBuf { com.google.protobuf.ExtensionRegistryLite registry) { registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.constructorSignature); registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.methodSignature); - registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.methodImplClassName); registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.propertySignature); - registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.propertyImplClassName); registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.typeAnnotation); registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.isRaw); registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.typeParameterAnnotation); @@ -2538,26 +2536,6 @@ public final class JvmProtoBuf { * */ int getDesc(); - - // optional bool is_static_in_outer = 3 [default = false]; - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - boolean hasIsStaticInOuter(); - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - boolean getIsStaticInOuter(); } /** * Protobuf type {@code org.jetbrains.kotlin.serialization.jvm.JvmFieldSignature} @@ -2612,11 +2590,6 @@ public final class JvmProtoBuf { desc_ = input.readInt32(); break; } - case 24: { - bitField0_ |= 0x00000004; - isStaticInOuter_ = input.readBool(); - break; - } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -2684,36 +2657,9 @@ public final class JvmProtoBuf { return desc_; } - // optional bool is_static_in_outer = 3 [default = false]; - public static final int IS_STATIC_IN_OUTER_FIELD_NUMBER = 3; - private boolean isStaticInOuter_; - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - public boolean hasIsStaticInOuter() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-     * True iff this field is a backing field for a companion object and is really present as a static
-     * field in the outer class, not as an instance field here
-     * 
- */ - public boolean getIsStaticInOuter() { - return isStaticInOuter_; - } - private void initFields() { name_ = 0; desc_ = 0; - isStaticInOuter_ = false; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -2733,9 +2679,6 @@ public final class JvmProtoBuf { if (((bitField0_ & 0x00000002) == 0x00000002)) { output.writeInt32(2, desc_); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBool(3, isStaticInOuter_); - } } private int memoizedSerializedSize = -1; @@ -2752,10 +2695,6 @@ public final class JvmProtoBuf { size += com.google.protobuf.CodedOutputStream .computeInt32Size(2, desc_); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(3, isStaticInOuter_); - } memoizedSerializedSize = size; return size; } @@ -2851,8 +2790,6 @@ public final class JvmProtoBuf { bitField0_ = (bitField0_ & ~0x00000001); desc_ = 0; bitField0_ = (bitField0_ & ~0x00000002); - isStaticInOuter_ = false; - bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -2884,10 +2821,6 @@ public final class JvmProtoBuf { to_bitField0_ |= 0x00000002; } result.desc_ = desc_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.isStaticInOuter_ = isStaticInOuter_; result.bitField0_ = to_bitField0_; return result; } @@ -2900,9 +2833,6 @@ public final class JvmProtoBuf { if (other.hasDesc()) { setDesc(other.getDesc()); } - if (other.hasIsStaticInOuter()) { - setIsStaticInOuter(other.getIsStaticInOuter()); - } return this; } @@ -3011,59 +2941,6 @@ public final class JvmProtoBuf { return this; } - // optional bool is_static_in_outer = 3 [default = false]; - private boolean isStaticInOuter_ ; - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public boolean hasIsStaticInOuter() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public boolean getIsStaticInOuter() { - return isStaticInOuter_; - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public Builder setIsStaticInOuter(boolean value) { - bitField0_ |= 0x00000004; - isStaticInOuter_ = value; - - return this; - } - /** - * optional bool is_static_in_outer = 3 [default = false]; - * - *
-       * True iff this field is a backing field for a companion object and is really present as a static
-       * field in the outer class, not as an instance field here
-       * 
- */ - public Builder clearIsStaticInOuter() { - bitField0_ = (bitField0_ & ~0x00000004); - isStaticInOuter_ = false; - - return this; - } - // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.jvm.JvmFieldSignature) } @@ -3865,21 +3742,6 @@ public final class JvmProtoBuf { null, 100, com.google.protobuf.WireFormat.FieldType.MESSAGE); - public static final int METHOD_IMPL_CLASS_NAME_FIELD_NUMBER = 101; - /** - * extend .org.jetbrains.kotlin.serialization.Function { ... } - */ - public static final - com.google.protobuf.GeneratedMessageLite.GeneratedExtension< - org.jetbrains.kotlin.serialization.ProtoBuf.Function, - java.lang.Integer> methodImplClassName = com.google.protobuf.GeneratedMessageLite - .newSingularGeneratedExtension( - org.jetbrains.kotlin.serialization.ProtoBuf.Function.getDefaultInstance(), - 0, - null, - null, - 101, - com.google.protobuf.WireFormat.FieldType.INT32); public static final int PROPERTY_SIGNATURE_FIELD_NUMBER = 100; /** * extend .org.jetbrains.kotlin.serialization.Property { ... } @@ -3895,21 +3757,6 @@ public final class JvmProtoBuf { null, 100, com.google.protobuf.WireFormat.FieldType.MESSAGE); - public static final int PROPERTY_IMPL_CLASS_NAME_FIELD_NUMBER = 101; - /** - * extend .org.jetbrains.kotlin.serialization.Property { ... } - */ - public static final - com.google.protobuf.GeneratedMessageLite.GeneratedExtension< - org.jetbrains.kotlin.serialization.ProtoBuf.Property, - java.lang.Integer> propertyImplClassName = com.google.protobuf.GeneratedMessageLite - .newSingularGeneratedExtension( - org.jetbrains.kotlin.serialization.ProtoBuf.Property.getDefaultInstance(), - 0, - null, - null, - 101, - com.google.protobuf.WireFormat.FieldType.INT32); public static final int TYPE_ANNOTATION_FIELD_NUMBER = 100; /** * extend .org.jetbrains.kotlin.serialization.Type { ... } diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt index becf20597ee..ca52a2f86ae 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/DescriptorBasedProperty.kt @@ -16,7 +16,10 @@ package kotlin.reflect.jvm.internal +import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.resolve.DescriptorUtils.isClassOrEnumClass +import org.jetbrains.kotlin.resolve.DescriptorUtils.isCompanionObject import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil import java.lang.reflect.Field import kotlin.reflect.jvm.internal.JvmPropertySignature.JavaField @@ -50,7 +53,10 @@ internal abstract class DescriptorBasedProperty protected constructor( when (jvmSignature) { is KotlinProperty -> { JvmProtoBufUtil.getJvmFieldSignature(jvmSignature.proto, jvmSignature.nameResolver, jvmSignature.typeTable)?.let { - container.findFieldBySignature(jvmSignature.proto, jvmSignature.nameResolver, it.name) + val isCompanionOfClass = (descriptor.containingDeclaration as? ClassDescriptor)?.let { containingClass -> + isCompanionObject(containingClass) && isClassOrEnumClass(containingClass.containingDeclaration) + } ?: false + container.findFieldBySignature(it.name, isCompanionOfClass) } } is JavaField -> jvmSignature.field diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt index 434d1972ae1..249daa0ac31 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KDeclarationContainerImpl.kt @@ -19,16 +19,11 @@ package kotlin.reflect.jvm.internal import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.load.java.structure.reflect.classId import org.jetbrains.kotlin.load.java.structure.reflect.createArrayType import org.jetbrains.kotlin.load.java.structure.reflect.safeClassLoader import org.jetbrains.kotlin.load.kotlin.reflect.RuntimeModuleData -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.scopes.MemberScope -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.NameResolver -import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf import java.lang.reflect.Constructor import java.lang.reflect.Field import java.lang.reflect.Method @@ -242,16 +237,8 @@ internal abstract class KDeclarationContainerImpl : ClassBasedDeclarationContain } // TODO: check resulting field's type - fun findFieldBySignature( - proto: ProtoBuf.Property, - nameResolver: NameResolver, - name: String - ): Field? { - val owner = implClassForCallable(nameResolver, proto) ?: - if (proto.hasExtension(JvmProtoBuf.propertySignature) && - proto.getExtension(JvmProtoBuf.propertySignature).let { it.hasField() && it.field.isStaticInOuter }) { - jClass.enclosingClass ?: throw KotlinReflectionInternalError("Inconsistent metadata for field $name in $jClass") - } else jClass + fun findFieldBySignature(name: String, isCompanionOfClass: Boolean): Field? { + val owner = if (isCompanionOfClass) jClass.enclosingClass else jClass return try { owner.getDeclaredField(name) @@ -261,17 +248,6 @@ internal abstract class KDeclarationContainerImpl : ClassBasedDeclarationContain } } - // Returns the JVM class which contains this callable. This class may be different from the one represented by descriptors - // in case of top level functions (their bodies are in package parts), methods with implementations in interfaces, etc. - private fun implClassForCallable(nameResolver: NameResolver, proto: ProtoBuf.Property): Class<*>? { - if (!proto.hasExtension(JvmProtoBuf.propertyImplClassName)) return null - - val implClassName = nameResolver.getName(proto.getExtension(JvmProtoBuf.propertyImplClassName)) - // TODO: store fq name of impl class name in jvm_descriptors.proto - val classId = ClassId(jClass.classId.packageFqName, implClassName) - return jClass.safeClassLoader.loadClass(classId.asSingleFqName().asString()) - } - companion object { private val DEFAULT_CONSTRUCTOR_MARKER = Class.forName("kotlin.jvm.internal.DefaultConstructorMarker") } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/ProtoCompareGenerated.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/ProtoCompareGenerated.kt index ac285dc6624..81ea446d258 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/ProtoCompareGenerated.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/ProtoCompareGenerated.kt @@ -212,11 +212,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi if (!checkEquals(old.getExtension(JvmProtoBuf.methodSignature), new.getExtension(JvmProtoBuf.methodSignature))) return false } - if (old.hasExtension(JvmProtoBuf.methodImplClassName) != new.hasExtension(JvmProtoBuf.methodImplClassName)) return false - if (old.hasExtension(JvmProtoBuf.methodImplClassName)) { - if (!checkStringEquals(old.getExtension(JvmProtoBuf.methodImplClassName), new.getExtension(JvmProtoBuf.methodImplClassName))) return false - } - return true } @@ -270,11 +265,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi if (!checkEquals(old.getExtension(JvmProtoBuf.propertySignature), new.getExtension(JvmProtoBuf.propertySignature))) return false } - if (old.hasExtension(JvmProtoBuf.propertyImplClassName) != new.hasExtension(JvmProtoBuf.propertyImplClassName)) return false - if (old.hasExtension(JvmProtoBuf.propertyImplClassName)) { - if (!checkStringEquals(old.getExtension(JvmProtoBuf.propertyImplClassName), new.getExtension(JvmProtoBuf.propertyImplClassName))) return false - } - return true } @@ -524,11 +514,6 @@ open class ProtoCompareGenerated(public val oldNameResolver: NameResolver, publi if (!checkStringEquals(old.desc, new.desc)) return false } - if (old.hasIsStaticInOuter() != new.hasIsStaticInOuter()) return false - if (old.hasIsStaticInOuter()) { - if (old.isStaticInOuter != new.isStaticInOuter) return false - } - return true } @@ -924,10 +909,6 @@ public fun ProtoBuf.Function.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes hashCode = 31 * hashCode + getExtension(JvmProtoBuf.methodSignature).hashCode(stringIndexes, fqNameIndexes) } - if (hasExtension(JvmProtoBuf.methodImplClassName)) { - hashCode = 31 * hashCode + stringIndexes(getExtension(JvmProtoBuf.methodImplClassName)) - } - return hashCode } @@ -976,10 +957,6 @@ public fun ProtoBuf.Property.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes hashCode = 31 * hashCode + getExtension(JvmProtoBuf.propertySignature).hashCode(stringIndexes, fqNameIndexes) } - if (hasExtension(JvmProtoBuf.propertyImplClassName)) { - hashCode = 31 * hashCode + stringIndexes(getExtension(JvmProtoBuf.propertyImplClassName)) - } - return hashCode } @@ -1228,10 +1205,6 @@ public fun JvmProtoBuf.JvmFieldSignature.hashCode(stringIndexes: (Int) -> Int, f hashCode = 31 * hashCode + stringIndexes(desc) } - if (hasIsStaticInOuter()) { - hashCode = 31 * hashCode + isStaticInOuter.hashCode() - } - return hashCode }