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) {
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;
@@ -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) {
@@ -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<Jet
val searchScope = file.getResolveScope()
val bindingContext = resolutionFacade.analyze(element)
val bindingContext = resolutionFacade.analyze(element, BodyResolveMode.PARTIAL)
val diagnostics = bindingContext.getDiagnostics().forElement(element)
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.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.TypeSubstitutor;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
@@ -92,7 +93,7 @@ public class JetFunctionDefinitionUsage<T extends PsiElement> 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