diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java index b35d29758db..9c0bcbdcdb9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java @@ -32,16 +32,16 @@ public class FieldInfo { throw new UnsupportedOperationException("Can't create singleton field for class: " + classDescriptor); } - ClassDescriptor ownerDescriptor = kind == ClassKind.OBJECT - ? classDescriptor - : DescriptorUtils.getParentOfType(classDescriptor, ClassDescriptor.class); - assert ownerDescriptor != null : "Owner not found for class: " + classDescriptor; - Type ownerType = typeMapper.mapType(ownerDescriptor); - - String fieldName = kind == ClassKind.ENUM_ENTRY - ? classDescriptor.getName().asString() - : classDescriptor.getKind() == ClassKind.CLASS_OBJECT ? JvmAbi.CLASS_OBJECT_FIELD : JvmAbi.INSTANCE_FIELD; - return new FieldInfo(ownerType, typeMapper.mapType(classDescriptor), fieldName, true); + if (kind == ClassKind.OBJECT) { + Type type = typeMapper.mapType(classDescriptor); + return new FieldInfo(type, type, JvmAbi.INSTANCE_FIELD, true); + } + else { + ClassDescriptor ownerDescriptor = DescriptorUtils.getParentOfType(classDescriptor, ClassDescriptor.class); + assert ownerDescriptor != null : "Owner not found for class: " + classDescriptor; + Type ownerType = typeMapper.mapType(ownerDescriptor); + return new FieldInfo(ownerType, typeMapper.mapType(classDescriptor), classDescriptor.getName().asString(), true); + } } @NotNull diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index 34a76003069..6b89164c566 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -958,7 +958,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } private void generateFieldForSingleton() { - if (isEnumEntry(descriptor)) return; + if (isEnumEntry(descriptor) || isClassObject(descriptor)) return; ClassDescriptor classObjectDescriptor = descriptor.getClassObjectDescriptor(); ClassDescriptor fieldTypeDescriptor; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index c25498d7e9c..dd36112b611 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -59,7 +59,6 @@ import static org.jetbrains.kotlin.codegen.AsmUtil.isPrimitive; import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED; import static org.jetbrains.kotlin.descriptors.SourceElement.NO_SOURCE; import static org.jetbrains.kotlin.resolve.BindingContext.VARIABLE; -import static org.jetbrains.kotlin.resolve.DescriptorUtils.isClassObject; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*; import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.OtherOrigin; import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.TraitImpl; @@ -242,9 +241,7 @@ public abstract class MemberCodegen findClassOrObjectDeclarations(@NotNull FqName fqName, @NotNull final GlobalSearchScope searchScope) { - if (JvmAbi.isClassObjectFqName(fqName)) { - Collection parentClasses = findClassOrObjectDeclarations(fqName.parent(), searchScope); - return ContainerUtil.mapNotNull( - parentClasses, - new Function() { - @Override - public JetClassOrObject fun(JetClassOrObject classOrObject) { - if (classOrObject instanceof JetClass) { - JetClassObject classObject = ((JetClass) classOrObject).getClassObject(); - if (classObject != null) { - return classObject.getObjectDeclaration(); - } - } - return null; - } - } - ); - } - Collection classDescriptors = ResolveSessionUtils.getClassDescriptorsByFqName(getModule(), fqName); return ContainerUtil.mapNotNull(classDescriptors, new Function() { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNamedDeclarationUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNamedDeclarationUtil.java index 3626f0f3110..cdc4e726f06 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNamedDeclarationUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNamedDeclarationUtil.java @@ -51,6 +51,9 @@ public final class JetNamedDeclarationUtil { @Nullable public static FqName getParentFqName(@NotNull JetNamedDeclaration namedDeclaration) { PsiElement parent = namedDeclaration.getParent(); + if (parent instanceof JetClassObject) { + parent = parent.getParent(); + } if (parent instanceof JetClassBody) { // One nesting to JetClassBody doesn't affect to qualified name parent = parent.getParent(); @@ -69,15 +72,7 @@ public final class JetNamedDeclarationUtil { } } else if (parent instanceof JetObjectDeclaration) { - if (parent.getParent() instanceof JetClassObject) { - JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(parent, JetClassOrObject.class); - if (classOrObject != null) { - return getFQName(classOrObject); - } - } - else { - return getFQName((JetNamedDeclaration) parent); - } + return getFQName((JetNamedDeclaration) parent); } return null; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetObjectDeclaration.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetObjectDeclaration.java index 9ddde361226..3d1b070316b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetObjectDeclaration.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetObjectDeclaration.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.JetNodeTypes; import org.jetbrains.kotlin.lexer.JetModifierKeywordToken; import org.jetbrains.kotlin.lexer.JetTokens; +import org.jetbrains.kotlin.name.SpecialNames; import org.jetbrains.kotlin.psi.stubs.KotlinObjectStub; import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes; @@ -50,6 +51,10 @@ public class JetObjectDeclaration extends JetNamedDeclarationStub allDescriptors = classDescriptor.getScopeForMemberLookup().getOwnDeclaredDescriptors(); ClassDescriptorWithResolutionScopes classObj = classDescriptor.getClassObjectDescriptor(); - if (classObj != null) { + if (classObj != null && DescriptorUtils.isClassObject(classObj)) { Collection classObjDescriptors = classObj.getScopeForMemberLookup().getOwnDeclaredDescriptors(); if (!classObjDescriptors.isEmpty()) { allDescriptors = Lists.newArrayList(allDescriptors); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/Importer.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/Importer.kt index 6854552747c..36834ac0cb3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/Importer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/Importer.kt @@ -37,8 +37,9 @@ public class Importer { else if (descriptor is ClassDescriptor && descriptor.getKind() != ClassKind.OBJECT) { allUnderImportScopes.add(descriptor.getStaticScope()) allUnderImportScopes.add(descriptor.getUnsubstitutedInnerClassesScope()) + val classObjectDescriptor = descriptor.getClassObjectDescriptor() - if (classObjectDescriptor != null) { + if (classObjectDescriptor != null && DescriptorUtils.isClassObject(classObjectDescriptor)) { allUnderImportScopes.add(classObjectDescriptor.getUnsubstitutedInnerClassesScope()) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java index 0dd5f522dfc..e3dd715ac80 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/QualifiedExpressionResolver.java @@ -277,7 +277,7 @@ public class QualifiedExpressionResolver { results.add(lookupSimpleNameReference(selector, descriptor.getStaticScope(), lookupMode, true)); ClassDescriptor classObject = descriptor.getClassObjectDescriptor(); - if (classObject != null) { + if (classObject != null && !descriptor.getKind().isSingleton()) { addResultsForClass(results, selector, lookupMode, classObject); } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/data/JetClassOrObjectInfo.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/data/JetClassOrObjectInfo.java index 2901bdcc9fa..2001283c1c7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/data/JetClassOrObjectInfo.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/data/JetClassOrObjectInfo.java @@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.name.FqName; @@ -33,6 +34,11 @@ public abstract class JetClassOrObjectInfo implement this.element = element; } + @Nullable + public Name getName() { + return element.getNameAsName(); + } + @Override public JetClassOrObject getCorrespondingClassOrObject() { return element; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/data/SyntheticClassObjectInfo.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/data/SyntheticClassObjectInfo.java deleted file mode 100644 index 5091eb36e1a..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/data/SyntheticClassObjectInfo.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2010-2015 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.kotlin.resolve.lazy.data; - -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.ClassKind; -import org.jetbrains.kotlin.name.FqName; -import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor; - -import java.util.Collections; -import java.util.List; - -public class SyntheticClassObjectInfo implements JetClassLikeInfo { - private final JetClassLikeInfo classInfo; - private final LazyClassDescriptor classDescriptor; - - public SyntheticClassObjectInfo(@NotNull JetClassLikeInfo classInfo, @NotNull LazyClassDescriptor classDescriptor) { - this.classInfo = classInfo; - this.classDescriptor = classDescriptor; - } - - @NotNull - public LazyClassDescriptor getClassDescriptor() { - return classDescriptor; - } - - - @NotNull - @Override - public FqName getContainingPackageFqName() { - return classInfo.getContainingPackageFqName(); - } - - @Nullable - @Override - public JetModifierList getModifierList() { - return null; - } - - @Nullable - @Override - public JetClassObject getClassObject() { - return null; - } - - @NotNull - @Override - public List getClassObjects() { - return Collections.emptyList(); - } - - @NotNull - @Override - public PsiElement getScopeAnchor() { - return classInfo.getScopeAnchor(); - } - - @Nullable - @Override - public JetClassOrObject getCorrespondingClassOrObject() { - return null; - } - - @Nullable - @Override - public JetTypeParameterList getTypeParameterList() { - return null; - } - - @NotNull - @Override - public List getPrimaryConstructorParameters() { - return Collections.emptyList(); - } - - @NotNull - @Override - public ClassKind getClassKind() { - return ClassKind.CLASS_OBJECT; - } - - @NotNull - @Override - public List getDanglingAnnotations() { - return Collections.emptyList(); - } - - @NotNull - @Override - public List getDeclarations() { - // There can be no declarations in a synthetic class object, all its members are fake overrides - return Collections.emptyList(); - } - - @Override - public String toString() { - return "class object of " + classInfo; - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/PsiBasedClassMemberDeclarationProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/PsiBasedClassMemberDeclarationProvider.kt index 1f2b3734bf9..e8caeb83672 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/PsiBasedClassMemberDeclarationProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/declarations/PsiBasedClassMemberDeclarationProvider.kt @@ -29,9 +29,12 @@ public class PsiBasedClassMemberDeclarationProvider( override fun doCreateIndex(index: AbstractPsiBasedDeclarationProvider.Index) { for (declaration in classInfo.getDeclarations()) { - if (declaration !is JetClassObject) { // Do nothing for class object because it will be taken directly from the classInfo + if (declaration !is JetClassObject) { index.putToIndex(declaration) } + else { + index.putToIndex(declaration.getObjectDeclaration()) + } } for (parameter in classInfo.getPrimaryConstructorParameters()) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java index 8fc2ef84c9b..6bb0ad2355c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -29,7 +29,6 @@ import org.jetbrains.annotations.Mutable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.ReadOnly; -import org.jetbrains.kotlin.resolve.lazy.LazyClassContext; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.Annotations; @@ -38,10 +37,11 @@ import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.*; import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil; +import org.jetbrains.kotlin.resolve.lazy.LazyClassContext; import org.jetbrains.kotlin.resolve.lazy.LazyEntity; import org.jetbrains.kotlin.resolve.lazy.data.JetClassInfoUtil; import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo; -import org.jetbrains.kotlin.resolve.lazy.data.SyntheticClassObjectInfo; +import org.jetbrains.kotlin.resolve.lazy.data.JetClassOrObjectInfo; import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProvider; import org.jetbrains.kotlin.resolve.scopes.*; import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull; @@ -55,10 +55,7 @@ import org.jetbrains.kotlin.types.TypeUtils; import java.util.*; -import static org.jetbrains.kotlin.diagnostics.Errors.CLASS_OBJECT_NOT_ALLOWED; -import static org.jetbrains.kotlin.diagnostics.Errors.CYCLIC_INHERITANCE_HIERARCHY; -import static org.jetbrains.kotlin.diagnostics.Errors.TYPE_PARAMETERS_IN_ENUM; -import static org.jetbrains.kotlin.name.SpecialNames.getClassObjectName; +import static org.jetbrains.kotlin.diagnostics.Errors.*; import static org.jetbrains.kotlin.resolve.BindingContext.TYPE; import static org.jetbrains.kotlin.resolve.DescriptorUtils.isSyntheticClassObject; import static org.jetbrains.kotlin.resolve.ModifiersChecker.*; @@ -272,6 +269,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes thisScope.setImplicitReceiver(this.getThisAsReceiverParameter()); thisScope.changeLockLevel(WritableScope.LockLevel.READING); + //TODO: ClassDescriptor classObject = getClassObjectDescriptor(); JetScope classObjectAdapterScope = (classObject != null) ? new ClassObjectMixinScope(classObject) : JetScope.Empty.INSTANCE$; @@ -383,8 +381,24 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes @Nullable private LazyClassDescriptor computeClassObjectDescriptor(@Nullable JetClassObject classObject) { JetClassLikeInfo classObjectInfo = getClassObjectInfo(classObject); - if (classObjectInfo != null) { - return new LazyClassDescriptor(c, this, getClassObjectName(getName()), classObjectInfo); + if (classObjectInfo instanceof JetClassOrObjectInfo) { + Name name = ((JetClassOrObjectInfo) classObjectInfo).getName(); + assert name != null; + ClassifierDescriptor classObjectDescriptor = getScopeForMemberLookup().getClassifier(name); + if (classObjectDescriptor instanceof LazyClassDescriptor) { + return (LazyClassDescriptor) classObjectDescriptor; + } + else { + return null; + } + } + if (getKind() == ClassKind.CLASS_OBJECT || getKind() == ClassKind.OBJECT) { + return this; + } + if (getKind() == ClassKind.ENUM_ENTRY) { + DeclarationDescriptor containingDeclaration = getContainingDeclaration(); + assert containingDeclaration instanceof ClassDescriptor && ((ClassDescriptor) containingDeclaration).getKind() == ClassKind.ENUM_CLASS; + return (LazyClassDescriptor) containingDeclaration; } return null; } @@ -398,9 +412,6 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes return JetClassInfoUtil.createClassLikeInfo(classObject.getObjectDeclaration()); } - else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY) { - return new SyntheticClassObjectInfo(originalClassInfo, this); - } return null; } @@ -462,6 +473,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes private void doForceResolveAllContents() { resolveMemberHeaders(); + //TODO: ClassDescriptor classObjectDescriptor = getClassObjectDescriptor(); if (classObjectDescriptor != null) { ForceResolveUtil.forceResolveAllContents(classObjectDescriptor); @@ -534,15 +546,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes return new Supertypes(Collections.emptyList()); } - JetClassLikeInfo info = declarationProvider.getOwnerInfo(); - if (info instanceof SyntheticClassObjectInfo) { - LazyClassDescriptor descriptor = ((SyntheticClassObjectInfo) info).getClassDescriptor(); - if (descriptor.getKind().isSingleton()) { - return new Supertypes(Collections.singleton(descriptor.getDefaultType())); - } - } - - JetClassOrObject classOrObject = info.getCorrespondingClassOrObject(); + JetClassOrObject classOrObject = declarationProvider.getOwnerInfo().getCorrespondingClassOrObject(); if (classOrObject == null) { return new Supertypes(Collections.singleton(c.getModuleDescriptor().getBuiltIns().getAnyType())); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt index 617bdda9003..2a3fcfda04f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt @@ -82,7 +82,7 @@ class QualifierReceiver ( scopes.add(classifier.getStaticScope()) val classObjectDescriptor = classifier.getClassObjectDescriptor() - if (classObjectDescriptor != null) { + if (classObjectDescriptor != null && DescriptorUtils.isClassObject(classObjectDescriptor)) { // non-static members are resolved through class object receiver scopes.add(DescriptorUtils.getStaticNestedClassesScope(classObjectDescriptor)) } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java b/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java index 41d8b2eb709..4f081aa3ef8 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java @@ -9313,31 +9313,23 @@ public final class DebugProtoBuf { */ int getFqName(); - // optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + // optional int32 class_object_name = 4; /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - boolean hasClassObject(); + boolean hasClassObjectName(); /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject getClassObject(); - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-     * 
- */ - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObjectOrBuilder getClassObjectOrBuilder(); + int getClassObjectName(); // repeated .org.jetbrains.kotlin.serialization.TypeParameter type_parameter = 5; /** @@ -9549,17 +9541,9 @@ public final class DebugProtoBuf { fqName_ = input.readInt32(); break; } - case 34: { - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder subBuilder = null; - if (((bitField0_ & 0x00000008) == 0x00000008)) { - subBuilder = classObject_.toBuilder(); - } - classObject_ = input.readMessage(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(classObject_); - classObject_ = subBuilder.buildPartial(); - } + case 32: { bitField0_ |= 0x00000008; + classObjectName_ = input.readInt32(); break; } case 42: { @@ -9830,600 +9814,6 @@ public final class DebugProtoBuf { // @@protoc_insertion_point(enum_scope:org.jetbrains.kotlin.serialization.Class.Kind) } - public interface ClassObjectOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional .org.jetbrains.kotlin.serialization.Class data = 1; - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - boolean hasData(); - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class getData(); - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - org.jetbrains.kotlin.serialization.DebugProtoBuf.ClassOrBuilder getDataOrBuilder(); - } - /** - * Protobuf type {@code org.jetbrains.kotlin.serialization.Class.ClassObject} - */ - public static final class ClassObject extends - com.google.protobuf.GeneratedMessage - implements ClassObjectOrBuilder { - // Use ClassObject.newBuilder() to construct. - private ClassObject(com.google.protobuf.GeneratedMessage.Builder builder) { - super(builder); - this.unknownFields = builder.getUnknownFields(); - } - private ClassObject(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } - - private static final ClassObject defaultInstance; - public static ClassObject getDefaultInstance() { - return defaultInstance; - } - - public ClassObject getDefaultInstanceForType() { - return defaultInstance; - } - - private final com.google.protobuf.UnknownFieldSet unknownFields; - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ClassObject( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - initFields(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.Builder subBuilder = null; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - subBuilder = data_.toBuilder(); - } - data_ = input.readMessage(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(data_); - data_ = subBuilder.buildPartial(); - } - bitField0_ |= 0x00000001; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e.getMessage()).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.jetbrains.kotlin.serialization.DebugProtoBuf.internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.jetbrains.kotlin.serialization.DebugProtoBuf.internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder.class); - } - - public static com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - public ClassObject parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ClassObject(input, extensionRegistry); - } - }; - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - private int bitField0_; - // optional .org.jetbrains.kotlin.serialization.Class data = 1; - public static final int DATA_FIELD_NUMBER = 1; - private org.jetbrains.kotlin.serialization.DebugProtoBuf.Class data_; - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - public boolean hasData() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class getData() { - return data_; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.ClassOrBuilder getDataOrBuilder() { - return data_; - } - - private void initFields() { - data_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasData()) { - if (!getData().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, data_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, data_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code org.jetbrains.kotlin.serialization.Class.ClassObject} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObjectOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.jetbrains.kotlin.serialization.DebugProtoBuf.internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.jetbrains.kotlin.serialization.DebugProtoBuf.internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder.class); - } - - // Construct using org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getDataFieldBuilder(); - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - if (dataBuilder_ == null) { - data_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.getDefaultInstance(); - } else { - dataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return org.jetbrains.kotlin.serialization.DebugProtoBuf.internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_descriptor; - } - - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject getDefaultInstanceForType() { - return org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.getDefaultInstance(); - } - - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject build() { - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject buildPartial() { - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject result = new org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (dataBuilder_ == null) { - result.data_ = data_; - } else { - result.data_ = dataBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject) { - return mergeFrom((org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject other) { - if (other == org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.getDefaultInstance()) return this; - if (other.hasData()) { - mergeData(other.getData()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public final boolean isInitialized() { - if (hasData()) { - if (!getData().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject) e.getUnfinishedMessage(); - throw e; - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - // optional .org.jetbrains.kotlin.serialization.Class data = 1; - private org.jetbrains.kotlin.serialization.DebugProtoBuf.Class data_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.ClassOrBuilder> dataBuilder_; - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public boolean hasData() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class getData() { - if (dataBuilder_ == null) { - return data_; - } else { - return dataBuilder_.getMessage(); - } - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder setData(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class value) { - if (dataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - data_ = value; - onChanged(); - } else { - dataBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder setData( - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.Builder builderForValue) { - if (dataBuilder_ == null) { - data_ = builderForValue.build(); - onChanged(); - } else { - dataBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder mergeData(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class value) { - if (dataBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - data_ != org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.getDefaultInstance()) { - data_ = - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.newBuilder(data_).mergeFrom(value).buildPartial(); - } else { - data_ = value; - } - onChanged(); - } else { - dataBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder clearData() { - if (dataBuilder_ == null) { - data_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.getDefaultInstance(); - onChanged(); - } else { - dataBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.Builder getDataBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getDataFieldBuilder().getBuilder(); - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.ClassOrBuilder getDataOrBuilder() { - if (dataBuilder_ != null) { - return dataBuilder_.getMessageOrBuilder(); - } else { - return data_; - } - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - private com.google.protobuf.SingleFieldBuilder< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.ClassOrBuilder> - getDataFieldBuilder() { - if (dataBuilder_ == null) { - dataBuilder_ = new com.google.protobuf.SingleFieldBuilder< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.ClassOrBuilder>( - data_, - getParentForChildren(), - isClean()); - data_ = null; - } - return dataBuilder_; - } - - // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.Class.ClassObject) - } - - static { - defaultInstance = new ClassObject(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.Class.ClassObject) - } - public interface PrimaryConstructorOrBuilder extends com.google.protobuf.MessageOrBuilder { @@ -11124,38 +10514,28 @@ public final class DebugProtoBuf { return fqName_; } - // optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - public static final int CLASS_OBJECT_FIELD_NUMBER = 4; - private org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject classObject_; + // optional int32 class_object_name = 4; + public static final int CLASS_OBJECT_NAME_FIELD_NUMBER = 4; + private int classObjectName_; /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - public boolean hasClassObject() { + public boolean hasClassObjectName() { return ((bitField0_ & 0x00000008) == 0x00000008); } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject getClassObject() { - return classObject_; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-     * 
- */ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObjectOrBuilder getClassObjectOrBuilder() { - return classObject_; + public int getClassObjectName() { + return classObjectName_; } // repeated .org.jetbrains.kotlin.serialization.TypeParameter type_parameter = 5; @@ -11365,7 +10745,7 @@ public final class DebugProtoBuf { flags_ = 0; extraVisibility_ = ""; fqName_ = 0; - classObject_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.getDefaultInstance(); + classObjectName_ = 0; typeParameter_ = java.util.Collections.emptyList(); supertype_ = java.util.Collections.emptyList(); nestedClassName_ = java.util.Collections.emptyList(); @@ -11382,12 +10762,6 @@ public final class DebugProtoBuf { memoizedIsInitialized = 0; return false; } - if (hasClassObject()) { - if (!getClassObject().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } for (int i = 0; i < getTypeParameterCount(); i++) { if (!getTypeParameter(i).isInitialized()) { memoizedIsInitialized = 0; @@ -11436,7 +10810,7 @@ public final class DebugProtoBuf { output.writeInt32(3, fqName_); } if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(4, classObject_); + output.writeInt32(4, classObjectName_); } for (int i = 0; i < typeParameter_.size(); i++) { output.writeMessage(5, typeParameter_.get(i)); @@ -11480,7 +10854,7 @@ public final class DebugProtoBuf { } if (((bitField0_ & 0x00000008) == 0x00000008)) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, classObject_); + .computeInt32Size(4, classObjectName_); } for (int i = 0; i < typeParameter_.size(); i++) { size += com.google.protobuf.CodedOutputStream @@ -11625,7 +10999,6 @@ public final class DebugProtoBuf { } private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getClassObjectFieldBuilder(); getTypeParameterFieldBuilder(); getSupertypeFieldBuilder(); getMemberFieldBuilder(); @@ -11644,11 +11017,7 @@ public final class DebugProtoBuf { bitField0_ = (bitField0_ & ~0x00000002); fqName_ = 0; bitField0_ = (bitField0_ & ~0x00000004); - if (classObjectBuilder_ == null) { - classObject_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.getDefaultInstance(); - } else { - classObjectBuilder_.clear(); - } + classObjectName_ = 0; bitField0_ = (bitField0_ & ~0x00000008); if (typeParameterBuilder_ == null) { typeParameter_ = java.util.Collections.emptyList(); @@ -11721,11 +11090,7 @@ public final class DebugProtoBuf { if (((from_bitField0_ & 0x00000008) == 0x00000008)) { to_bitField0_ |= 0x00000008; } - if (classObjectBuilder_ == null) { - result.classObject_ = classObject_; - } else { - result.classObject_ = classObjectBuilder_.build(); - } + result.classObjectName_ = classObjectName_; if (typeParameterBuilder_ == null) { if (((bitField0_ & 0x00000010) == 0x00000010)) { typeParameter_ = java.util.Collections.unmodifiableList(typeParameter_); @@ -11798,8 +11163,8 @@ public final class DebugProtoBuf { if (other.hasFqName()) { setFqName(other.getFqName()); } - if (other.hasClassObject()) { - mergeClassObject(other.getClassObject()); + if (other.hasClassObjectName()) { + setClassObjectName(other.getClassObjectName()); } if (typeParameterBuilder_ == null) { if (!other.typeParameter_.isEmpty()) { @@ -11912,12 +11277,6 @@ public final class DebugProtoBuf { return false; } - if (hasClassObject()) { - if (!getClassObject().isInitialized()) { - - return false; - } - } for (int i = 0; i < getTypeParameterCount(); i++) { if (!getTypeParameter(i).isInitialized()) { @@ -12168,157 +11527,53 @@ public final class DebugProtoBuf { return this; } - // optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - private org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject classObject_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.getDefaultInstance(); - private com.google.protobuf.SingleFieldBuilder< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObjectOrBuilder> classObjectBuilder_; + // optional int32 class_object_name = 4; + private int classObjectName_ ; /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public boolean hasClassObject() { + public boolean hasClassObjectName() { return ((bitField0_ & 0x00000008) == 0x00000008); } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject getClassObject() { - if (classObjectBuilder_ == null) { - return classObject_; - } else { - return classObjectBuilder_.getMessage(); - } + public int getClassObjectName() { + return classObjectName_; } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public Builder setClassObject(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject value) { - if (classObjectBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - classObject_ = value; - onChanged(); - } else { - classObjectBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-       * 
- */ - public Builder setClassObject( - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder builderForValue) { - if (classObjectBuilder_ == null) { - classObject_ = builderForValue.build(); - onChanged(); - } else { - classObjectBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-       * 
- */ - public Builder mergeClassObject(org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject value) { - if (classObjectBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - classObject_ != org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.getDefaultInstance()) { - classObject_ = - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.newBuilder(classObject_).mergeFrom(value).buildPartial(); - } else { - classObject_ = value; - } - onChanged(); - } else { - classObjectBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-       * 
- */ - public Builder clearClassObject() { - if (classObjectBuilder_ == null) { - classObject_ = org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.getDefaultInstance(); - onChanged(); - } else { - classObjectBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-       * 
- */ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder getClassObjectBuilder() { + public Builder setClassObjectName(int value) { bitField0_ |= 0x00000008; + classObjectName_ = value; onChanged(); - return getClassObjectFieldBuilder().getBuilder(); + return this; } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObjectOrBuilder getClassObjectOrBuilder() { - if (classObjectBuilder_ != null) { - return classObjectBuilder_.getMessageOrBuilder(); - } else { - return classObject_; - } - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-       * 
- */ - private com.google.protobuf.SingleFieldBuilder< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObjectOrBuilder> - getClassObjectFieldBuilder() { - if (classObjectBuilder_ == null) { - classObjectBuilder_ = new com.google.protobuf.SingleFieldBuilder< - org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObject.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.Class.ClassObjectOrBuilder>( - classObject_, - getParentForChildren(), - isClean()); - classObject_ = null; - } - return classObjectBuilder_; + public Builder clearClassObjectName() { + bitField0_ = (bitField0_ & ~0x00000008); + classObjectName_ = 0; + onChanged(); + return this; } // repeated .org.jetbrains.kotlin.serialization.TypeParameter type_parameter = 5; @@ -17666,11 +16921,6 @@ public final class DebugProtoBuf { private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_org_jetbrains_kotlin_serialization_Class_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_fieldAccessorTable; private static com.google.protobuf.Descriptors.Descriptor internal_static_org_jetbrains_kotlin_serialization_Class_PrimaryConstructor_descriptor; private static @@ -17751,51 +17001,48 @@ public final class DebugProtoBuf { "in.serialization.TypeParameter.Variance:" + "\003INV\022=\n\013upper_bound\030\005 \003(\0132(.org.jetbrain", "s.kotlin.serialization.Type\"$\n\010Variance\022" + - "\006\n\002IN\020\000\022\007\n\003OUT\020\001\022\007\n\003INV\020\002\"\364\005\n\005Class\022\020\n\005f" + + "\006\n\002IN\020\000\022\007\n\003OUT\020\001\022\007\n\003INV\020\002\"\372\004\n\005Class\022\020\n\005f" + "lags\030\001 \001(\005:\0010\022\030\n\020extra_visibility\030\002 \001(\t\022" + - "\017\n\007fq_name\030\003 \002(\005\022K\n\014class_object\030\004 \001(\01325" + - ".org.jetbrains.kotlin.serialization.Clas" + - "s.ClassObject\022I\n\016type_parameter\030\005 \003(\01321." + - "org.jetbrains.kotlin.serialization.TypeP" + - "arameter\022;\n\tsupertype\030\006 \003(\0132(.org.jetbra" + - "ins.kotlin.serialization.Type\022\031\n\021nested_" + - "class_name\030\007 \003(\005\022<\n\006member\030\013 \003(\0132,.org.j", - "etbrains.kotlin.serialization.Callable\022\022" + - "\n\nenum_entry\030\014 \003(\005\022Y\n\023primary_constructo" + - "r\030\r \001(\0132<.org.jetbrains.kotlin.serializa" + - "tion.Class.PrimaryConstructor\032F\n\013ClassOb" + - "ject\0227\n\004data\030\001 \001(\0132).org.jetbrains.kotli" + - "n.serialization.Class\032P\n\022PrimaryConstruc" + - "tor\022:\n\004data\030\001 \001(\0132,.org.jetbrains.kotlin" + - ".serialization.Callable\"p\n\004Kind\022\t\n\005CLASS" + - "\020\000\022\t\n\005TRAIT\020\001\022\016\n\nENUM_CLASS\020\002\022\016\n\nENUM_EN" + - "TRY\020\003\022\024\n\020ANNOTATION_CLASS\020\004\022\n\n\006OBJECT\020\005\022", - "\020\n\014CLASS_OBJECT\020\006*\005\010d\020\310\001\"N\n\007Package\022<\n\006m" + - "ember\030\001 \003(\0132,.org.jetbrains.kotlin.seria" + - "lization.Callable*\005\010d\020\310\001\"\332\005\n\010Callable\022\r\n" + - "\005flags\030\001 \001(\005\022\030\n\020extra_visibility\030\002 \001(\t\022\024" + - "\n\014getter_flags\030\t \001(\005\022\024\n\014setter_flags\030\n \001" + - "(\005\022I\n\016type_parameter\030\004 \003(\01321.org.jetbrai" + - "ns.kotlin.serialization.TypeParameter\022?\n" + - "\rreceiver_type\030\005 \001(\0132(.org.jetbrains.kot" + - "lin.serialization.Type\022\014\n\004name\030\006 \002(\005\022T\n\017" + - "value_parameter\030\007 \003(\0132;.org.jetbrains.ko", - "tlin.serialization.Callable.ValueParamet" + - "er\022=\n\013return_type\030\010 \002(\0132(.org.jetbrains." + - "kotlin.serialization.Type\032\263\001\n\016ValueParam" + - "eter\022\r\n\005flags\030\001 \001(\005\022\014\n\004name\030\002 \002(\005\0226\n\004typ" + - "e\030\003 \002(\0132(.org.jetbrains.kotlin.serializa" + - "tion.Type\022E\n\023vararg_element_type\030\004 \001(\0132(" + - ".org.jetbrains.kotlin.serialization.Type" + - "*\005\010d\020\310\001\"Q\n\nMemberKind\022\017\n\013DECLARATION\020\000\022\021" + - "\n\rFAKE_OVERRIDE\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYN" + - "THESIZED\020\003\":\n\014CallableKind\022\007\n\003FUN\020\000\022\007\n\003V", - "AL\020\001\022\007\n\003VAR\020\002\022\017\n\013CONSTRUCTOR\020\003*\005\010d\020\310\001*-\n" + - "\010Modality\022\t\n\005FINAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRA" + - "CT\020\002*b\n\nVisibility\022\014\n\010INTERNAL\020\000\022\013\n\007PRIV" + - "ATE\020\001\022\r\n\tPROTECTED\020\002\022\n\n\006PUBLIC\020\003\022\023\n\017PRIV" + - "ATE_TO_THIS\020\004\022\t\n\005EXTRA\020\005B\022B\rDebugProtoBu" + - "f\210\001\000" + "\017\n\007fq_name\030\003 \002(\005\022\031\n\021class_object_name\030\004 " + + "\001(\005\022I\n\016type_parameter\030\005 \003(\01321.org.jetbra" + + "ins.kotlin.serialization.TypeParameter\022;" + + "\n\tsupertype\030\006 \003(\0132(.org.jetbrains.kotlin" + + ".serialization.Type\022\031\n\021nested_class_name" + + "\030\007 \003(\005\022<\n\006member\030\013 \003(\0132,.org.jetbrains.k" + + "otlin.serialization.Callable\022\022\n\nenum_ent", + "ry\030\014 \003(\005\022Y\n\023primary_constructor\030\r \001(\0132<." + + "org.jetbrains.kotlin.serialization.Class" + + ".PrimaryConstructor\032P\n\022PrimaryConstructo" + + "r\022:\n\004data\030\001 \001(\0132,.org.jetbrains.kotlin.s" + + "erialization.Callable\"p\n\004Kind\022\t\n\005CLASS\020\000" + + "\022\t\n\005TRAIT\020\001\022\016\n\nENUM_CLASS\020\002\022\016\n\nENUM_ENTR" + + "Y\020\003\022\024\n\020ANNOTATION_CLASS\020\004\022\n\n\006OBJECT\020\005\022\020\n" + + "\014CLASS_OBJECT\020\006*\005\010d\020\310\001\"N\n\007Package\022<\n\006mem" + + "ber\030\001 \003(\0132,.org.jetbrains.kotlin.seriali" + + "zation.Callable*\005\010d\020\310\001\"\332\005\n\010Callable\022\r\n\005f", + "lags\030\001 \001(\005\022\030\n\020extra_visibility\030\002 \001(\t\022\024\n\014" + + "getter_flags\030\t \001(\005\022\024\n\014setter_flags\030\n \001(\005" + + "\022I\n\016type_parameter\030\004 \003(\01321.org.jetbrains" + + ".kotlin.serialization.TypeParameter\022?\n\rr" + + "eceiver_type\030\005 \001(\0132(.org.jetbrains.kotli" + + "n.serialization.Type\022\014\n\004name\030\006 \002(\005\022T\n\017va" + + "lue_parameter\030\007 \003(\0132;.org.jetbrains.kotl" + + "in.serialization.Callable.ValueParameter" + + "\022=\n\013return_type\030\010 \002(\0132(.org.jetbrains.ko" + + "tlin.serialization.Type\032\263\001\n\016ValueParamet", + "er\022\r\n\005flags\030\001 \001(\005\022\014\n\004name\030\002 \002(\005\0226\n\004type\030" + + "\003 \002(\0132(.org.jetbrains.kotlin.serializati" + + "on.Type\022E\n\023vararg_element_type\030\004 \001(\0132(.o" + + "rg.jetbrains.kotlin.serialization.Type*\005" + + "\010d\020\310\001\"Q\n\nMemberKind\022\017\n\013DECLARATION\020\000\022\021\n\r" + + "FAKE_OVERRIDE\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYNTH" + + "ESIZED\020\003\":\n\014CallableKind\022\007\n\003FUN\020\000\022\007\n\003VAL" + + "\020\001\022\007\n\003VAR\020\002\022\017\n\013CONSTRUCTOR\020\003*\005\010d\020\310\001*-\n\010M" + + "odality\022\t\n\005FINAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRACT" + + "\020\002*b\n\nVisibility\022\014\n\010INTERNAL\020\000\022\013\n\007PRIVAT", + "E\020\001\022\r\n\tPROTECTED\020\002\022\n\n\006PUBLIC\020\003\022\023\n\017PRIVAT" + + "E_TO_THIS\020\004\022\t\n\005EXTRA\020\005B\022B\rDebugProtoBuf\210" + + "\001\000" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -17867,15 +17114,9 @@ public final class DebugProtoBuf { internal_static_org_jetbrains_kotlin_serialization_Class_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_Class_descriptor, - new java.lang.String[] { "Flags", "ExtraVisibility", "FqName", "ClassObject", "TypeParameter", "Supertype", "NestedClassName", "Member", "EnumEntry", "PrimaryConstructor", }); - internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_descriptor = - internal_static_org_jetbrains_kotlin_serialization_Class_descriptor.getNestedTypes().get(0); - internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_org_jetbrains_kotlin_serialization_Class_ClassObject_descriptor, - new java.lang.String[] { "Data", }); + new java.lang.String[] { "Flags", "ExtraVisibility", "FqName", "ClassObjectName", "TypeParameter", "Supertype", "NestedClassName", "Member", "EnumEntry", "PrimaryConstructor", }); internal_static_org_jetbrains_kotlin_serialization_Class_PrimaryConstructor_descriptor = - internal_static_org_jetbrains_kotlin_serialization_Class_descriptor.getNestedTypes().get(1); + internal_static_org_jetbrains_kotlin_serialization_Class_descriptor.getNestedTypes().get(0); internal_static_org_jetbrains_kotlin_serialization_Class_PrimaryConstructor_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_Class_PrimaryConstructor_descriptor, diff --git a/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java b/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java index 18d52ca8be8..9e453d93464 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java +++ b/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java @@ -20,7 +20,6 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; @@ -116,7 +115,7 @@ public class RecursiveDescriptorComparator { if (descriptor instanceof ClassDescriptor) { ClassDescriptor klass = (ClassDescriptor) descriptor; appendSubDescriptors(descriptor, module, - klass.getDefaultType().getMemberScope(), getConstructorsAndClassObject(klass), printer); + klass.getDefaultType().getMemberScope(), klass.getConstructors(), printer); JetScope staticScope = klass.getStaticScope(); if (!staticScope.getAllDescriptors().isEmpty()) { printer.println(); @@ -164,14 +163,6 @@ public class RecursiveDescriptorComparator { } } - @NotNull - private static List getConstructorsAndClassObject(@NotNull ClassDescriptor klass) { - List constructorsAndClassObject = Lists.newArrayList(); - constructorsAndClassObject.addAll(klass.getConstructors()); - ContainerUtil.addIfNotNull(constructorsAndClassObject, klass.getClassObjectDescriptor()); - return constructorsAndClassObject; - } - private boolean shouldSkip(@NotNull DeclarationDescriptor subDescriptor) { boolean isFunctionFromAny = subDescriptor.getContainingDeclaration() instanceof ClassDescriptor && subDescriptor instanceof FunctionDescriptor @@ -183,7 +174,7 @@ public class RecursiveDescriptorComparator { @NotNull DeclarationDescriptor descriptor, @NotNull ModuleDescriptor module, @NotNull JetScope memberScope, - @NotNull Collection extraSubDescriptors, + @NotNull Collection extraSubDescriptors, @NotNull Printer printer ) { if (!module.equals(DescriptorUtils.getContainingModule(descriptor))) { diff --git a/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessor.java b/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessor.java index 3ea88dfef6f..f35ea27479e 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessor.java +++ b/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessor.java @@ -105,7 +105,6 @@ public class RecursiveDescriptorProcessor { && visitChildren(descriptor.getThisAsReceiverParameter(), data) && visitChildren(descriptor.getConstructors(), data) && visitChildren(descriptor.getTypeConstructor().getParameters(), data) - && visitChildren(descriptor.getClassObjectDescriptor(), data) && visitChildren(descriptor.getDefaultType().getMemberScope().getAllDescriptors(), data); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java index 87be3fafecf..527895b1017 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/JvmAbi.java @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.load.java; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.Name; +import org.jetbrains.kotlin.name.SpecialNames; public final class JvmAbi { /** @@ -35,7 +36,7 @@ public final class JvmAbi { public static final String GETTER_PREFIX = "get"; public static final String SETTER_PREFIX = "set"; - public static final String CLASS_OBJECT_CLASS_NAME = "object"; + 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"; @@ -43,7 +44,7 @@ public final class JvmAbi { public static final String ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX = "$annotations"; public static final String INSTANCE_FIELD = "INSTANCE$"; - public static final String CLASS_OBJECT_FIELD = "OBJECT$"; + 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 String KOTLIN_CLASS_FIELD_NAME = "$kotlinClass"; diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedResolverUtils.java index 5a91e89fe99..30fa0a459bb 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedResolverUtils.java @@ -20,24 +20,25 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor; -import org.jetbrains.kotlin.load.java.JvmAbi; -import org.jetbrains.kotlin.name.*; +import org.jetbrains.kotlin.name.ClassId; +import org.jetbrains.kotlin.name.FqName; +import org.jetbrains.kotlin.name.FqNameUnsafe; +import org.jetbrains.kotlin.name.Name; import java.util.ArrayList; import java.util.List; -import static org.jetbrains.kotlin.name.SpecialNames.isClassObjectName; - public class DeserializedResolverUtils { private DeserializedResolverUtils() { } + //TODO_R: remove usages @NotNull public static FqName kotlinFqNameToJavaFqName(@NotNull FqNameUnsafe kotlinFqName) { List segments = kotlinFqName.pathSegments(); List correctedSegments = new ArrayList(segments.size()); for (Name segment : segments) { - correctedSegments.add(isClassObjectName(segment) ? JvmAbi.CLASS_OBJECT_CLASS_NAME : segment.getIdentifier()); + correctedSegments.add(segment.getIdentifier()); } return FqName.fromSegments(correctedSegments); } @@ -47,6 +48,7 @@ public class DeserializedResolverUtils { return new ClassId(kotlinClassId.getPackageFqName(), kotlinFqNameToJavaFqName(kotlinClassId.getRelativeClassName()).toUnsafe()); } + //TODO_R: remove usages @NotNull public static FqNameUnsafe javaFqNameToKotlinFqName(@NotNull FqName javaFqName) { if (javaFqName.isRoot()) { @@ -56,14 +58,12 @@ public class DeserializedResolverUtils { List correctedSegments = new ArrayList(segments.size()); correctedSegments.add(segments.get(0)); for (int i = 1; i < segments.size(); i++) { - Name segment = segments.get(i); - boolean isClassObjectName = segment.asString().equals(JvmAbi.CLASS_OBJECT_CLASS_NAME); - Name correctedSegment = isClassObjectName ? SpecialNames.getClassObjectName(segments.get(i - 1)) : segment; - correctedSegments.add(correctedSegment); + correctedSegments.add(segments.get(i)); } return FqNameUnsafe.fromSegments(correctedSegments); } + //TODO_R: remove usages @NotNull public static ClassId javaClassIdToKotlinClassId(@NotNull ClassId javaClassId) { return new ClassId(javaClassId.getPackageFqName(), javaFqNameToKotlinFqName(javaClassId.getRelativeClassName().toSafe())); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java index 659b170512d..8a3d0a6e189 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java @@ -51,7 +51,6 @@ public class JvmClassName { return byFqNameWithoutInnerClasses(new FqName(fqName)); } - private final static String CLASS_OBJECT_REPLACE_GUARD = ""; private final static String TRAIT_IMPL_REPLACE_GUARD = ""; // Internal name: kotlin/Map$Entry @@ -71,12 +70,10 @@ public class JvmClassName { public FqName getFqNameForClassNameWithoutDollars() { if (fqName == null) { String fqName = internalName - .replace(JvmAbi.CLASS_OBJECT_CLASS_NAME, CLASS_OBJECT_REPLACE_GUARD) .replace(JvmAbi.TRAIT_IMPL_CLASS_NAME, TRAIT_IMPL_REPLACE_GUARD) .replace('$', '.') .replace('/', '.') - .replace(TRAIT_IMPL_REPLACE_GUARD, JvmAbi.TRAIT_IMPL_CLASS_NAME) - .replace(CLASS_OBJECT_REPLACE_GUARD, JvmAbi.CLASS_OBJECT_CLASS_NAME); + .replace(TRAIT_IMPL_REPLACE_GUARD, JvmAbi.TRAIT_IMPL_CLASS_NAME); this.fqName = new FqName(fqName); } return fqName; diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt index 321d0d622da..c75375573e8 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt @@ -24,22 +24,10 @@ public object BuiltInsSerializationUtil { private val PACKAGE_FILE_NAME = ".kotlin_package" private val STRING_TABLE_FILE_NAME = ".kotlin_string_table" private val CLASS_NAMES_FILE_NAME = ".kotlin_class_names" - private val CLASS_OBJECT_NAME = "object" - - private fun relativeClassNameToFilePath(className: FqNameUnsafe): String? { - return FqName.fromSegments(className.pathSegments().map { segment -> - when { - SpecialNames.isClassObjectName(segment) -> CLASS_OBJECT_NAME - !segment.isSpecial() -> segment.getIdentifier() - else -> return null - } - }).asString() - } platformStatic public fun getClassMetadataPath(classId: ClassId): String? { - val filePath = relativeClassNameToFilePath(classId.getRelativeClassName()) - if (filePath == null) return null - return packageFqNameToPath(classId.getPackageFqName()) + "/" + filePath + "." + CLASS_METADATA_FILE_EXTENSION + return packageFqNameToPath(classId.getPackageFqName()) + "/" + classId.getRelativeClassName().asString() + + "." + CLASS_METADATA_FILE_EXTENSION } platformStatic public fun getPackageFilePath(fqName: FqName): String = diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java index 2e40bea0440..164e60a7b9d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.name.Name; -import org.jetbrains.kotlin.name.SpecialNames; import org.jetbrains.kotlin.resolve.DescriptorFactory; import org.jetbrains.kotlin.resolve.OverridingUtil; import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter; @@ -44,12 +43,11 @@ import java.util.HashSet; import java.util.Set; public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { - private final ClassKind kind; private final TypeConstructor typeConstructor; private final ConstructorDescriptor primaryConstructor; private final JetScope scope; private final JetScope staticScope = new StaticScopeForKotlinClass(this); - private final EnumEntrySyntheticClassDescriptor classObjectDescriptor; + private final ClassDescriptor classObjectDescriptor; private final NotNullLazyValue> enumMemberNames; /** @@ -66,7 +64,7 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { ) { JetType enumType = enumClass.getDefaultType(); - return new EnumEntrySyntheticClassDescriptor(storageManager, enumClass, enumType, name, ClassKind.ENUM_ENTRY, enumMemberNames, source); + return new EnumEntrySyntheticClassDescriptor(storageManager, enumClass, enumType, name, enumMemberNames, source); } private EnumEntrySyntheticClassDescriptor( @@ -74,12 +72,11 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { @NotNull ClassDescriptor containingClass, @NotNull JetType supertype, @NotNull Name name, - @NotNull ClassKind kind, @NotNull NotNullLazyValue> enumMemberNames, @NotNull SourceElement source ) { super(storageManager, containingClass, name, source); - this.kind = kind; + assert containingClass.getKind() == ClassKind.ENUM_CLASS; this.typeConstructor = TypeConstructorImpl.createForClass(this, getAnnotations(), true, "enum entry", Collections.emptyList(), @@ -92,11 +89,7 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { primaryConstructor.setReturnType(getDefaultType()); this.primaryConstructor = primaryConstructor; - this.classObjectDescriptor = - kind == ClassKind.CLASS_OBJECT - ? null - : new EnumEntrySyntheticClassDescriptor(storageManager, this, getDefaultType(), SpecialNames.getClassObjectName(name), - ClassKind.CLASS_OBJECT, enumMemberNames, SourceElement.NO_SOURCE); + this.classObjectDescriptor = containingClass; } @NotNull @@ -132,7 +125,7 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { @NotNull @Override public ClassKind getKind() { - return kind; + return ClassKind.ENUM_ENTRY; } @NotNull diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java b/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java index 1698ee36c60..79fd98eb123 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java +++ b/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java @@ -23,7 +23,7 @@ public class SpecialNames { public static final Name NO_NAME_PROVIDED = Name.special(""); public static final Name ROOT_PACKAGE = Name.special(""); - private static final String CLASS_OBJECT_FOR = ""); - } - - public static boolean isClassObjectName(@NotNull Name name) { - return name.isSpecial() && name.asString().startsWith(CLASS_OBJECT_FOR); - } - private SpecialNames() {} - } diff --git a/core/serialization/src/descriptors.proto b/core/serialization/src/descriptors.proto index 3c2737ae276..bcf1b344e25 100644 --- a/core/serialization/src/descriptors.proto +++ b/core/serialization/src/descriptors.proto @@ -179,14 +179,8 @@ message Class { required int32 fq_name = 3; - message ClassObject { - // If this field is present, it contains serialized data for a synthetic class object, for which there's no class file. - // Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class - optional Class data = 1; - } - - // This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file - optional ClassObject class_object = 4; + // If this field is present, it contains the name of default object. + optional int32 class_object_name = 4; repeated TypeParameter type_parameter = 5; repeated Type supertype = 6; diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java b/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java index d6e9c71e29f..b051525f132 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java @@ -131,8 +131,8 @@ public class DescriptorSerializer { } ClassDescriptor classObject = classDescriptor.getClassObjectDescriptor(); - if (classObject != null) { - builder.setClassObject(classObjectProto(classObject)); + if (classObject != null && isClassObject(classObject)) { + builder.setClassObjectName(stringTable.getSimpleNameIndex(classObject.getName())); } extension.serializeClass(classDescriptor, builder, stringTable); @@ -140,15 +140,6 @@ public class DescriptorSerializer { return builder; } - @NotNull - private ProtoBuf.Class.ClassObject classObjectProto(@NotNull ClassDescriptor classObject) { - if (isObject(classObject.getContainingDeclaration())) { - return ProtoBuf.Class.ClassObject.newBuilder().setData(classProto(classObject)).build(); - } - - return ProtoBuf.Class.ClassObject.getDefaultInstance(); - } - @NotNull public ProtoBuf.Callable.Builder callableProto(@NotNull CallableMemberDescriptor descriptor) { ProtoBuf.Callable.Builder builder = ProtoBuf.Callable.newBuilder(); diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java b/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java index c5f583b4489..6dea099c4d6 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java @@ -7336,23 +7336,23 @@ public final class ProtoBuf { */ int getFqName(); - // optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + // optional int32 class_object_name = 4; /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - boolean hasClassObject(); + boolean hasClassObjectName(); /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject getClassObject(); + int getClassObjectName(); // repeated .org.jetbrains.kotlin.serialization.TypeParameter type_parameter = 5; /** @@ -7518,17 +7518,9 @@ public final class ProtoBuf { fqName_ = input.readInt32(); break; } - case 34: { - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.Builder subBuilder = null; - if (((bitField0_ & 0x00000008) == 0x00000008)) { - subBuilder = classObject_.toBuilder(); - } - classObject_ = input.readMessage(org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(classObject_); - classObject_ = subBuilder.buildPartial(); - } + case 32: { bitField0_ |= 0x00000008; + classObjectName_ = input.readInt32(); break; } case 42: { @@ -7760,437 +7752,6 @@ public final class ProtoBuf { // @@protoc_insertion_point(enum_scope:org.jetbrains.kotlin.serialization.Class.Kind) } - public interface ClassObjectOrBuilder - extends com.google.protobuf.MessageLiteOrBuilder { - - // optional .org.jetbrains.kotlin.serialization.Class data = 1; - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - boolean hasData(); - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - org.jetbrains.kotlin.serialization.ProtoBuf.Class getData(); - } - /** - * Protobuf type {@code org.jetbrains.kotlin.serialization.Class.ClassObject} - */ - public static final class ClassObject extends - com.google.protobuf.GeneratedMessageLite - implements ClassObjectOrBuilder { - // Use ClassObject.newBuilder() to construct. - private ClassObject(com.google.protobuf.GeneratedMessageLite.Builder builder) { - super(builder); - - } - private ClassObject(boolean noInit) {} - - private static final ClassObject defaultInstance; - public static ClassObject getDefaultInstance() { - return defaultInstance; - } - - public ClassObject getDefaultInstanceForType() { - return defaultInstance; - } - - private ClassObject( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - initFields(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - org.jetbrains.kotlin.serialization.ProtoBuf.Class.Builder subBuilder = null; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - subBuilder = data_.toBuilder(); - } - data_ = input.readMessage(org.jetbrains.kotlin.serialization.ProtoBuf.Class.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(data_); - data_ = subBuilder.buildPartial(); - } - bitField0_ |= 0x00000001; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e.getMessage()).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - public ClassObject parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ClassObject(input, extensionRegistry); - } - }; - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - private int bitField0_; - // optional .org.jetbrains.kotlin.serialization.Class data = 1; - public static final int DATA_FIELD_NUMBER = 1; - private org.jetbrains.kotlin.serialization.ProtoBuf.Class data_; - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - public boolean hasData() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-       * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-       * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-       * 
- */ - public org.jetbrains.kotlin.serialization.ProtoBuf.Class getData() { - return data_; - } - - private void initFields() { - data_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.getDefaultInstance(); - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (hasData()) { - if (!getData().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, data_); - } - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, data_); - } - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input, extensionRegistry); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - /** - * Protobuf type {@code org.jetbrains.kotlin.serialization.Class.ClassObject} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageLite.Builder< - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject, Builder> - implements org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObjectOrBuilder { - // Construct using org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private void maybeForceBuilderInitialization() { - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - data_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.getDefaultInstance(); - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject getDefaultInstanceForType() { - return org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.getDefaultInstance(); - } - - public org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject build() { - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject buildPartial() { - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject result = new org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.data_ = data_; - result.bitField0_ = to_bitField0_; - return result; - } - - public Builder mergeFrom(org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject other) { - if (other == org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.getDefaultInstance()) return this; - if (other.hasData()) { - mergeData(other.getData()); - } - return this; - } - - public final boolean isInitialized() { - if (hasData()) { - if (!getData().isInitialized()) { - - return false; - } - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject) e.getUnfinishedMessage(); - throw e; - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - // optional .org.jetbrains.kotlin.serialization.Class data = 1; - private org.jetbrains.kotlin.serialization.ProtoBuf.Class data_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.getDefaultInstance(); - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public boolean hasData() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public org.jetbrains.kotlin.serialization.ProtoBuf.Class getData() { - return data_; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder setData(org.jetbrains.kotlin.serialization.ProtoBuf.Class value) { - if (value == null) { - throw new NullPointerException(); - } - data_ = value; - - bitField0_ |= 0x00000001; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder setData( - org.jetbrains.kotlin.serialization.ProtoBuf.Class.Builder builderForValue) { - data_ = builderForValue.build(); - - bitField0_ |= 0x00000001; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder mergeData(org.jetbrains.kotlin.serialization.ProtoBuf.Class value) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - data_ != org.jetbrains.kotlin.serialization.ProtoBuf.Class.getDefaultInstance()) { - data_ = - org.jetbrains.kotlin.serialization.ProtoBuf.Class.newBuilder(data_).mergeFrom(value).buildPartial(); - } else { - data_ = value; - } - - bitField0_ |= 0x00000001; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class data = 1; - * - *
-         * If this field is present, it contains serialized data for a synthetic class object, for which there's no class file.
-         * Otherwise class object was compiled to a separate class file and serialized data can be found in the annotation on that class
-         * 
- */ - public Builder clearData() { - data_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.getDefaultInstance(); - - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.Class.ClassObject) - } - - static { - defaultInstance = new ClassObject(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.Class.ClassObject) - } - public interface PrimaryConstructorOrBuilder extends com.google.protobuf.MessageLiteOrBuilder { @@ -8728,28 +8289,28 @@ public final class ProtoBuf { return fqName_; } - // optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - public static final int CLASS_OBJECT_FIELD_NUMBER = 4; - private org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject classObject_; + // optional int32 class_object_name = 4; + public static final int CLASS_OBJECT_NAME_FIELD_NUMBER = 4; + private int classObjectName_; /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - public boolean hasClassObject() { + public boolean hasClassObjectName() { return ((bitField0_ & 0x00000008) == 0x00000008); } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-     * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+     * If this field is present, it contains the name of default object.
      * 
*/ - public org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject getClassObject() { - return classObject_; + public int getClassObjectName() { + return classObjectName_; } // repeated .org.jetbrains.kotlin.serialization.TypeParameter type_parameter = 5; @@ -8949,7 +8510,7 @@ public final class ProtoBuf { flags_ = 0; extraVisibility_ = ""; fqName_ = 0; - classObject_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.getDefaultInstance(); + classObjectName_ = 0; typeParameter_ = java.util.Collections.emptyList(); supertype_ = java.util.Collections.emptyList(); nestedClassName_ = java.util.Collections.emptyList(); @@ -8966,12 +8527,6 @@ public final class ProtoBuf { memoizedIsInitialized = 0; return false; } - if (hasClassObject()) { - if (!getClassObject().isInitialized()) { - memoizedIsInitialized = 0; - return false; - } - } for (int i = 0; i < getTypeParameterCount(); i++) { if (!getTypeParameter(i).isInitialized()) { memoizedIsInitialized = 0; @@ -9020,7 +8575,7 @@ public final class ProtoBuf { output.writeInt32(3, fqName_); } if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(4, classObject_); + output.writeInt32(4, classObjectName_); } for (int i = 0; i < typeParameter_.size(); i++) { output.writeMessage(5, typeParameter_.get(i)); @@ -9063,7 +8618,7 @@ public final class ProtoBuf { } if (((bitField0_ & 0x00000008) == 0x00000008)) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, classObject_); + .computeInt32Size(4, classObjectName_); } for (int i = 0; i < typeParameter_.size(); i++) { size += com.google.protobuf.CodedOutputStream @@ -9196,7 +8751,7 @@ public final class ProtoBuf { bitField0_ = (bitField0_ & ~0x00000002); fqName_ = 0; bitField0_ = (bitField0_ & ~0x00000004); - classObject_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.getDefaultInstance(); + classObjectName_ = 0; bitField0_ = (bitField0_ & ~0x00000008); typeParameter_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000010); @@ -9248,7 +8803,7 @@ public final class ProtoBuf { if (((from_bitField0_ & 0x00000008) == 0x00000008)) { to_bitField0_ |= 0x00000008; } - result.classObject_ = classObject_; + result.classObjectName_ = classObjectName_; if (((bitField0_ & 0x00000010) == 0x00000010)) { typeParameter_ = java.util.Collections.unmodifiableList(typeParameter_); bitField0_ = (bitField0_ & ~0x00000010); @@ -9295,8 +8850,8 @@ public final class ProtoBuf { if (other.hasFqName()) { setFqName(other.getFqName()); } - if (other.hasClassObject()) { - mergeClassObject(other.getClassObject()); + if (other.hasClassObjectName()) { + setClassObjectName(other.getClassObjectName()); } if (!other.typeParameter_.isEmpty()) { if (typeParameter_.isEmpty()) { @@ -9360,12 +8915,6 @@ public final class ProtoBuf { return false; } - if (hasClassObject()) { - if (!getClassObject().isInitialized()) { - - return false; - } - } for (int i = 0; i < getTypeParameterCount(); i++) { if (!getTypeParameter(i).isInitialized()) { @@ -9616,88 +9165,52 @@ public final class ProtoBuf { return this; } - // optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - private org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject classObject_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.getDefaultInstance(); + // optional int32 class_object_name = 4; + private int classObjectName_ ; /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public boolean hasClassObject() { + public boolean hasClassObjectName() { return ((bitField0_ & 0x00000008) == 0x00000008); } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject getClassObject() { - return classObject_; + public int getClassObjectName() { + return classObjectName_; } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public Builder setClassObject(org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject value) { - if (value == null) { - throw new NullPointerException(); - } - classObject_ = value; - + public Builder setClassObjectName(int value) { bitField0_ |= 0x00000008; + classObjectName_ = value; + return this; } /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; + * optional int32 class_object_name = 4; * *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
+       * If this field is present, it contains the name of default object.
        * 
*/ - public Builder setClassObject( - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.Builder builderForValue) { - classObject_ = builderForValue.build(); - - bitField0_ |= 0x00000008; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-       * 
- */ - public Builder mergeClassObject(org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject value) { - if (((bitField0_ & 0x00000008) == 0x00000008) && - classObject_ != org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.getDefaultInstance()) { - classObject_ = - org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.newBuilder(classObject_).mergeFrom(value).buildPartial(); - } else { - classObject_ = value; - } - - bitField0_ |= 0x00000008; - return this; - } - /** - * optional .org.jetbrains.kotlin.serialization.Class.ClassObject class_object = 4; - * - *
-       * This field is present if and only if the class has a class object. Its proto should be found either here or in the separate file
-       * 
- */ - public Builder clearClassObject() { - classObject_ = org.jetbrains.kotlin.serialization.ProtoBuf.Class.ClassObject.getDefaultInstance(); - + public Builder clearClassObjectName() { bitField0_ = (bitField0_ & ~0x00000008); + classObjectName_ = 0; + return this; } diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index e510194e4a1..eb77bd54eb7 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -30,7 +30,6 @@ import org.jetbrains.kotlin.resolve.scopes.StaticScopeForKotlinClass import org.jetbrains.kotlin.types.AbstractClassTypeConstructor import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.serialization.deserialization -import org.jetbrains.kotlin.name.SpecialNames.getClassObjectName import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter @@ -111,18 +110,13 @@ public class DeserializedClassDescriptor( } private fun computeClassObjectDescriptor(): ClassDescriptor? { - if (!classProto.hasClassObject()) return null - - if (getKind() == ClassKind.OBJECT) { - val classObjectProto = classProto.getClassObject() - if (!classObjectProto.hasData()) { - throw IllegalStateException("Object should have a serialized class object: $classId") - } - - return DeserializedClassDescriptor(c, classObjectProto.getData(), c.nameResolver) + if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.CLASS_OBJECT) { + return this } + if (!classProto.hasClassObjectName()) return null - return c.components.deserializeClass(classId.createNestedClassId(getClassObjectName(getName()))) + val classObjectName = c.nameResolver.getName(classProto.getClassObjectName()) + return memberScope.getClassifier(classObjectName) as? ClassDescriptor } override fun getClassObjectDescriptor(): ClassDescriptor? = classObjectDescriptor() diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/findClassInModule.kt b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/findClassInModule.kt index f6f8c3d8a6f..a639504d2a4 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/findClassInModule.kt +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/findClassInModule.kt @@ -22,22 +22,13 @@ import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.name.ClassId -private fun findInnerClass(classDescriptor: ClassDescriptor, name: Name): ClassDescriptor? { - return if (SpecialNames.isClassObjectName(name)) { - classDescriptor.getClassObjectDescriptor() - } - else { - classDescriptor.getUnsubstitutedInnerClassesScope().getClassifier(name) as? ClassDescriptor - } -} - public fun ModuleDescriptor.findClassAcrossModuleDependencies(classId: ClassId): ClassDescriptor? { val packageViewDescriptor = getPackage(classId.getPackageFqName()) ?: return null val segments = classId.getRelativeClassName().pathSegments() val topLevelClass = packageViewDescriptor.getMemberScope().getClassifier(segments.first()) as? ClassDescriptor ?: return null var result = topLevelClass for (name in segments.subList(1, segments.size())) { - result = findInnerClass(result, name) ?: return null + result = result.getUnsubstitutedInnerClassesScope().getClassifier(name) as? ClassDescriptor ?: return null } return result } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java index 7739ef822b5..592b0933d03 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java @@ -256,11 +256,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport @NotNull private static FqName getClassRelativeName(@NotNull JetClassOrObject decompiledClassOrObject) { Name name = decompiledClassOrObject.getNameAsName(); - if (name == null) { - assert decompiledClassOrObject instanceof JetObjectDeclaration && - ((JetObjectDeclaration) decompiledClassOrObject).isClassObject(); - name = Name.identifier(JvmAbi.CLASS_OBJECT_CLASS_NAME); - } + assert name != null; JetClassOrObject parent = PsiTreeUtil.getParentOfType(decompiledClassOrObject, JetClassOrObject.class, true); if (parent == null) { assert decompiledClassOrObject.isTopLevel(); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt index 3ddca543e70..06cd4df8e9a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.JetDelegationSpecifierList import org.jetbrains.kotlin.psi.JetDelegatorToSuperClass import org.jetbrains.kotlin.lexer.JetTokens -import org.jetbrains.kotlin.name.SpecialNames.getClassObjectName import org.jetbrains.kotlin.psi.JetClassObject import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer import org.jetbrains.kotlin.psi.stubs.impl.KotlinModifierListStubImpl @@ -68,6 +67,7 @@ private class ClassClsStubBuilder( supertypeIds } } + private val classObjectName = if (classProto.hasClassObjectName()) c.nameResolver.getName(classProto.getClassObjectName()) else null private val classOrObjectStub = createClassOrObjectStubAndModifierListStub() @@ -112,8 +112,8 @@ private class ClassClsStubBuilder( private fun doCreateClassOrObjectStub(parent: StubElement): StubElement { val isClassObject = classKind == ProtoBuf.Class.Kind.CLASS_OBJECT - val fqName = if (!isClassObject) outerContext.memberFqNameProvider.getMemberFqName(classId.getRelativeClassName().shortName()) else null - val shortName = fqName?.shortName()?.ref() + val fqName = outerContext.memberFqNameProvider.getMemberFqName(classId.getRelativeClassName().shortName()) + val shortName = fqName.shortName()?.ref() val superTypeRefs = supertypeIds.filter { //TODO: filtering function types should go away !KotlinBuiltIns.isExactFunctionType(it.asSingleFqName()) && !KotlinBuiltIns.isExactExtensionFunctionType(it.asSingleFqName()) @@ -132,7 +132,7 @@ private class ClassClsStubBuilder( KotlinClassStubImpl( JetClassElementType.getStubType(classKind == ProtoBuf.Class.Kind.ENUM_ENTRY), parent, - fqName?.ref(), + fqName.ref(), shortName, superTypeRefs, isTrait = classKind == ProtoBuf.Class.Kind.TRAIT, @@ -181,11 +181,11 @@ private class ClassClsStubBuilder( } private fun createClassObjectStub(classBody: KotlinPlaceHolderStubImpl) { - if (!classProto.hasClassObject() || classKind == ProtoBuf.Class.Kind.OBJECT) { + if (classObjectName == null) { return } - val classObjectId = classId.createNestedClassId(getClassObjectName(classId.getRelativeClassName().shortName())) + val classObjectId = classId.createNestedClassId(classObjectName) createNestedClassStub(classBody, classObjectId) } @@ -221,8 +221,11 @@ private class ClassClsStubBuilder( private fun createInnerAndNestedClasses(classBody: KotlinPlaceHolderStubImpl) { classProto.getNestedClassNameList().forEach { id -> - val nestedClassId = classId.createNestedClassId(c.nameResolver.getName(id)) - createNestedClassStub(classBody, nestedClassId) + val nestedClassName = c.nameResolver.getName(id) + if (nestedClassName != classObjectName) { + val nestedClassId = classId.createNestedClassId(nestedClassName) + createNestedClassStub(classBody, nestedClassId) + } } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt index 1f5029b175e..c4d5de001b3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.load.kotlin.AbstractBinaryClassAnnotationAndConstant import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass -import org.jetbrains.kotlin.name.SpecialNames class ClsStubBuilderComponents( @@ -42,11 +41,11 @@ class ClsStubBuilderComponents( } } +//TODO_R: remove? class MemberFqNameProvider(val fqName: FqName) { fun getMemberFqName(name: Name): FqName = fqName.child(name) - fun child(name: Name?): MemberFqNameProvider = - if (name == null || SpecialNames.isClassObjectName(name)) this else MemberFqNameProvider(fqName.child(name)) + fun child(name: Name?): MemberFqNameProvider = if (name == null) this else MemberFqNameProvider(fqName.child(name)) } trait TypeParameters { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt index 1b6e499b5f4..d3bf7c5f531 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt @@ -97,8 +97,7 @@ fun createStubForPackageName(packageDirectiveStub: KotlinPlaceHolderStubImpl): KotlinUserTypeStub { - //TODO: should go away with default objects - val segments = typeClassId.asSingleFqName().pathSegments().filter { !SpecialNames.isClassObjectName(it) }.toArrayList() + val segments = typeClassId.asSingleFqName().pathSegments().toArrayList() assert(segments.isNotEmpty()) val iterator = segments.listIterator(segments.size()) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt index 35e9b536912..ac1c3790b8f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt @@ -148,7 +148,7 @@ private fun buildDecompiledText(packageFqName: FqName, descriptors: List - : "Something but a class/object is a parent to class object stub: " + parentClassStub; - - name = JvmAbi.CLASS_OBJECT_CLASS_NAME; - - FqName parentFqName = ((KotlinStubWithFqName) parentClassStub).getFqName(); - if (parentFqName != null) { - fqName = parentFqName.child(Name.identifier(name)); - } - } - if (name != null) { sink.occurrence(JetClassShortNameIndex.getInstance().getKey(), name); } + FqName fqName = stub.getFqName(); if (fqName != null) { sink.occurrence(JetFullClassNameIndex.getInstance().getKey(), fqName.asString());