From 4169a78e6facef47f7e32222ce3f1a6a5c337877 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 1 Jun 2015 19:49:10 +0300 Subject: [PATCH] Removing unnecessary uses of analyzeFully --- .../idea/caches/resolve/resolutionApi.kt | 1 + .../idea/core/quickfix/QuickFixUtil.java | 11 ++--------- .../JetTypeDeclarationProvider.java | 3 +-- .../KotlinRuntimeTypeCastSurrounder.kt | 18 ++++++------------ .../hierarchy/KotlinTypeHierarchyProvider.java | 2 +- .../MoveLambdaInsideParenthesesIntention.kt | 3 ++- .../SpecifyTypeExplicitlyIntention.kt | 4 ++-- .../idea/quickfix/AddNameToArgumentFix.java | 2 +- .../idea/quickfix/CastExpressionFix.java | 6 ++---- .../quickfix/ChangeFunctionReturnTypeFix.java | 14 ++++++-------- .../quickfix/ChangeFunctionSignatureFix.java | 7 ++----- .../ChangeMemberFunctionSignatureFix.java | 5 +---- .../idea/quickfix/ChangeVariableTypeFix.java | 17 +++++------------ .../quickfix/ChangeVisibilityModifierFix.java | 2 +- .../quickfix/InsertDelegationCallQuickfix.kt | 8 ++++---- .../quickfix/MapPlatformClassToKotlinFix.java | 5 +---- ...ameParameterToMatchOverriddenMethodFix.java | 2 +- 17 files changed, 39 insertions(+), 71 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt index 0bc9a41cc3a..2af2b6ef6d6 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt @@ -44,6 +44,7 @@ public fun JetFile.resolveImportReference(fqName: FqName, isDefaultImport: Boole // analyze - see ResolveSessionForBodies, ResolveElementCache // analyzeFully - see KotlinResolveCache, KotlinResolveDataProvider // In the future these two approaches should be unified +@jvmOverloads public fun JetElement.analyze(bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): BindingContext { return getResolutionFacade().analyze(this, bodyResolveMode) } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java index cbfc9c2452b..86cd3e61ab4 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.renderer.DescriptorRenderer; -import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage; @@ -62,8 +61,7 @@ public class QuickFixUtil { public static JetType getDeclarationReturnType(JetNamedDeclaration declaration) { PsiFile file = declaration.getContainingFile(); if (!(file instanceof JetFile)) return null; - BindingContext bindingContext = ResolvePackage.analyzeFully((JetFile) file); - DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration); + DeclarationDescriptor descriptor = ResolvePackage.resolveToDescriptor(declaration); if (!(descriptor instanceof CallableDescriptor)) return null; JetType type = ((CallableDescriptor) descriptor).getReturnType(); if (type instanceof DeferredType) { @@ -73,12 +71,7 @@ public class QuickFixUtil { } @Nullable - public static JetType findLowerBoundOfOverriddenCallablesReturnTypes(BindingContext context, JetDeclaration callable) { - DeclarationDescriptor descriptor = context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, callable); - if (!(descriptor instanceof CallableDescriptor)) { - return null; - } - + public static JetType findLowerBoundOfOverriddenCallablesReturnTypes(@NotNull CallableDescriptor descriptor) { JetType matchingReturnType = null; for (CallableDescriptor overriddenDescriptor : ((CallableDescriptor) descriptor).getOverriddenDescriptors()) { JetType overriddenReturnType = overriddenDescriptor.getReturnType(); diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/JetTypeDeclarationProvider.java b/idea/src/org/jetbrains/kotlin/idea/codeInsight/JetTypeDeclarationProvider.java index 1540574a657..9b25c78abf3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/JetTypeDeclarationProvider.java +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/JetTypeDeclarationProvider.java @@ -32,8 +32,7 @@ public class JetTypeDeclarationProvider implements TypeDeclarationProvider { @Override public PsiElement[] getSymbolTypeDeclarations(PsiElement symbol) { if (symbol instanceof JetElement && symbol.getContainingFile() instanceof JetFile) { - BindingContext bindingContext = - ResolvePackage.analyzeFully((JetFile) symbol.getContainingFile()); + BindingContext bindingContext = ResolvePackage.analyze((JetElement)symbol); DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, symbol); if (descriptor instanceof CallableDescriptor) { JetType type = ((CallableDescriptor) descriptor).getReturnType(); diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/expression/KotlinRuntimeTypeCastSurrounder.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/expression/KotlinRuntimeTypeCastSurrounder.kt index 8998edd773f..11251562acb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/expression/KotlinRuntimeTypeCastSurrounder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/expression/KotlinRuntimeTypeCastSurrounder.kt @@ -29,20 +29,16 @@ import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.util.ProgressWindowWithNotification import com.intellij.openapi.project.Project import com.intellij.openapi.util.TextRange -import org.jetbrains.kotlin.psi.JetExpression -import org.jetbrains.kotlin.psi.JetCodeFragment +import org.jetbrains.kotlin.idea.JetBundle +import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinRuntimeTypeEvaluator -import org.jetbrains.kotlin.psi.JetPsiFactory -import org.jetbrains.kotlin.psi.JetBinaryExpressionWithTypeRHS import org.jetbrains.kotlin.idea.util.ShortenReferences -import org.jetbrains.kotlin.psi.JetParenthesizedExpression -import org.jetbrains.kotlin.types.JetType +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.checker.JetTypeChecker -import org.jetbrains.kotlin.idea.JetBundle public class KotlinRuntimeTypeCastSurrounder: KotlinExpressionSurrounder() { @@ -51,9 +47,7 @@ public class KotlinRuntimeTypeCastSurrounder: KotlinExpressionSurrounder() { val file = expression.getContainingFile() if (file !is JetCodeFragment) return false - val context = file.analyzeFully() - val type = context.getType(expression) - if (type == null) return false + val type = expression.analyze(BodyResolveMode.PARTIAL).getType(expression) ?: return false return TypeUtils.canHaveSubtypes(JetTypeChecker.DEFAULT, type) } diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.java b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.java index f802bbc221c..6325264b109 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.java @@ -69,7 +69,7 @@ public class KotlinTypeHierarchyProvider extends JavaTypeHierarchyProvider { else if (target instanceof JetNamedFunction) { JetNamedFunction function = (JetNamedFunction) target; String functionName = function.getName(); - FunctionDescriptor functionDescriptor = ResolvePackage.analyzeFully(function) + FunctionDescriptor functionDescriptor = ResolvePackage.analyze(function) .get(BindingContext.FUNCTION, target); if (functionDescriptor != null) { JetType type = functionDescriptor.getReturnType(); diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaInsideParenthesesIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaInsideParenthesesIntention.kt index 154c3f5ddac..23d5bb08d74 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaInsideParenthesesIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaInsideParenthesesIntention.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.codeInsight.intention.LowPriorityAction import com.intellij.openapi.editor.Editor +import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.idea.core.moveInsideParentheses import org.jetbrains.kotlin.psi.JetFunctionLiteralArgument @@ -29,7 +30,7 @@ public class MoveLambdaInsideParenthesesIntention : JetSelfTargetingIntention { JetCallElement callElement = PsiTreeUtil.getParentOfType(argument, JetCallElement.class); assert callElement != null : "The argument has to be inside a function or constructor call"; - BindingContext context = ResolvePackage.analyzeFully(argument.getContainingJetFile()); + BindingContext context = ResolvePackage.analyze(argument); ResolvedCall resolvedCall = CallUtilPackage.getResolvedCall(callElement, context); if (resolvedCall == null) return Collections.emptyList(); diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/CastExpressionFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/CastExpressionFix.java index 39b1e5a27c9..7662011a1e6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/CastExpressionFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/CastExpressionFix.java @@ -28,10 +28,9 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters2; import org.jetbrains.kotlin.diagnostics.Errors; import org.jetbrains.kotlin.idea.JetBundle; import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage; -import org.jetbrains.kotlin.idea.util.ShortenReferences; import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers; +import org.jetbrains.kotlin.idea.util.ShortenReferences; import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.checker.JetTypeChecker; @@ -64,8 +63,7 @@ public class CastExpressionFix extends JetIntentionAction { @Override public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { if (!super.isAvailable(project, editor, file)) return false; - BindingContext context = ResolvePackage.analyzeFully((JetFile) file); - JetType expressionType = context.getType(element); + JetType expressionType = ResolvePackage.analyze(element).getType(element); return expressionType != null && JetTypeChecker.DEFAULT.isSubtypeOf(type, expressionType); } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionReturnTypeFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionReturnTypeFix.java index 03033b9d5b2..15b396e067a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionReturnTypeFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionReturnTypeFix.java @@ -27,7 +27,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.FunctionDescriptor; -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor; import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.idea.JetBundle; import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage; @@ -138,7 +137,7 @@ public class ChangeFunctionReturnTypeFix extends JetIntentionAction @Override public IntentionAction createAction(@NotNull Diagnostic diagnostic) { JetMultiDeclarationEntry entry = getMultiDeclarationEntryThatTypeMismatchComponentFunction(diagnostic); - BindingContext context = ResolvePackage.analyzeFully((JetFile) entry.getContainingFile().getContainingFile()); + BindingContext context = ResolvePackage.analyze(entry); ResolvedCall resolvedCall = context.get(BindingContext.COMPONENT_RESOLVED_CALL, entry); if (resolvedCall == null) return null; JetFunction componentFunction = (JetFunction) DescriptorToSourceUtils @@ -160,7 +159,7 @@ public class ChangeFunctionReturnTypeFix extends JetIntentionAction public IntentionAction createAction(@NotNull Diagnostic diagnostic) { JetExpression expression = QuickFixUtil.getParentElementOfType(diagnostic, JetExpression.class); assert expression != null : "HAS_NEXT_FUNCTION_TYPE_MISMATCH reported on element that is not within any expression"; - BindingContext context = ResolvePackage.analyzeFully(expression.getContainingJetFile()); + BindingContext context = ResolvePackage.analyze(expression); ResolvedCall resolvedCall = context.get(BindingContext.LOOP_RANGE_HAS_NEXT_RESOLVED_CALL, expression); if (resolvedCall == null) return null; JetFunction hasNextFunction = (JetFunction) DescriptorToSourceUtils @@ -181,7 +180,7 @@ public class ChangeFunctionReturnTypeFix extends JetIntentionAction public IntentionAction createAction(@NotNull Diagnostic diagnostic) { JetBinaryExpression expression = QuickFixUtil.getParentElementOfType(diagnostic, JetBinaryExpression.class); assert expression != null : "COMPARE_TO_TYPE_MISMATCH reported on element that is not within any expression"; - BindingContext context = ResolvePackage.analyzeFully(expression.getContainingJetFile()); + BindingContext context = ResolvePackage.analyze(expression); ResolvedCall resolvedCall = CallUtilPackage.getResolvedCall(expression, context); if (resolvedCall == null) return null; PsiElement compareTo = DescriptorToSourceUtils.descriptorToDeclaration(resolvedCall.getCandidateDescriptor()); @@ -201,14 +200,13 @@ public class ChangeFunctionReturnTypeFix extends JetIntentionAction JetFunction function = QuickFixUtil.getParentElementOfType(diagnostic, JetFunction.class); if (function != null) { - BindingContext context = ResolvePackage.analyzeFully(function); - JetType matchingReturnType = QuickFixUtil.findLowerBoundOfOverriddenCallablesReturnTypes(context, function); + FunctionDescriptor descriptor = (FunctionDescriptor)ResolvePackage.resolveToDescriptor(function); + + JetType matchingReturnType = QuickFixUtil.findLowerBoundOfOverriddenCallablesReturnTypes(descriptor); if (matchingReturnType != null) { actions.add(new ChangeFunctionReturnTypeFix(function, matchingReturnType)); } - SimpleFunctionDescriptor descriptor = context.get(BindingContext.FUNCTION, function); - if (descriptor == null) return actions; JetType functionType = descriptor.getReturnType(); if (functionType == null) return actions; diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java index e5ba5ce082e..5b95dbe42cd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java @@ -172,9 +172,7 @@ public abstract class ChangeFunctionSignatureFix extends JetIntentionAction> diagnosticWithParameters = EXPECTED_PARAMETERS_NUMBER_MISMATCH.cast(diagnostic); JetFunction functionLiteral = diagnosticWithParameters.getPsiElement(); - BindingContext bindingContext = - ResolvePackage.analyzeFully(functionLiteral.getContainingJetFile()); - DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, functionLiteral); + DeclarationDescriptor descriptor = ResolvePackage.resolveToDescriptor(functionLiteral); if (descriptor instanceof FunctionDescriptor && functionLiteral instanceof JetFunctionLiteral) { return new ChangeFunctionLiteralSignatureFix((JetFunctionLiteral) functionLiteral, (FunctionDescriptor) descriptor, @@ -227,8 +225,6 @@ public abstract class ChangeFunctionSignatureFix extends JetIntentionAction arguments = callElement.getValueArguments(); if (arguments.size() > parameters.size()) { + BindingContext bindingContext = ResolvePackage.analyze(callElement); boolean hasTypeMismatches = hasTypeMismatches(parameters, arguments, bindingContext); return new AddFunctionParametersFix(callElement, functionDescriptor, hasTypeMismatches); } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.java index 769496e97d7..1498f60d09a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.java @@ -48,7 +48,6 @@ import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.renderer.DescriptorRenderer; import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder; import org.jetbrains.kotlin.renderer.NameShortness; -import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.FunctionDescriptorUtil; import org.jetbrains.kotlin.resolve.VisibilityUtil; import org.jetbrains.kotlin.resolve.scopes.JetScope; @@ -118,9 +117,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction superFunctions = getPossibleSuperFunctionsDescriptors(functionDescriptor); final Map possibleSignatures = Maps.newHashMap(); for (FunctionDescriptor superFunction : superFunctions) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.java index 7dea4ca84c7..a6241f03276 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.java @@ -36,7 +36,6 @@ import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers; import org.jetbrains.kotlin.idea.util.ShortenReferences; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; @@ -117,7 +116,7 @@ public class ChangeVariableTypeFix extends JetIntentionAction resolvedCall = context.get(BindingContext.COMPONENT_RESOLVED_CALL, entry); if (resolvedCall == null) return null; JetFunction componentFunction = (JetFunction) DescriptorToSourceUtils @@ -139,18 +138,12 @@ public class ChangeVariableTypeFix extends JetIntentionAction