More usages of partial body resolve

This commit is contained in:
Valentin Kipyatkov
2015-03-24 15:58:07 +03:00
parent 4d2a34cc4e
commit 67de85aed1
4 changed files with 41 additions and 39 deletions
@@ -73,7 +73,7 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider
if (quickNavigation) { if (quickNavigation) {
JetReferenceExpression referenceExpression = PsiTreeUtil.getParentOfType(originalElement, JetReferenceExpression.class, false); JetReferenceExpression referenceExpression = PsiTreeUtil.getParentOfType(originalElement, JetReferenceExpression.class, false);
if (referenceExpression != null) { if (referenceExpression != null) {
BindingContext context = ResolvePackage.analyze(referenceExpression); BindingContext context = ResolvePackage.analyze(referenceExpression, BodyResolveMode.PARTIAL);
DeclarationDescriptor declarationDescriptor = context.get(BindingContext.REFERENCE_TARGET, referenceExpression); DeclarationDescriptor declarationDescriptor = context.get(BindingContext.REFERENCE_TARGET, referenceExpression);
if (declarationDescriptor != null) { if (declarationDescriptor != null) {
return mixKotlinToJava(declarationDescriptor, element, originalElement); return mixKotlinToJava(declarationDescriptor, element, originalElement);
@@ -88,7 +88,7 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider
} }
private static String renderKotlinDeclaration(JetDeclaration declaration, boolean quickNavigation) { 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); DeclarationDescriptor declarationDescriptor = context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration);
if (declarationDescriptor == null) { if (declarationDescriptor == null) {
@@ -132,7 +132,7 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider
KotlinCacheService cacheService = KotlinCacheService.getInstance(project); KotlinCacheService cacheService = KotlinCacheService.getInstance(project);
ResolveSessionForBodies session = cacheService.getLazyResolveSession(jetElement); ResolveSessionForBodies session = cacheService.getLazyResolveSession(jetElement);
ResolutionFacade facade = cacheService.getResolutionFacade(Collections.singletonList(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); DeclarationDescriptor contextDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, context);
if (contextDescriptor == null) { if (contextDescriptor == null) {
return null; return null;
@@ -16,31 +16,32 @@
package org.jetbrains.kotlin.idea.debugger 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 com.intellij.debugger.SourcePosition
import org.jetbrains.kotlin.codegen.AsmUtil import com.intellij.debugger.engine.SourcePositionProvider
import org.jetbrains.kotlin.psi.JetClassOrObject import com.intellij.debugger.impl.DebuggerContextImpl
import com.intellij.debugger.impl.DebuggerContextUtil import com.intellij.debugger.impl.DebuggerContextUtil
import com.sun.jdi.ReferenceType import com.intellij.debugger.impl.PositionUtil
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.ui.tree.FieldDescriptor import com.intellij.debugger.ui.tree.FieldDescriptor
import com.intellij.debugger.ui.tree.LocalVariableDescriptor import com.intellij.debugger.ui.tree.LocalVariableDescriptor
import com.intellij.debugger.impl.PositionUtil import com.intellij.debugger.ui.tree.NodeDescriptor
import org.jetbrains.kotlin.psi.JetElement import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.idea.caches.resolve.analyze import com.intellij.psi.JavaPsiFacade
import org.jetbrains.kotlin.psi.JetPsiFactory import com.intellij.psi.PsiElement
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.PsiTreeUtil 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.JetSimpleNameExpression
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.resolve.BindingContextUtils 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.KotlinSourceElement
import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.resolve.source.getPsi
@@ -66,7 +67,7 @@ public class KotlinSourcePositionProvider: SourcePositionProvider() {
val codeFragment = JetPsiFactory(project).createExpressionCodeFragment(descriptor.getName(), contextElement) val codeFragment = JetPsiFactory(project).createExpressionCodeFragment(descriptor.getName(), contextElement)
val expression = codeFragment.getContentElement() val expression = codeFragment.getContentElement()
if (expression is JetSimpleNameExpression) { if (expression is JetSimpleNameExpression) {
val bindingContext = expression.analyze() val bindingContext = expression.analyze(BodyResolveMode.PARTIAL)
val declarationDescriptor = BindingContextUtils.extractVariableDescriptorIfAny(bindingContext, expression, false) val declarationDescriptor = BindingContextUtils.extractVariableDescriptorIfAny(bindingContext, expression, false)
val sourceElement = declarationDescriptor?.getSource() val sourceElement = declarationDescriptor?.getSource()
if (sourceElement is KotlinSourceElement) { if (sourceElement is KotlinSourceElement) {
@@ -26,28 +26,28 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.PsiShortNamesCache 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.diagnostics.Diagnostic
import org.jetbrains.kotlin.psi.JetExpression import org.jetbrains.kotlin.diagnostics.Errors
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.idea.JetBundle import org.jetbrains.kotlin.idea.JetBundle
import org.jetbrains.kotlin.idea.actions.JetAddImportAction import org.jetbrains.kotlin.idea.actions.JetAddImportAction
import org.jetbrains.kotlin.idea.caches.JetShortNamesCache import org.jetbrains.kotlin.idea.caches.JetShortNamesCache
import org.jetbrains.kotlin.idea.caches.KotlinIndicesHelper import org.jetbrains.kotlin.idea.caches.KotlinIndicesHelper
import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
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.completion.isVisible 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.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. * Check possibility and perform fix for unresolved references.
@@ -119,7 +119,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
val searchScope = file.getResolveScope() val searchScope = file.getResolveScope()
val bindingContext = resolutionFacade.analyze(element) val bindingContext = resolutionFacade.analyze(element, BodyResolveMode.PARTIAL)
val diagnostics = bindingContext.getDiagnostics().forElement(element) val diagnostics = bindingContext.getDiagnostics().forElement(element)
if (!diagnostics.any { it.getFactory() in ERRORS }) return listOf() if (!diagnostics.any { it.getFactory() in ERRORS }) return listOf()
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.psi.typeRefHelpers.TypeRefHelpersPackage; import org.jetbrains.kotlin.psi.typeRefHelpers.TypeRefHelpersPackage;
import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
@@ -92,7 +93,7 @@ public class JetFunctionDefinitionUsage<T extends PsiElement> extends JetUsageIn
if (!(parent instanceof JetFunctionLiteralExpression)) return false; if (!(parent instanceof JetFunctionLiteralExpression)) return false;
JetFunctionLiteralExpression expression = (JetFunctionLiteralExpression) parent; 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 @NotNull