diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/impl.kt b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/impl.kt index 3e39635757f..d0c4e5b6f60 100644 --- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/impl.kt +++ b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/impl.kt @@ -90,10 +90,9 @@ public fun findImplementationFromInterface(descriptor: CallableMemberDescriptor) val overridden = OverrideResolver.getOverriddenDeclarations(descriptor) val filtered = OverrideResolver.filterOutOverridden(overridden) - val result = filtered.firstOrNull { it.getModality() != Modality.ABSTRACT } ?: return null + val result = filtered.firstOrNull { it.modality != Modality.ABSTRACT } ?: return null - val container = result.getContainingDeclaration() - if (DescriptorUtils.isClass(container) || DescriptorUtils.isEnumClass(container)) return null + if (DescriptorUtils.isClassOrEnumClass(result.containingDeclaration)) return null return result } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index 8d2b6da25cc..d6409456ec1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -65,7 +65,6 @@ import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface; import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KOTLIN_SYNTHETIC_CLASS; import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*; -import static org.jetbrains.kotlin.resolve.jvm.annotations.AnnotationUtilKt.hasJvmFieldAnnotation; import static org.jetbrains.kotlin.types.TypeUtils.isNullableType; import static org.jetbrains.org.objectweb.asm.Opcodes.*; @@ -542,7 +541,7 @@ public class AsmUtil { if (opToken == KtTokens.EXCLEQ || opToken == KtTokens.EXCLEQEQEQ) { genInvertBoolean(v); } - return Unit.INSTANCE$; + return Unit.INSTANCE; } }); } @@ -728,8 +727,7 @@ public class AsmUtil { } public static boolean isCompanionObjectWithBackingFieldsInOuter(@NotNull DeclarationDescriptor companionObject) { - DeclarationDescriptor containingClass = companionObject.getContainingDeclaration(); - return isCompanionObject(companionObject) && (isClass(containingClass) || isEnumClass(containingClass)); + return isCompanionObject(companionObject) && isClassOrEnumClass(companionObject.getContainingDeclaration()); } private static boolean areBothAccessorDefault(@NotNull PropertyDescriptor propertyDescriptor) { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt index 6d3d0521bb5..b2fd217fe67 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt @@ -69,11 +69,11 @@ public class PlatformStaticAnnotationChecker : DeclarationChecker { descriptor: DeclarationDescriptor, diagnosticHolder: DiagnosticSink ) { - val container = descriptor.getContainingDeclaration() + val container = descriptor.containingDeclaration val insideObject = container != null && DescriptorUtils.isNonCompanionObject(container) val insideCompanionObjectInClass = container != null && DescriptorUtils.isCompanionObject(container) && - container.getContainingDeclaration().let { DescriptorUtils.isClass(it) || DescriptorUtils.isEnumClass(it) } + DescriptorUtils.isClassOrEnumClass(container.containingDeclaration) if (!insideObject && !insideCompanionObjectInClass) { diagnosticHolder.report(ErrorsJvm.JVM_STATIC_NOT_IN_OBJECT.on(declaration)) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt index 42279c67e72..b8afbe1d9f0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt @@ -36,7 +36,7 @@ public fun DeclarationDescriptor.hasJvmSyntheticAnnotation(): Boolean { } public fun CallableDescriptor.isPlatformStaticInObjectOrClass(): Boolean = - isPlatformStaticIn { DescriptorUtils.isNonCompanionObject(it) || DescriptorUtils.isClass(it) || DescriptorUtils.isEnumClass(it) } + isPlatformStaticIn { DescriptorUtils.isNonCompanionObject(it) || DescriptorUtils.isClassOrEnumClass(it) } public fun CallableDescriptor.isPlatformStaticInCompanionObject(): Boolean = isPlatformStaticIn { DescriptorUtils.isCompanionObject(it) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java index 18d708de678..9eff647e331 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java @@ -312,6 +312,10 @@ public class DescriptorUtils { return isKindOf(descriptor, ClassKind.CLASS); } + public static boolean isClassOrEnumClass(@Nullable DeclarationDescriptor descriptor) { + return isClass(descriptor) || isEnumClass(descriptor); + } + private static boolean isKindOf(@Nullable DeclarationDescriptor descriptor, @NotNull ClassKind classKind) { return descriptor instanceof ClassDescriptor && ((ClassDescriptor) descriptor).getKind() == classKind; } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt index b65e7c3f4a1..801a88db1de 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt @@ -18,9 +18,7 @@ package org.jetbrains.kotlin.resolve.descriptorUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS -import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_ENTRY -import org.jetbrains.kotlin.descriptors.ClassKind.OBJECT +import org.jetbrains.kotlin.descriptors.ClassKind.* import org.jetbrains.kotlin.descriptors.annotations.Annotated import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention import org.jetbrains.kotlin.incremental.components.LookupLocation @@ -109,11 +107,12 @@ public val DeclarationDescriptorWithVisibility.isEffectivelyPublicApi: Boolean } public fun ClassDescriptor.getSuperClassNotAny(): ClassDescriptor? { - for (supertype in getDefaultType().getConstructor().getSupertypes()) { - val superClassifier = supertype.getConstructor().getDeclarationDescriptor() - if (!KotlinBuiltIns.isAnyOrNullableAny(supertype) && - (DescriptorUtils.isClass(superClassifier) || DescriptorUtils.isEnumClass(superClassifier))) { - return superClassifier as ClassDescriptor + for (supertype in defaultType.constructor.supertypes) { + if (!KotlinBuiltIns.isAnyOrNullableAny(supertype)) { + val superClassifier = supertype.constructor.declarationDescriptor + if (DescriptorUtils.isClassOrEnumClass(superClassifier)) { + return superClassifier as ClassDescriptor + } } } return null diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt index eaf153ad5d3..26a52cf8736 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt @@ -17,7 +17,10 @@ package org.jetbrains.kotlin.types.typeUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.CallableDescriptor +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.types.* @@ -170,9 +173,7 @@ private fun constituentTypes(result: MutableSet, types: Collection ProtoContainer.Package(fqName, c.nameResolver, c.typeTable, c.packagePartSource) is DeserializedClassDescriptor -> ProtoContainer.Class( classProto, c.nameResolver, c.typeTable, - isCompanionOfClass = DescriptorUtils.isCompanionObject(this) && - containingDeclaration.let { DescriptorUtils.isClass(it) || DescriptorUtils.isEnumClass(it) }, + isCompanionOfClass = DescriptorUtils.isCompanionObject(this) && DescriptorUtils.isClassOrEnumClass(containingDeclaration), isInterface = kind == ClassKind.INTERFACE ) else -> null // TODO: support annotations on lambdas and their parameters