diff --git a/compiler/container/src/org/jetbrains/kotlin/container/Container.kt b/compiler/container/src/org/jetbrains/kotlin/container/Container.kt index 28914b4254e..7d6d0229cf4 100644 --- a/compiler/container/src/org/jetbrains/kotlin/container/Container.kt +++ b/compiler/container/src/org/jetbrains/kotlin/container/Container.kt @@ -38,7 +38,10 @@ object DynamicComponentDescriptor : ValueDescriptor { override fun toString(): String = "Dynamic" } -class StorageComponentContainer(private val id: String, parent: StorageComponentContainer? = null) : ComponentContainer, ComponentProvider, Closeable { +class StorageComponentContainer( + private val id: String, + parent: StorageComponentContainer? = null +) : ComponentContainer, ComponentProvider, Closeable { val unknownContext: ComponentResolveContext by lazy { val parentContext = parent?.let { ComponentResolveContext(it, DynamicComponentDescriptor) } ComponentResolveContext(this, DynamicComponentDescriptor, parentContext) @@ -102,7 +105,10 @@ class StorageComponentContainer(private val id: String, parent: StorageComponent override fun create(request: Class): T { val constructorBinding = request.bindToConstructor(unknownContext) val args = constructorBinding.argumentDescriptors.map { it.getValue() }.toTypedArray() - return runWithUnwrappingInvocationException { constructorBinding.constructor.newInstance(*args) as T } + return runWithUnwrappingInvocationException { + @Suppress("UNCHECKED_CAST") + constructorBinding.constructor.newInstance(*args) as T + } } override fun toString() = "Container $id" diff --git a/compiler/container/tests/org/jetbrains/kotlin/container/tests/ComponentContainerTest.kt b/compiler/container/tests/org/jetbrains/kotlin/container/tests/ComponentContainerTest.kt index 07c292da753..9238e5697e4 100644 --- a/compiler/container/tests/org/jetbrains/kotlin/container/tests/ComponentContainerTest.kt +++ b/compiler/container/tests/org/jetbrains/kotlin/container/tests/ComponentContainerTest.kt @@ -42,7 +42,7 @@ class ComponentContainerTest { val descriptor = container.resolve() assertNotNull(descriptor) - val instance = descriptor!!.getValue() as TestComponentInterface + val instance = descriptor.getValue() as TestComponentInterface assertNotNull(instance) assertFails { instance.foo() @@ -58,14 +58,14 @@ class ComponentContainerTest { val descriptor = container.resolve() assertNotNull(descriptor) - val instance = descriptor!!.getValue() as TestClientComponent + val instance = descriptor.getValue() as TestClientComponent assertNotNull(instance) assertNotNull(instance.dep) assertFails { instance.dep.foo() } assertTrue(instance.dep is ManualTestComponent) - assertEquals("name", (instance.dep as ManualTestComponent).name) + assertEquals("name", instance.dep.name) container.close() assertTrue(instance.disposed) assertFalse(instance.dep.disposed) // should not dispose manually passed instances @@ -80,7 +80,7 @@ class ComponentContainerTest { val descriptor = container.resolve() assertNotNull(descriptor) - val instance = descriptor!!.getValue() as TestClientComponent + val instance = descriptor.getValue() as TestClientComponent assertNotNull(instance) assertNotNull(instance.dep) assertFails { @@ -114,8 +114,8 @@ class ComponentContainerTest { assertNotNull(descriptor1) val descriptor2 = it.resolve() assertNotNull(descriptor2) - assertTrue(descriptor1 == descriptor2) - assertTrue(descriptor1!!.getValue() == descriptor2!!.getValue()) + assertEquals(descriptor1, descriptor2) + assertEquals(descriptor1.getValue(), descriptor2.getValue()) } } @@ -129,9 +129,9 @@ class ComponentContainerTest { assertNotNull(descriptor1) val descriptor2 = it.resolve() assertNotNull(descriptor2) - val component1 = descriptor1!!.getValue() as TestAdhocComponent1 - val component2 = descriptor2!!.getValue() as TestAdhocComponent2 - assertTrue(component1.service === component2.service) + val component1 = descriptor1.getValue() as TestAdhocComponent1 + val component2 = descriptor2.getValue() as TestAdhocComponent2 + assertSame(component1.service, component2.service) } } @@ -142,10 +142,10 @@ class ComponentContainerTest { useImpl() useImpl() useImpl() - }.use { - val descriptor = it.resolve() + }.use { container -> + val descriptor = container.resolve() assertNotNull(descriptor) - val iterableComponent = descriptor!!.getValue() as TestIterableComponent + val iterableComponent = descriptor.getValue() as TestIterableComponent assertEquals(2, iterableComponent.components.count()) assertTrue(iterableComponent.components.any { it is TestClientComponent }) assertTrue(iterableComponent.components.any { it is TestClientComponent2 }) @@ -160,10 +160,10 @@ class ComponentContainerTest { useImpl() useImpl() useImpl() - }.use { - val descriptor = it.resolve() + }.use { container -> + val descriptor = container.resolve() assertNotNull(descriptor) - val iterableComponent = descriptor!!.getValue() as JavaTestComponents + val iterableComponent = descriptor.getValue() as JavaTestComponents assertEquals(2, iterableComponent.components.count()) assertTrue(iterableComponent.components.any { it is TestClientComponent }) assertTrue(iterableComponent.components.any { it is TestClientComponent2 }) @@ -181,7 +181,7 @@ class ComponentContainerTest { }.use { val descriptor = it.resolve() assertNotNull(descriptor) - val genericClient = descriptor!!.getValue() as TestGenericClient + val genericClient = descriptor.getValue() as TestGenericClient assertTrue(genericClient.component1 is TestStringComponent) assertTrue(genericClient.component2 is TestIntComponent) } @@ -219,9 +219,11 @@ class ComponentContainerTest { class WithSetters { var isSetterCalled = false + @Suppress("unused") var tc: TestComponent? = null @Inject set(v) { isSetterCalled = true + field = v } } @@ -265,7 +267,7 @@ class ComponentContainerTest { val b = a.b assertTrue(b is B) - val c = b!!.c + val c = b.c assertTrue(c is C) } @@ -284,10 +286,13 @@ class ComponentContainerTest { val b = bc.get() val a = ac.get() + @Suppress("USELESS_IS_CHECK") assertTrue(b is B) + @Suppress("USELESS_IS_CHECK") assertTrue(b.a is A) + @Suppress("USELESS_IS_CHECK") assertTrue(a is A) - assertTrue(b.a === a) + assertSame(b.a, a) } @Test @@ -306,10 +311,11 @@ class ComponentContainerTest { useImpl() } val a = ac.get() + @Suppress("USELESS_IS_CHECK") assertTrue(a is A) - assertTrue(a === bc2.get().a) - assertTrue(a === bc1.get().a) - assertTrue(a === bc1.get()) + assertSame(a, bc2.get().a) + assertSame(a, bc1.get().a) + assertSame(a, bc1.get()) } @DefaultImplementation(impl = Impl::class) @@ -317,7 +323,7 @@ class ComponentContainerTest { class Impl : I() - class Impl2: I() + class Impl2 : I() class Use(val i: I) @@ -346,7 +352,7 @@ class ComponentContainerTest { @DefaultImplementation(impl = A::class) interface S - object A: S + object A : S class UseS(val s: S) @@ -356,6 +362,6 @@ class ComponentContainerTest { useImpl() }.get() - assertTrue(useS.s === A) + assertSame(useS.s, A) } } \ No newline at end of file diff --git a/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt b/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt index 3cba98eeb71..9759b72a851 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/kdoc/parser/KDocKnownTag.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.kdoc.parser import com.intellij.openapi.util.text.StringUtil -enum class KDocKnownTag private constructor(val isReferenceRequired: Boolean, val isSectionStart: Boolean) { +enum class KDocKnownTag(val isReferenceRequired: Boolean, val isSectionStart: Boolean) { AUTHOR(false, false), THROWS(true, false), EXCEPTION(true, false), diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt index d7ea58185db..9c81b26084a 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt @@ -38,11 +38,10 @@ import org.jetbrains.kotlin.types.KotlinType import java.util.* abstract class AbstractBinaryClassAnnotationAndConstantLoader( - storageManager: StorageManager, - private val kotlinClassFinder: KotlinClassFinder + storageManager: StorageManager, + private val kotlinClassFinder: KotlinClassFinder ) : AnnotationAndConstantLoader { - private val storage = storageManager.createMemoizedFunction> { - kotlinClass -> + private val storage = storageManager.createMemoizedFunction> { kotlinClass -> loadAnnotationsAndInitializers(kotlinClass) } @@ -51,17 +50,17 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( protected abstract fun transformToUnsignedConstant(constant: C): C? protected abstract fun loadAnnotation( - annotationClassId: ClassId, - source: SourceElement, - result: MutableList + annotationClassId: ClassId, + source: SourceElement, + result: MutableList ): KotlinJvmBinaryClass.AnnotationArgumentVisitor? protected abstract fun loadTypeAnnotation(proto: ProtoBuf.Annotation, nameResolver: NameResolver): A private fun loadAnnotationIfNotSpecial( - annotationClassId: ClassId, - source: SourceElement, - result: MutableList + annotationClassId: ClassId, + source: SourceElement, + result: MutableList ): KotlinJvmBinaryClass.AnnotationArgumentVisitor? { if (annotationClassId in SPECIAL_ANNOTATIONS) return null @@ -69,7 +68,7 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( } private fun ProtoContainer.Class.toBinaryClass(): KotlinJvmBinaryClass? = - (source as? KotlinJvmBinarySourceElement)?.binaryClass + (source as? KotlinJvmBinarySourceElement)?.binaryClass protected open fun getCachedFileContent(kotlinClass: KotlinJvmBinaryClass): ByteArray? = null @@ -138,8 +137,8 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( override fun loadEnumEntryAnnotations(container: ProtoContainer, proto: ProtoBuf.EnumEntry): List { val signature = MemberSignature.fromFieldNameAndDesc( - container.nameResolver.getString(proto.name), - ClassMapperLite.mapClass((container as ProtoContainer.Class).classId.asString()) + container.nameResolver.getString(proto.name), + ClassMapperLite.mapClass((container as ProtoContainer.Class).classId.asString()) ) return findClassAndLoadMemberAnnotations(container, signature) } @@ -169,11 +168,11 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( } override fun loadValueParameterAnnotations( - container: ProtoContainer, - callableProto: MessageLite, - kind: AnnotatedCallableKind, - parameterIndex: Int, - proto: ProtoBuf.ValueParameter + container: ProtoContainer, + callableProto: MessageLite, + kind: AnnotatedCallableKind, + parameterIndex: Int, + proto: ProtoBuf.ValueParameter ): List { val methodSignature = getCallableSignature(callableProto, container.nameResolver, container.typeTable, kind) if (methodSignature != null) { @@ -199,9 +198,9 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( } override fun loadExtensionReceiverParameterAnnotations( - container: ProtoContainer, - proto: MessageLite, - kind: AnnotatedCallableKind + container: ProtoContainer, + proto: MessageLite, + kind: AnnotatedCallableKind ): List { val methodSignature = getCallableSignature(proto, container.nameResolver, container.typeTable, kind) if (methodSignature != null) { @@ -243,7 +242,7 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( } private fun findClassWithAnnotationsAndInitializers( - container: ProtoContainer, specialCase: KotlinJvmBinaryClass? + container: ProtoContainer, specialCase: KotlinJvmBinaryClass? ): KotlinJvmBinaryClass? { return when { specialCase != null -> specialCase @@ -265,10 +264,10 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( checkNotNull(isConst) { "isConst should not be null for property (container=$container)" } if (container is ProtoContainer.Class && container.kind == ProtoBuf.Class.Kind.INTERFACE) { return kotlinClassFinder.findKotlinClass( - container.classId.createNestedClassId(Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME)) + container.classId.createNestedClassId(Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME)) ) } - if (isConst!! && container is ProtoContainer.Package) { + if (isConst && container is ProtoContainer.Package) { // Const properties in multifile classes are generated into the facade class val facadeClassName = (container.source as? JvmPackagePartSource)?.facadeClassName if (facadeClassName != null) { @@ -293,7 +292,7 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( val jvmPackagePartSource = container.source as JvmPackagePartSource return jvmPackagePartSource.knownJvmBinaryClass - ?: kotlinClassFinder.findKotlinClass(jvmPackagePartSource.classId) + ?: kotlinClassFinder.findKotlinClass(jvmPackagePartSource.classId) } return null } @@ -319,10 +318,11 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( return MemberAnnotationVisitor(signature) } - inner class AnnotationVisitorForMethod(signature: MemberSignature) : MemberAnnotationVisitor(signature), KotlinJvmBinaryClass.MethodAnnotationVisitor { + inner class AnnotationVisitorForMethod(signature: MemberSignature) : MemberAnnotationVisitor(signature), + KotlinJvmBinaryClass.MethodAnnotationVisitor { override fun visitParameterAnnotation( - index: Int, classId: ClassId, source: SourceElement + index: Int, classId: ClassId, source: SourceElement ): KotlinJvmBinaryClass.AnnotationArgumentVisitor? { val paramSignature = MemberSignature.fromMethodSignatureAndParameterIndex(signature, index) var result = memberAnnotations[paramSignature] @@ -353,12 +353,12 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( } private fun getPropertySignature( - proto: ProtoBuf.Property, - nameResolver: NameResolver, - typeTable: TypeTable, - field: Boolean = false, - synthetic: Boolean = false, - requireHasFieldFlagForField: Boolean = true + proto: ProtoBuf.Property, + nameResolver: NameResolver, + typeTable: TypeTable, + field: Boolean = false, + synthetic: Boolean = false, + requireHasFieldFlagForField: Boolean = true ): MemberSignature? { val signature = proto.getExtensionOrNull(propertySignature) ?: return null @@ -366,8 +366,7 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( val fieldSignature = JvmProtoBufUtil.getJvmFieldSignature(proto, nameResolver, typeTable, requireHasFieldFlagForField) ?: return null return MemberSignature.fromJvmMemberSignature(fieldSignature) - } - else if (synthetic && signature.hasSyntheticMethod()) { + } else if (synthetic && signature.hasSyntheticMethod()) { return MemberSignature.fromMethod(nameResolver, signature.syntheticMethod) } @@ -375,15 +374,17 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( } private fun getCallableSignature( - proto: MessageLite, - nameResolver: NameResolver, - typeTable: TypeTable, - kind: AnnotatedCallableKind, - requireHasFieldFlagForField: Boolean = false + proto: MessageLite, + nameResolver: NameResolver, + typeTable: TypeTable, + kind: AnnotatedCallableKind, + requireHasFieldFlagForField: Boolean = false ): MemberSignature? { return when { proto is ProtoBuf.Constructor -> { - MemberSignature.fromJvmMemberSignature(JvmProtoBufUtil.getJvmConstructorSignature(proto, nameResolver, typeTable) ?: return null) + MemberSignature.fromJvmMemberSignature( + JvmProtoBufUtil.getJvmConstructorSignature(proto, nameResolver, typeTable) ?: return null + ) } proto is ProtoBuf.Function -> { MemberSignature.fromJvmMemberSignature(JvmProtoBufUtil.getJvmMethodSignature(proto, nameResolver, typeTable) ?: return null) @@ -405,18 +406,18 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader( } private class Storage( - val memberAnnotations: Map>, - val propertyConstants: Map + val memberAnnotations: Map>, + val propertyConstants: Map ) private companion object { val SPECIAL_ANNOTATIONS = listOf( - JvmAnnotationNames.METADATA_FQ_NAME, - JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION, - JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION, - FqName("java.lang.annotation.Target"), - FqName("java.lang.annotation.Retention"), - FqName("java.lang.annotation.Documented") + JvmAnnotationNames.METADATA_FQ_NAME, + JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION, + JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION, + FqName("java.lang.annotation.Target"), + FqName("java.lang.annotation.Retention"), + FqName("java.lang.annotation.Documented") ).map(ClassId::topLevel).toSet() } } diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt index 9553bb7f907..0263bdac6ca 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt @@ -47,6 +47,7 @@ inline fun MutableMap.getOrPutNullable(key: K, defaultValue: () -> put(key, answer) answer } else { + @Suppress("UNCHECKED_CAST") get(key) as V } } diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/util/jvmClasspathUtil.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/util/jvmClasspathUtil.kt index 3a52c561728..978be70394d 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/util/jvmClasspathUtil.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/util/jvmClasspathUtil.kt @@ -99,6 +99,8 @@ private fun allRelatedClassLoaders(clsLoader: ClassLoader, visited: MutableSet sequenceOf(clsLoader) + arrayOfClassLoaders.asSequence().flatMap { allRelatedClassLoaders(it, visited) } } catch (e: Throwable) {