From 67de85aed1a97b2e7aa1bf152681273233128f3e Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 24 Mar 2015 15:58:07 +0300 Subject: [PATCH] More usages of partial body resolve --- .../idea/JetQuickDocumentationProvider.java | 6 +-- .../debugger/KotlinSourcePositionProvider.kt | 39 ++++++++++--------- .../kotlin/idea/quickfix/AutoImportFix.kt | 32 +++++++-------- .../usages/JetFunctionDefinitionUsage.java | 3 +- 4 files changed, 41 insertions(+), 39 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/JetQuickDocumentationProvider.java b/idea/src/org/jetbrains/kotlin/idea/JetQuickDocumentationProvider.java index ce6f81df26b..7cd0b4c1087 100644 --- a/idea/src/org/jetbrains/kotlin/idea/JetQuickDocumentationProvider.java +++ b/idea/src/org/jetbrains/kotlin/idea/JetQuickDocumentationProvider.java @@ -73,7 +73,7 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider if (quickNavigation) { JetReferenceExpression referenceExpression = PsiTreeUtil.getParentOfType(originalElement, JetReferenceExpression.class, false); if (referenceExpression != null) { - BindingContext context = ResolvePackage.analyze(referenceExpression); + BindingContext context = ResolvePackage.analyze(referenceExpression, BodyResolveMode.PARTIAL); DeclarationDescriptor declarationDescriptor = context.get(BindingContext.REFERENCE_TARGET, referenceExpression); if (declarationDescriptor != null) { return mixKotlinToJava(declarationDescriptor, element, originalElement); @@ -88,7 +88,7 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider } private static String renderKotlinDeclaration(JetDeclaration declaration, boolean quickNavigation) { - BindingContext context = ResolvePackage.analyze(declaration); + BindingContext context = ResolvePackage.analyze(declaration, BodyResolveMode.PARTIAL); DeclarationDescriptor declarationDescriptor = context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration); if (declarationDescriptor == null) { @@ -132,7 +132,7 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider KotlinCacheService cacheService = KotlinCacheService.getInstance(project); ResolveSessionForBodies session = cacheService.getLazyResolveSession(jetElement); ResolutionFacade facade = cacheService.getResolutionFacade(Collections.singletonList(jetElement)); - BindingContext bindingContext = facade.analyze(jetElement, BodyResolveMode.FULL); + BindingContext bindingContext = facade.analyze(jetElement, BodyResolveMode.PARTIAL); DeclarationDescriptor contextDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, context); if (contextDescriptor == null) { return null; diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinSourcePositionProvider.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinSourcePositionProvider.kt index b8f41a97da8..adcfe5e9681 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinSourcePositionProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/KotlinSourcePositionProvider.kt @@ -16,31 +16,32 @@ package org.jetbrains.kotlin.idea.debugger -import com.intellij.debugger.engine.SourcePositionProvider -import com.intellij.debugger.ui.tree.NodeDescriptor -import com.intellij.openapi.project.Project -import com.intellij.debugger.impl.DebuggerContextImpl import com.intellij.debugger.SourcePosition -import org.jetbrains.kotlin.codegen.AsmUtil -import org.jetbrains.kotlin.psi.JetClassOrObject +import com.intellij.debugger.engine.SourcePositionProvider +import com.intellij.debugger.impl.DebuggerContextImpl import com.intellij.debugger.impl.DebuggerContextUtil -import com.sun.jdi.ReferenceType -import com.intellij.psi.PsiElement -import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.resolve.jvm.JvmClassName -import com.intellij.psi.JavaPsiFacade -import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import com.sun.jdi.AbsentInformationException -import com.sun.jdi.ClassNotPreparedException +import com.intellij.debugger.impl.PositionUtil import com.intellij.debugger.ui.tree.FieldDescriptor import com.intellij.debugger.ui.tree.LocalVariableDescriptor -import com.intellij.debugger.impl.PositionUtil -import org.jetbrains.kotlin.psi.JetElement -import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.psi.JetPsiFactory +import com.intellij.debugger.ui.tree.NodeDescriptor +import com.intellij.openapi.project.Project +import com.intellij.psi.JavaPsiFacade +import com.intellij.psi.PsiElement +import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.PsiTreeUtil +import com.sun.jdi.AbsentInformationException +import com.sun.jdi.ClassNotPreparedException +import com.sun.jdi.ReferenceType +import org.jetbrains.kotlin.codegen.AsmUtil +import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.psi.JetClassOrObject +import org.jetbrains.kotlin.psi.JetElement +import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.psi.JetSimpleNameExpression +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContextUtils +import org.jetbrains.kotlin.resolve.jvm.JvmClassName +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.source.KotlinSourceElement import org.jetbrains.kotlin.resolve.source.getPsi @@ -66,7 +67,7 @@ public class KotlinSourcePositionProvider: SourcePositionProvider() { val codeFragment = JetPsiFactory(project).createExpressionCodeFragment(descriptor.getName(), contextElement) val expression = codeFragment.getContentElement() if (expression is JetSimpleNameExpression) { - val bindingContext = expression.analyze() + val bindingContext = expression.analyze(BodyResolveMode.PARTIAL) val declarationDescriptor = BindingContextUtils.extractVariableDescriptorIfAny(bindingContext, expression, false) val sourceElement = declarationDescriptor?.getSource() if (sourceElement is KotlinSourceElement) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt index ee21159087a..318ceba23a6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt @@ -26,28 +26,28 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.PsiShortNamesCache +import com.intellij.psi.util.PsiModificationTracker +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.psi.JetExpression -import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.psi.JetPsiUtil -import org.jetbrains.kotlin.psi.JetSimpleNameExpression -import org.jetbrains.kotlin.psi.psiUtil.* -import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.JetBundle import org.jetbrains.kotlin.idea.actions.JetAddImportAction import org.jetbrains.kotlin.idea.caches.JetShortNamesCache import org.jetbrains.kotlin.idea.caches.KotlinIndicesHelper -import org.jetbrains.kotlin.idea.caches.resolve.* -import org.jetbrains.kotlin.idea.project.ProjectStructureUtil -import java.util.ArrayList -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility -import org.jetbrains.kotlin.diagnostics.Errors -import com.intellij.psi.util.PsiModificationTracker +import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.completion.isVisible -import org.jetbrains.kotlin.utils.CachedValueProperty +import org.jetbrains.kotlin.idea.project.ProjectStructureUtil import org.jetbrains.kotlin.idea.util.psiClassToDescriptor.psiClassToDescriptor +import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.psi.JetPsiUtil +import org.jetbrains.kotlin.psi.JetSimpleNameExpression +import org.jetbrains.kotlin.psi.psiUtil.isImportDirectiveExpression +import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.utils.CachedValueProperty +import java.util.ArrayList /** * Check possibility and perform fix for unresolved references. @@ -119,7 +119,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction extends JetUsageIn if (!(parent instanceof JetFunctionLiteralExpression)) return false; JetFunctionLiteralExpression expression = (JetFunctionLiteralExpression) parent; - return ResolvePackage.analyze(expression).get(BindingContext.EXPECTED_EXPRESSION_TYPE, expression) != null; + return ResolvePackage.analyze(expression, BodyResolveMode.PARTIAL).get(BindingContext.EXPECTED_EXPRESSION_TYPE, expression) != null; } @NotNull