TypeAccessibilityCheckerImpl: move visibility check for KtNamedDeclaration to outside
This commit is contained in:
+1
-2
@@ -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)
|
||||
Reference in New Issue
Block a user