From ed597e2da5548faa2f7a9a4afcc490fa9e85f4bd Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 7 Jun 2018 20:15:48 +0300 Subject: [PATCH] Extract Function: Make compliant with PublicApiImplicitTypeInspection --- .../jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt | 13 ++++++++ .../ChangeVisibilityModifierIntention.kt | 13 +------- .../extractableAnalysisUtil.kt | 8 +++-- .../extractionEngine/extractorUtil.kt | 30 ++++++++++++++++++- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt index d6e64f5f87d..59dda1adc56 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt @@ -23,6 +23,8 @@ import com.intellij.psi.* import com.intellij.psi.stubs.StubElement import com.intellij.psi.tree.TokenSet import org.jetbrains.kotlin.KtNodeTypes +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.lexer.KotlinLexer import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens @@ -33,6 +35,7 @@ import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub import org.jetbrains.kotlin.types.expressions.OperatorConventions +import java.lang.IllegalArgumentException import java.util.* // NOTE: in this file we collect only Kotlin-specific methods working with PSI and not modifying it @@ -593,4 +596,14 @@ fun isTopLevelInFileOrScript(element: PsiElement): Boolean { is KtBlockExpression -> parent.parent is KtScript else -> false } +} + +fun KtModifierKeywordToken.toVisibility(): Visibility { + return when (this) { + KtTokens.PUBLIC_KEYWORD -> Visibilities.PUBLIC + KtTokens.PRIVATE_KEYWORD -> Visibilities.PRIVATE + KtTokens.PROTECTED_KEYWORD -> Visibilities.PROTECTED + KtTokens.INTERNAL_KEYWORD -> Visibilities.INTERNAL + else -> throw IllegalArgumentException("Unknown visibility modifier:$this") + } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt index 04d92dcbef6..17ec0facd78 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt @@ -22,7 +22,6 @@ import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.idea.core.canBePrivate import org.jetbrains.kotlin.idea.core.canBeProtected import org.jetbrains.kotlin.idea.core.setVisibility @@ -31,9 +30,9 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.toVisibility import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType -import java.lang.IllegalArgumentException open class ChangeVisibilityModifierIntention protected constructor( val modifier: KtModifierKeywordToken @@ -88,16 +87,6 @@ open class ChangeVisibilityModifierIntention protected constructor( if (element is KtPropertyAccessor) element.modifierList?.nextSibling?.replace(KtPsiFactory(element).createWhiteSpace()) } - private fun KtModifierKeywordToken.toVisibility(): Visibility { - return when (this) { - KtTokens.PUBLIC_KEYWORD -> Visibilities.PUBLIC - KtTokens.PRIVATE_KEYWORD -> Visibilities.PRIVATE - KtTokens.PROTECTED_KEYWORD -> Visibilities.PROTECTED - KtTokens.INTERNAL_KEYWORD -> Visibilities.INTERNAL - else -> throw IllegalArgumentException("Unknown visibility modifier:$this") - } - } - private fun noModifierYetApplicabilityRange(declaration: KtDeclaration): TextRange? { return when (declaration) { is KtNamedFunction -> declaration.funKeyword?.textRange diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index b5e609fac16..343509b2a6e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -607,9 +607,13 @@ private fun ExtractionData.getLocalInstructions(pseudocode: Pseudocode): List true + inspection.reportInternal && visibility == Visibilities.INTERNAL -> true + inspection.reportPrivate && visibility == Visibilities.PRIVATE -> true + else -> false + } + } + fun adjustDeclarationBody(declaration: KtNamedDeclaration) { val body = declaration.getGeneratedBody() @@ -554,7 +582,7 @@ fun ExtractionGeneratorConfiguration.generateDeclaration( val bodyOwner = body.parent as KtDeclarationWithBody val useExpressionBodyInspection = UseExpressionBodyInspection() if (bodyExpression != null && !bodyExpression.isMultiLine() && useExpressionBodyInspection.isActiveFor(bodyOwner)) { - useExpressionBodyInspection.simplify(bodyOwner, !descriptor.returnType.isFlexible()) + useExpressionBodyInspection.simplify(bodyOwner, !useExplicitReturnType()) } } }