TypeAccessibilityChecker: fix incorrectTypes for descriptor
This commit is contained in:
+18
-12
@@ -32,26 +32,27 @@ class TypeAccessibilityCheckerImpl(
|
|||||||
override var existingFqNames: Collection<String> = emptyList()
|
override var existingFqNames: Collection<String> = emptyList()
|
||||||
) : TypeAccessibilityChecker {
|
) : TypeAccessibilityChecker {
|
||||||
private val scope by lazy { GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(targetModule, targetModule.isTestModule) }
|
private val scope by lazy { GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(targetModule, targetModule.isTestModule) }
|
||||||
private val builtInsModule by lazy { targetModule.toDescriptor() }
|
private var builtInsModule: ModuleDescriptor? = targetModule.toDescriptor()
|
||||||
|
get() = if (field?.isValid != false) field
|
||||||
|
else {
|
||||||
|
field = targetModule.toDescriptor()
|
||||||
|
field
|
||||||
|
}
|
||||||
|
|
||||||
override fun incorrectTypes(declaration: KtNamedDeclaration): Collection<FqName?> =
|
override fun incorrectTypes(declaration: KtNamedDeclaration): Collection<FqName?> = declaration.descriptor?.let {
|
||||||
declaration.descriptor?.let { incorrectTypesInSequence(it.collectAllTypes(), false) } ?: listOf(null)
|
incorrectTypesInSequence(it.collectAllTypes(), false)
|
||||||
|
} ?: listOf(null)
|
||||||
|
|
||||||
override fun incorrectTypes(descriptor: DeclarationDescriptor): Collection<FqName?> =
|
override fun incorrectTypes(descriptor: DeclarationDescriptor): Collection<FqName?> = incorrectTypesInDescriptor(descriptor, false)
|
||||||
incorrectTypesInSequence(descriptor.collectAllTypes(), false)
|
|
||||||
|
|
||||||
override fun incorrectTypes(type: KotlinType): Collection<FqName?> = incorrectTypesInSequence(type.collectAllTypes(), false)
|
override fun incorrectTypes(type: KotlinType): Collection<FqName?> = incorrectTypesInSequence(type.collectAllTypes(), false)
|
||||||
|
|
||||||
override fun checkAccessibility(declaration: KtNamedDeclaration): Boolean =
|
override fun checkAccessibility(declaration: KtNamedDeclaration): Boolean =
|
||||||
!declaration.hasPrivateModifier() && declaration.descriptor?.let { checkAccessibility(it) } == true
|
!declaration.hasPrivateModifier() && declaration.descriptor?.let { checkAccessibility(it) } == true
|
||||||
|
|
||||||
override fun checkAccessibility(descriptor: DeclarationDescriptor): Boolean =
|
override fun checkAccessibility(descriptor: DeclarationDescriptor): Boolean = incorrectTypesInDescriptor(descriptor, true).isEmpty()
|
||||||
runInContext(descriptor.additionalClasses(existingFqNames)) {
|
|
||||||
incorrectTypesInSequence(descriptor.collectAllTypes(), true).isEmpty()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun checkAccessibility(type: KotlinType): Boolean =
|
override fun checkAccessibility(type: KotlinType): Boolean = incorrectTypesInSequence(type.collectAllTypes(), true).isEmpty()
|
||||||
incorrectTypesInSequence(type.collectAllTypes(), true).isEmpty()
|
|
||||||
|
|
||||||
override fun <R> runInContext(fqNames: Collection<String>, block: TypeAccessibilityChecker.() -> R): R {
|
override fun <R> runInContext(fqNames: Collection<String>, block: TypeAccessibilityChecker.() -> R): R {
|
||||||
val oldValue = existingFqNames
|
val oldValue = existingFqNames
|
||||||
@@ -69,11 +70,16 @@ class TypeAccessibilityCheckerImpl(
|
|||||||
} else sequence.filter { !it.canFindClassInModule() }.toList()
|
} else sequence.filter { !it.canFindClassInModule() }.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun incorrectTypesInDescriptor(descriptor: DeclarationDescriptor, lazy: Boolean) =
|
||||||
|
runInContext(descriptor.additionalClasses(existingFqNames)) {
|
||||||
|
incorrectTypesInSequence(descriptor.collectAllTypes(), lazy)
|
||||||
|
}
|
||||||
|
|
||||||
private fun FqName?.canFindClassInModule(): Boolean {
|
private fun FqName?.canFindClassInModule(): Boolean {
|
||||||
val name = this?.asString() ?: return false
|
val name = this?.asString() ?: return false
|
||||||
return name in existingFqNames
|
return name in existingFqNames
|
||||||
|| builtInsModule?.resolveClassByFqName(this, NoLookupLocation.FROM_BUILTINS) != null
|
|
||||||
|| KotlinFullClassNameIndex.getInstance()[name, project, scope].isNotEmpty()
|
|| KotlinFullClassNameIndex.getInstance()[name, project, scope].isNotEmpty()
|
||||||
|
|| builtInsModule?.resolveClassByFqName(this, NoLookupLocation.FROM_BUILTINS) != null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user