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.*