From aa135bc505053df7dde32ad1856882e320838ca1 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Mon, 26 Aug 2019 13:42:27 +0700 Subject: [PATCH] TypeAccessibilityCheckerImpl: move visibility check for `KtNamedDeclaration` to outside --- .../idea/quickfix/TypeAccessibilityCheckerImpl.kt | 3 +-- .../quickfix/expectactual/CreateExpectedFix.kt | 15 +++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/TypeAccessibilityCheckerImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/TypeAccessibilityCheckerImpl.kt index b1f68e5e4f0..c077aa3634b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/TypeAccessibilityCheckerImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/TypeAccessibilityCheckerImpl.kt @@ -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 = 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() diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt index 39f88031e7a..a2256110766 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt @@ -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(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(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) \ No newline at end of file