From 5ad0033d42e7186d5eb91f9cec2c2a4c7052aae4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Sun, 15 Mar 2020 20:40:34 +0100 Subject: [PATCH] Extract some cfg utilities into separate files These utilties are used not only within CFG, but from the frontend and idea as well. Therefore upon extraction of CFG into another module, these two new files will remain in 'frontend'. --- .../codegen/coroutines/CoroutineCodegen.kt | 4 +- .../cfg/ConstructorConsistencyChecker.kt | 12 ------ .../cfg/ControlFlowInformationProvider.kt | 43 ++++--------------- .../kotlin/cfg/LeakingThisDescriptor.kt | 23 ++++++++++ .../cfg/cfgContainingDeclarationUtils.kt | 35 +++++++++++++++ .../kotlin/cfg/pseudocode/pseudocodeUtils.kt | 7 +-- .../smartcasts/DataFlowValueKindUtils.kt | 20 ++++----- .../kotlin/resolve/ktDescriptorUtil.kt | 15 ++++--- .../jetbrains/kotlin/util/declarationUtil.kt | 2 +- .../jetbrains/kotlin/idea/util/psiUtils.kt | 2 +- .../idea/perf/WholeProjectLightClassTest.kt | 2 +- .../idea/inspections/CanBeValInspection.kt | 2 +- ...ReplaceCallWithBinaryOperatorInspection.kt | 2 +- .../loopToCallChain/matchAndConvert.kt | 2 +- .../idea/quickfix/AddSuspendModifierFix.kt | 4 +- .../extractableAnalysisUtil.kt | 1 + .../jetbrains/kotlin/idea/slicer/Slicer.kt | 2 +- 17 files changed, 96 insertions(+), 82 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/cfg/LeakingThisDescriptor.kt create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/cfg/cfgContainingDeclarationUtils.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt index 800d3542bdd..b3ae6dc6ac2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.codegen.coroutines import com.intellij.util.ArrayUtil import org.jetbrains.kotlin.backend.common.CodegenUtil import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype -import org.jetbrains.kotlin.cfg.index import org.jetbrains.kotlin.codegen.* import org.jetbrains.kotlin.codegen.binding.CalculatedClosure import org.jetbrains.kotlin.codegen.binding.CodegenBinding @@ -35,6 +34,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.module +import org.jetbrains.kotlin.resolve.indexOrMinusOne import org.jetbrains.kotlin.resolve.isInlineClassType import org.jetbrains.kotlin.resolve.jvm.AsmTypes import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm @@ -263,7 +263,7 @@ class CoroutineCodegenForLambda private constructor( private fun ParameterDescriptor.isUnused(): Boolean = originalSuspendFunctionDescriptor is AnonymousFunctionDescriptor && - bindingContext[BindingContext.SUSPEND_LAMBDA_PARAMETER_USED, originalSuspendFunctionDescriptor to index()] != true + bindingContext[BindingContext.SUSPEND_LAMBDA_PARAMETER_USED, originalSuspendFunctionDescriptor to indexOrMinusOne()] != true private val generateErasedCreate: Boolean = allFunctionParameters().size <= 1 diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ConstructorConsistencyChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ConstructorConsistencyChecker.kt index 62585a2aaba..3a66fd73e03 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ConstructorConsistencyChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ConstructorConsistencyChecker.kt @@ -34,18 +34,6 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.types.expressions.OperatorConventions -interface LeakingThisDescriptor { - val classOrObject: KtClassOrObject - - data class PropertyIsNull(val property: PropertyDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor - - data class NonFinalClass(val klass: ClassDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor - - data class NonFinalProperty(val property: PropertyDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor - - data class NonFinalFunction(val function: FunctionDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor -} - class ConstructorConsistencyChecker private constructor( private val classOrObject: KtClassOrObject, private val classDescriptor: ClassDescriptor, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt index 90d6504893c..07e72d2ee93 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt @@ -36,7 +36,6 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext.* import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils @@ -56,6 +55,7 @@ import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore import org.jetbrains.kotlin.resolve.checkers.PlatformDiagnosticSuppressor import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal import org.jetbrains.kotlin.resolve.descriptorUtil.module +import org.jetbrains.kotlin.resolve.indexOrMinusOne import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils.* @@ -437,31 +437,31 @@ class ControlFlowInformationProvider private constructor( val containingDeclarationDescriptor = variableDescriptor.containingDeclaration // Do not consider top-level properties if (containingDeclarationDescriptor is PackageFragmentDescriptor) return false - var parentDeclaration = getElementParentDeclaration(writeValueInstruction.element) + var parentDeclaration = writeValueInstruction.element.getElementParentDeclaration() loop@ while (true) { val context = trace.bindingContext - val parentDescriptor = getDeclarationDescriptorIncludingConstructors(context, parentDeclaration) + val parentDescriptor = parentDeclaration.getDeclarationDescriptorIncludingConstructors(context) if (parentDescriptor == containingDeclarationDescriptor) { return false } when (parentDeclaration) { is KtObjectDeclaration, is KtClassInitializer -> { // anonymous objects / initializers count here the same as its owner - parentDeclaration = getElementParentDeclaration(parentDeclaration) + parentDeclaration = parentDeclaration.getElementParentDeclaration() } is KtDeclarationWithBody -> { // If it is captured write in lambda that is called in-place, then skip it (treat as parent) val maybeEnclosingLambdaExpr = parentDeclaration.parent if (maybeEnclosingLambdaExpr is KtLambdaExpression && trace[LAMBDA_INVOCATIONS, maybeEnclosingLambdaExpr] != null) { - parentDeclaration = getElementParentDeclaration(parentDeclaration) + parentDeclaration = parentDeclaration.getElementParentDeclaration() continue@loop } if (parentDeclaration is KtFunction && parentDeclaration.isLocal) return true // miss non-local function or accessor just once - parentDeclaration = getElementParentDeclaration(parentDeclaration) - return getDeclarationDescriptorIncludingConstructors(context, parentDeclaration) != containingDeclarationDescriptor + parentDeclaration = parentDeclaration.getElementParentDeclaration() + return parentDeclaration.getDeclarationDescriptorIncludingConstructors(context) != containingDeclarationDescriptor } else -> { return true @@ -851,7 +851,7 @@ class ControlFlowInformationProvider private constructor( if (descriptor is ParameterDescriptor) { val containing = descriptor.containingDeclaration if (containing is AnonymousFunctionDescriptor && containing.isSuspend) { - trace.record(SUSPEND_LAMBDA_PARAMETER_USED, containing to descriptor.index()) + trace.record(SUSPEND_LAMBDA_PARAMETER_USED, containing to descriptor.indexOrMinusOne()) } } else if (descriptor is LocalVariableDescriptor) { val containing = descriptor.containingDeclaration @@ -1222,26 +1222,6 @@ class ControlFlowInformationProvider private constructor( ) : VariableContext(instruction, map) companion object { - - // Should return KtDeclarationWithBody, KtClassOrObject, or KtClassInitializer - fun getElementParentDeclaration(element: KtElement) = - getParentOfType(element, KtDeclarationWithBody::class.java, KtClassOrObject::class.java, KtClassInitializer::class.java) - - fun getDeclarationDescriptorIncludingConstructors(context: BindingContext, declaration: KtDeclaration?): DeclarationDescriptor? { - val descriptor = context.get( - DECLARATION_TO_DESCRIPTOR, - (declaration as? KtClassInitializer)?.containingDeclaration ?: declaration - ) - return if (descriptor is ClassDescriptor && declaration is KtClassInitializer) { - // For a class primary constructor, we cannot directly get ConstructorDescriptor by KtClassInitializer, - // so we have to do additional conversion: KtClassInitializer -> KtClassOrObject -> ClassDescriptor -> ConstructorDescriptor - descriptor.unsubstitutedPrimaryConstructor - ?: (descriptor as? ClassDescriptorWithResolutionScopes)?.scopeForInitializerResolution?.ownerDescriptor - } else { - descriptor - } - } - private fun isUsedAsResultOfLambda(usages: List): Boolean { for (usage in usages) { if (usage is ReturnValueInstruction) { @@ -1318,10 +1298,3 @@ class ControlFlowInformationProvider private constructor( || diagnosticFactory === UNUSED_CHANGED_VALUE } } - -fun ParameterDescriptor.index(): Int = - when (this) { - is ReceiverParameterDescriptor -> -1 - is ValueParameterDescriptor -> index - else -> error("expected either receiver or value parameter, but got: $this") - } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/LeakingThisDescriptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/LeakingThisDescriptor.kt new file mode 100644 index 00000000000..c69842e60a0 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/LeakingThisDescriptor.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.cfg + +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.psi.KtClassOrObject + +interface LeakingThisDescriptor { + val classOrObject: KtClassOrObject + + data class PropertyIsNull(val property: PropertyDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor + + data class NonFinalClass(val klass: ClassDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor + + data class NonFinalProperty(val property: PropertyDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor + + data class NonFinalFunction(val function: FunctionDescriptor, override val classOrObject: KtClassOrObject) : LeakingThisDescriptor +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/cfgContainingDeclarationUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/cfgContainingDeclarationUtils.kt new file mode 100644 index 00000000000..49a8412feff --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/cfgContainingDeclarationUtils.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.cfg + +import com.intellij.psi.util.PsiTreeUtil.getParentOfType +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.ClassDescriptorWithResolutionScopes +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR + +val KtElement.containingDeclarationForPseudocode: KtDeclaration? + get() = getParentOfType(this, KtDeclarationWithBody::class.java, KtClassOrObject::class.java, KtScript::class.java) + ?: getNonStrictParentOfType() + +// Should return KtDeclarationWithBody, KtClassOrObject, or KtClassInitializer +fun KtElement.getElementParentDeclaration(): KtDeclaration? = + getParentOfType(this, KtDeclarationWithBody::class.java, KtClassOrObject::class.java, KtClassInitializer::class.java) + +fun KtDeclaration?.getDeclarationDescriptorIncludingConstructors(context: BindingContext): DeclarationDescriptor? { + val descriptor = context.get(DECLARATION_TO_DESCRIPTOR, (this as? KtClassInitializer)?.containingDeclaration ?: this) + return if (descriptor is ClassDescriptor && this is KtClassInitializer) { + // For a class primary constructor, we cannot directly get ConstructorDescriptor by KtClassInitializer, + // so we have to do additional conversion: KtClassInitializer -> KtClassOrObject -> ClassDescriptor -> ConstructorDescriptor + descriptor.unsubstitutedPrimaryConstructor + ?: (descriptor as? ClassDescriptorWithResolutionScopes)?.scopeForInitializerResolution?.ownerDescriptor + } else { + descriptor + } +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/pseudocodeUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/pseudocodeUtils.kt index 2968a355c08..be9e998ce31 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/pseudocodeUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/pseudocodeUtils.kt @@ -16,9 +16,9 @@ package org.jetbrains.kotlin.cfg.pseudocode -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.cfg.Label +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.* import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.MagicKind.* @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps.ThrowExceptionInst import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.renderer.DescriptorRenderer @@ -279,10 +278,6 @@ fun Pseudocode.getElementValuesRecursively(element: KtElement): List() - fun KtDeclaration.getContainingPseudocode(context: BindingContext): Pseudocode? { val enclosingPseudocodeDeclaration = (this as? KtFunctionLiteral)?.let { it.parents.firstOrNull { it is KtDeclaration && it !is KtFunctionLiteral } as? KtDeclaration diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueKindUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueKindUtils.kt index 54388a4e277..2c1faf66851 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueKindUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueKindUtils.kt @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.resolve.calls.smartcasts -import org.jetbrains.kotlin.cfg.ControlFlowInformationProvider +import org.jetbrains.kotlin.cfg.getDeclarationDescriptorIncludingConstructors +import org.jetbrains.kotlin.cfg.getElementParentDeclaration import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* @@ -102,10 +103,8 @@ fun hasNoWritersInClosures( bindingContext: BindingContext ): Boolean { return writers.none { (_, writerDeclaration) -> - val writerDescriptor = writerDeclaration?.let { - ControlFlowInformationProvider.getDeclarationDescriptorIncludingConstructors(bindingContext, it) - } - writerDeclaration != null && variableContainingDeclaration != writerDescriptor + writerDeclaration != null && + variableContainingDeclaration != writerDeclaration.getDeclarationDescriptorIncludingConstructors(bindingContext) } } @@ -113,7 +112,7 @@ private fun isAccessedInsideClosureAfterAllWriters( writers: Set, accessElement: KtElement ): Boolean { - val parent = ControlFlowInformationProvider.getElementParentDeclaration(accessElement) ?: return false + val parent = accessElement.getElementParentDeclaration() ?: return false return writers.none { (assignment) -> !assignment.before(parent) } } @@ -126,9 +125,7 @@ private fun isAccessedBeforeAllClosureWriters( // All writers should be before access element, with the exception: // writer which is the same with declaration site does not count writers.mapNotNull { it.declaration }.forEach { writerDeclaration -> - val writerDescriptor = ControlFlowInformationProvider.getDeclarationDescriptorIncludingConstructors( - bindingContext, writerDeclaration - ) + val writerDescriptor = writerDeclaration.getDeclarationDescriptorIncludingConstructors(bindingContext) // Access is after some writerDeclaration if (variableContainingDeclaration != writerDescriptor && !accessElement.before(writerDeclaration)) { return false @@ -156,10 +153,9 @@ private fun isAccessedInsideClosure( bindingContext: BindingContext, accessElement: KtElement ): Boolean { - val parent = ControlFlowInformationProvider.getElementParentDeclaration(accessElement) + val parent = accessElement.getElementParentDeclaration() return if (parent != null) // Access is at the same declaration: not in closure, lower: in closure - ControlFlowInformationProvider.getDeclarationDescriptorIncludingConstructors(bindingContext, parent) != - variableContainingDeclaration + parent.getDeclarationDescriptorIncludingConstructors(bindingContext) != variableContainingDeclaration else false } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ktDescriptorUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ktDescriptorUtil.kt index 783059ce010..8277a97336a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ktDescriptorUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ktDescriptorUtil.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.resolve -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.types.DeferredType import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.contains @@ -28,10 +25,16 @@ fun FunctionDescriptor.isFunctionForExpectTypeFromCastFeature(): Boolean { return true } - internal fun CallableMemberDescriptor.isEffectivelyFinal(ignoreEnumClassFinality: Boolean): Boolean = modality == Modality.FINAL || containingDeclaration.let { parent -> (ignoreEnumClassFinality || !DescriptorUtils.isEnumClass(parent)) && parent is ClassDescriptor && parent.modality == Modality.FINAL - } \ No newline at end of file + } + +fun ParameterDescriptor.indexOrMinusOne(): Int = + when (this) { + is ReceiverParameterDescriptor -> -1 + is ValueParameterDescriptor -> index + else -> error("expected either receiver or value parameter, but got: $this") + } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/util/declarationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/util/declarationUtil.kt index 44e67bceeff..fec3a35e578 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/util/declarationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/util/declarationUtil.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.util -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtDeclaration diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt index 1e7b03258cd..8c05e75bd25 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt @@ -10,7 +10,7 @@ import com.intellij.psi.PsiElementVisitor import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.psi.util.parentOfType import com.intellij.psi.util.parentsOfType -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* diff --git a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectLightClassTest.kt b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectLightClassTest.kt index d205db2dd76..3e3cac996e9 100644 --- a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectLightClassTest.kt +++ b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectLightClassTest.kt @@ -10,7 +10,7 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiManager import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration import org.jetbrains.kotlin.asJava.toLightClass -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtVisitorVoid import kotlin.system.measureNanoTime diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt index 1c0a85f4559..951d4dfd1db 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeValInspection.kt @@ -23,7 +23,7 @@ import com.intellij.psi.PsiElementVisitor import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeUtil -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction import org.jetbrains.kotlin.cfg.pseudocode.instructions.InstructionWithNext import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.AccessTarget diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt index 796b9c70f91..b91ab8023d0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt @@ -21,7 +21,7 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.analysis.analyzeAsReplacement import org.jetbrains.kotlin.idea.KotlinBundle diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/matchAndConvert.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/matchAndConvert.kt index e8c28241e11..7586b94a282 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/matchAndConvert.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/matchAndConvert.kt @@ -10,7 +10,7 @@ import com.intellij.openapi.util.Ref import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeUtil -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.idea.analysis.analyzeAsReplacement import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.intentions.loopToCallChain.result.* diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt index 95c68b5586d..a5c06bf0836 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.builtins.isFunctionType -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.codegen.inline.isInlineOrInsideInline import org.jetbrains.kotlin.descriptors.ValueDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic @@ -88,4 +88,4 @@ class AddSuspendModifierFix( return AddSuspendModifierFix(variableTypeReference, declaration.name) } } -} \ No newline at end of file +} 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 3a65b2b679f..2319115638b 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 @@ -11,6 +11,7 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.refactoring.util.RefactoringUIUtil import com.intellij.util.containers.MultiMap import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.cfg.pseudocode.* import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction import org.jetbrains.kotlin.cfg.pseudocode.instructions.InstructionVisitorWithResult diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index b62a7bf5dda..8ca75d6ce99 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -18,7 +18,7 @@ import com.intellij.util.Processor import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.cfg.pseudocode.PseudoValue import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode -import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.cfg.pseudocode.getContainingPseudocode import org.jetbrains.kotlin.cfg.pseudocode.instructions.KtElementInstruction import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.*