Minor: Fix a few compilation warnings in compiler and compiler tests, fix formatting
This commit is contained in:
@@ -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 <T> create(request: Class<T>): 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"
|
||||
|
||||
+30
-24
@@ -42,7 +42,7 @@ class ComponentContainerTest {
|
||||
|
||||
val descriptor = container.resolve<TestComponentInterface>()
|
||||
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<TestClientComponent>()
|
||||
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<TestClientComponent>()
|
||||
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<TestClientComponentInterface>()
|
||||
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<TestAdhocComponent2>()
|
||||
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<TestClientComponent>()
|
||||
useImpl<TestClientComponent2>()
|
||||
useImpl<TestIterableComponent>()
|
||||
}.use {
|
||||
val descriptor = it.resolve<TestIterableComponent>()
|
||||
}.use { container ->
|
||||
val descriptor = container.resolve<TestIterableComponent>()
|
||||
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<TestClientComponent2>()
|
||||
useImpl<TestStringComponent>()
|
||||
useImpl<JavaTestComponents>()
|
||||
}.use {
|
||||
val descriptor = it.resolve<JavaTestComponents>()
|
||||
}.use { container ->
|
||||
val descriptor = container.resolve<JavaTestComponents>()
|
||||
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<TestGenericClient>()
|
||||
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<B>()
|
||||
|
||||
val a = ac.get<A>()
|
||||
@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<B>()
|
||||
}
|
||||
val a = ac.get<A>()
|
||||
@Suppress("USELESS_IS_CHECK")
|
||||
assertTrue(a is A)
|
||||
assertTrue(a === bc2.get<B>().a)
|
||||
assertTrue(a === bc1.get<B>().a)
|
||||
assertTrue(a === bc1.get<A>())
|
||||
assertSame(a, bc2.get<B>().a)
|
||||
assertSame(a, bc1.get<B>().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<UseS>()
|
||||
}.get<UseS>()
|
||||
|
||||
assertTrue(useS.s === A)
|
||||
assertSame(useS.s, A)
|
||||
}
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
+50
-49
@@ -38,11 +38,10 @@ import org.jetbrains.kotlin.types.KotlinType
|
||||
import java.util.*
|
||||
|
||||
abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any>(
|
||||
storageManager: StorageManager,
|
||||
private val kotlinClassFinder: KotlinClassFinder
|
||||
storageManager: StorageManager,
|
||||
private val kotlinClassFinder: KotlinClassFinder
|
||||
) : AnnotationAndConstantLoader<A, C> {
|
||||
private val storage = storageManager.createMemoizedFunction<KotlinJvmBinaryClass, Storage<A, C>> {
|
||||
kotlinClass ->
|
||||
private val storage = storageManager.createMemoizedFunction<KotlinJvmBinaryClass, Storage<A, C>> { kotlinClass ->
|
||||
loadAnnotationsAndInitializers(kotlinClass)
|
||||
}
|
||||
|
||||
@@ -51,17 +50,17 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any>(
|
||||
protected abstract fun transformToUnsignedConstant(constant: C): C?
|
||||
|
||||
protected abstract fun loadAnnotation(
|
||||
annotationClassId: ClassId,
|
||||
source: SourceElement,
|
||||
result: MutableList<A>
|
||||
annotationClassId: ClassId,
|
||||
source: SourceElement,
|
||||
result: MutableList<A>
|
||||
): KotlinJvmBinaryClass.AnnotationArgumentVisitor?
|
||||
|
||||
protected abstract fun loadTypeAnnotation(proto: ProtoBuf.Annotation, nameResolver: NameResolver): A
|
||||
|
||||
private fun loadAnnotationIfNotSpecial(
|
||||
annotationClassId: ClassId,
|
||||
source: SourceElement,
|
||||
result: MutableList<A>
|
||||
annotationClassId: ClassId,
|
||||
source: SourceElement,
|
||||
result: MutableList<A>
|
||||
): KotlinJvmBinaryClass.AnnotationArgumentVisitor? {
|
||||
if (annotationClassId in SPECIAL_ANNOTATIONS) return null
|
||||
|
||||
@@ -69,7 +68,7 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any>(
|
||||
}
|
||||
|
||||
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<A : Any, C : Any>(
|
||||
|
||||
override fun loadEnumEntryAnnotations(container: ProtoContainer, proto: ProtoBuf.EnumEntry): List<A> {
|
||||
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<A : Any, C : Any>(
|
||||
}
|
||||
|
||||
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<A> {
|
||||
val methodSignature = getCallableSignature(callableProto, container.nameResolver, container.typeTable, kind)
|
||||
if (methodSignature != null) {
|
||||
@@ -199,9 +198,9 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any>(
|
||||
}
|
||||
|
||||
override fun loadExtensionReceiverParameterAnnotations(
|
||||
container: ProtoContainer,
|
||||
proto: MessageLite,
|
||||
kind: AnnotatedCallableKind
|
||||
container: ProtoContainer,
|
||||
proto: MessageLite,
|
||||
kind: AnnotatedCallableKind
|
||||
): List<A> {
|
||||
val methodSignature = getCallableSignature(proto, container.nameResolver, container.typeTable, kind)
|
||||
if (methodSignature != null) {
|
||||
@@ -243,7 +242,7 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any>(
|
||||
}
|
||||
|
||||
private fun findClassWithAnnotationsAndInitializers(
|
||||
container: ProtoContainer, specialCase: KotlinJvmBinaryClass?
|
||||
container: ProtoContainer, specialCase: KotlinJvmBinaryClass?
|
||||
): KotlinJvmBinaryClass? {
|
||||
return when {
|
||||
specialCase != null -> specialCase
|
||||
@@ -265,10 +264,10 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any>(
|
||||
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<A : Any, C : Any>(
|
||||
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<A : Any, C : Any>(
|
||||
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<A : Any, C : Any>(
|
||||
}
|
||||
|
||||
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<A : Any, C : Any>(
|
||||
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<A : Any, C : Any>(
|
||||
}
|
||||
|
||||
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<A : Any, C : Any>(
|
||||
}
|
||||
|
||||
private class Storage<out A, out C>(
|
||||
val memberAnnotations: Map<MemberSignature, List<A>>,
|
||||
val propertyConstants: Map<MemberSignature, C>
|
||||
val memberAnnotations: Map<MemberSignature, List<A>>,
|
||||
val propertyConstants: Map<MemberSignature, C>
|
||||
)
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ inline fun <K, V> MutableMap<K, V>.getOrPutNullable(key: K, defaultValue: () ->
|
||||
put(key, answer)
|
||||
answer
|
||||
} else {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
get(key) as V
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +99,8 @@ private fun allRelatedClassLoaders(clsLoader: ClassLoader, visited: MutableSet<C
|
||||
return try {
|
||||
val field = clsLoader.javaClass.getDeclaredField("myParents") // com.intellij.ide.plugins.cl.PluginClassLoader
|
||||
field.isAccessible = true
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val arrayOfClassLoaders = field.get(clsLoader) as Array<ClassLoader>
|
||||
sequenceOf(clsLoader) + arrayOfClassLoaders.asSequence().flatMap { allRelatedClassLoaders(it, visited) }
|
||||
} catch (e: Throwable) {
|
||||
|
||||
Reference in New Issue
Block a user