TypeAccessibilityCheckerImpl: move visibility check for KtNamedDeclaration to outside

This commit is contained in:
Dmitry Gridin
2019-08-26 13:42:27 +07:00
parent eaa28fd4ed
commit aa135bc505
2 changed files with 10 additions and 8 deletions
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtTypeParameter
@@ -48,7 +47,7 @@ class TypeAccessibilityCheckerImpl(
override fun incorrectTypes(type: KotlinType): Collection<FqName?> = incorrectTypesInSequence(type.collectAllTypes(), false)
override fun checkAccessibility(declaration: KtNamedDeclaration): Boolean =
!declaration.hasModifier(KtTokens.PRIVATE_KEYWORD) && declaration.descriptor?.let { checkAccessibility(it) } == true
declaration.descriptor?.let { checkAccessibility(it) } == true
override fun checkAccessibility(descriptor: DeclarationDescriptor): Boolean = incorrectTypesInDescriptor(descriptor, true).isEmpty()
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.quickfix.TypeAccessibilityChecker
import org.jetbrains.kotlin.idea.refactoring.getExpressionShortText
import org.jetbrains.kotlin.idea.refactoring.introduce.showErrorHint
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.idea.util.hasPrivateModifier
import org.jetbrains.kotlin.idea.util.liftToExpected
import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.lexer.KtTokens
@@ -117,13 +118,13 @@ class CreateExpectedClassFix(
) : CreateExpectedFix<KtClassOrObject>(klass, outerExpectedClass, commonModule, block@{ project, checker, element ->
val originalElements = element.collectDeclarations(withSelf = false).toList()
val existingClasses = checker.findAndApplyExistingClasses(originalElements + klass)
if (!checker.checkAccessibility(element)) {
if (!checker.isCorrectAndHaveNonPrivate(element)) {
showUnknownTypesError(element)
return@block null
}
val (members, declarationsWithNonExistentClasses) = originalElements.partition {
checker.checkAccessibility(it)
checker.isCorrectAndHaveNonPrivate(it)
}
if (!showUnknownTypesDialog(project, declarationsWithNonExistentClasses)) return@block null
@@ -143,13 +144,13 @@ class CreateExpectedClassFix(
val selectedClasses = checker.findAndApplyExistingClasses(selectedElements)
val resultDeclarations = if (selectedClasses != existingClasses) {
if (!checker.checkAccessibility(element)) {
if (!checker.isCorrectAndHaveNonPrivate(element)) {
showUnknownTypesError(element)
return@block null
}
val (resultDeclarations, withErrors) = selectedElements.partition {
checker.checkAccessibility(it)
checker.isCorrectAndHaveNonPrivate(it)
}
if (!showUnknownTypesDialog(project, withErrors)) return@block null
resultDeclarations
@@ -168,7 +169,7 @@ private tailrec fun TypeAccessibilityChecker.findAndApplyExistingClasses(element
val existingNames = classes.mapNotNull { it.fqName?.asString() }.toHashSet()
existingFqNames = existingNames
val newExistingClasses = classes.filter { checkAccessibility(it) }
val newExistingClasses = classes.filter { isCorrectAndHaveNonPrivate(it) }
return if (classes.size == newExistingClasses.size) existingNames
else findAndApplyExistingClasses(newExistingClasses)
}
@@ -296,7 +297,7 @@ class CreateExpectedCallableMemberFix(
targetExpectedClass: KtClassOrObject?,
commonModule: Module
) : CreateExpectedFix<KtNamedDeclaration>(declaration, targetExpectedClass, commonModule, block@{ project, checker, element ->
if (!checker.checkAccessibility(element)) {
if (!checker.isCorrectAndHaveNonPrivate(element)) {
showUnknownTypesError(element)
return@block null
}
@@ -314,3 +315,5 @@ class CreateExpectedCallableMemberFix(
}
})
private fun TypeAccessibilityChecker.isCorrectAndHaveNonPrivate(declaration: KtNamedDeclaration): Boolean =
!declaration.hasPrivateModifier() && checkAccessibility(declaration)