Refactor: Introduce JetElement#resolveToElement utility

This commit is contained in:
Pavel V. Talanov
2014-11-20 15:42:17 +03:00
parent 585b556f52
commit 96100eec1d
5 changed files with 12 additions and 19 deletions
@@ -35,6 +35,10 @@ public fun JetDeclaration.resolveToDescriptor(): DeclarationDescriptor {
return getLazyResolveSession().resolveToDescriptor(this) return getLazyResolveSession().resolveToDescriptor(this)
} }
public fun JetElement.resolveToElement(): BindingContext {
return getLazyResolveSession().resolveToElement(this)
}
public fun JetElement.getBindingContext(): BindingContext { public fun JetElement.getBindingContext(): BindingContext {
return getAnalysisResults().bindingContext return getAnalysisResults().bindingContext
} }
@@ -19,7 +19,6 @@ package org.jetbrains.jet.plugin.project;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetElement; import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.plugin.caches.resolve.ResolutionFacade;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
public final class AnalyzerFacadeWithCache { public final class AnalyzerFacadeWithCache {
@@ -29,7 +28,6 @@ public final class AnalyzerFacadeWithCache {
@NotNull @NotNull
public static BindingContext getContextForElement(@NotNull JetElement jetElement) { public static BindingContext getContextForElement(@NotNull JetElement jetElement) {
ResolutionFacade resolveSessionForBodies = ResolvePackage.getLazyResolveSession(jetElement); return ResolvePackage.resolveToElement(jetElement);
return resolveSessionForBodies.resolveToElement(jetElement);
} }
} }
@@ -24,9 +24,9 @@ import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.lang.psi.JetDotQualifiedExpression import org.jetbrains.jet.lang.psi.JetDotQualifiedExpression
import org.jetbrains.jet.lang.psi.JetBinaryExpression import org.jetbrains.jet.lang.psi.JetBinaryExpression
import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import org.jetbrains.jet.lang.psi.JetParenthesizedExpression import org.jetbrains.jet.lang.psi.JetParenthesizedExpression
import org.jetbrains.jet.lang.resolve.calls.callUtil.getResolvedCall import org.jetbrains.jet.lang.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.jet.plugin.caches.resolve.resolveToElement
public class ConvertToForEachLoopIntention : JetSelfTargetingIntention<JetExpression>("convert.to.for.each.loop.intention", javaClass()) { public class ConvertToForEachLoopIntention : JetSelfTargetingIntention<JetExpression>("convert.to.for.each.loop.intention", javaClass()) {
private fun getFunctionLiteralArgument(element: JetExpression): JetFunctionLiteralExpression? { private fun getFunctionLiteralArgument(element: JetExpression): JetFunctionLiteralExpression? {
@@ -78,7 +78,7 @@ public class ConvertToForEachLoopIntention : JetSelfTargetingIntention<JetExpres
isWellFormedFunctionLiteral(functionLiteral) && isWellFormedFunctionLiteral(functionLiteral) &&
checkTotalNumberOfArguments(element)) { checkTotalNumberOfArguments(element)) {
val context = element.getContainingJetFile().getLazyResolveSession().resolveToElement(element) val context = element.resolveToElement()
val resolvedCall = element.getResolvedCall(context) val resolvedCall = element.getResolvedCall(context)
val functionFqName = if (resolvedCall != null) DescriptorUtils.getFqName(resolvedCall.getResultingDescriptor()).toString() else null val functionFqName = if (resolvedCall != null) DescriptorUtils.getFqName(resolvedCall.getResultingDescriptor()).toString() else null
@@ -23,8 +23,8 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
import org.jetbrains.jet.plugin.codeInsight.ShortenReferences import org.jetbrains.jet.plugin.codeInsight.ShortenReferences
import org.jetbrains.jet.JetNodeTypes import org.jetbrains.jet.JetNodeTypes
import org.jetbrains.jet.lexer.JetTokens import org.jetbrains.jet.lexer.JetTokens
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers
import org.jetbrains.jet.plugin.caches.resolve.resolveToElement
fun specifyTypeExplicitly(declaration: JetNamedFunction, typeText: String) { fun specifyTypeExplicitly(declaration: JetNamedFunction, typeText: String) {
specifyTypeExplicitly(declaration, JetPsiFactory(declaration).createType(typeText)) specifyTypeExplicitly(declaration, JetPsiFactory(declaration).createType(typeText))
@@ -44,14 +44,12 @@ fun specifyTypeExplicitly(declaration: JetNamedFunction, typeReference: JetTypeR
} }
fun expressionType(expression: JetExpression): JetType? { fun expressionType(expression: JetExpression): JetType? {
val resolveSession = expression.getLazyResolveSession() val bindingContext = expression.resolveToElement()
val bindingContext = resolveSession.resolveToElement(expression)
return bindingContext.get(BindingContext.EXPRESSION_TYPE, expression) return bindingContext.get(BindingContext.EXPRESSION_TYPE, expression)
} }
fun functionReturnType(function: JetNamedFunction): JetType? { fun functionReturnType(function: JetNamedFunction): JetType? {
val resolveSession = function.getLazyResolveSession() val bindingContext = function.resolveToElement()
val bindingContext = resolveSession.resolveToElement(function)
val descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, function) val descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, function)
if (descriptor == null) return null if (descriptor == null) return null
return (descriptor as FunctionDescriptor).getReturnType() return (descriptor as FunctionDescriptor).getReturnType()
@@ -16,17 +16,10 @@
package org.jetbrains.jet.plugin.refactoring package org.jetbrains.jet.plugin.refactoring
import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.lang.psi.psiUtil.getQualifiedElement
import org.jetbrains.jet.lang.resolve.name.isOneSegmentFQN
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.psi.PsiDirectory import com.intellij.psi.PsiDirectory
import com.intellij.openapi.roots.JavaProjectRootsUtil import com.intellij.openapi.roots.JavaProjectRootsUtil
import com.intellij.psi.PsiPackage
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiMember
import org.jetbrains.jet.asJava.namedUnwrappedElement
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import com.intellij.refactoring.util.ConflictsUtil import com.intellij.refactoring.util.ConflictsUtil
import org.jetbrains.jet.lang.psi.psiUtil.getPackage import org.jetbrains.jet.lang.psi.psiUtil.getPackage
@@ -65,7 +58,6 @@ import com.intellij.psi.PsiDocumentManager
import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.resolve.BindingContext
import org.jetbrains.jet.lang.psi.psiUtil.getParentByType import org.jetbrains.jet.lang.psi.psiUtil.getParentByType
import org.jetbrains.jet.lang.psi.psiUtil.isAncestor import org.jetbrains.jet.lang.psi.psiUtil.isAncestor
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import com.intellij.psi.PsiNamedElement import com.intellij.psi.PsiNamedElement
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
@@ -73,6 +65,7 @@ import org.jetbrains.jet.renderer.DescriptorRenderer
import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.util.text.StringUtil
import javax.swing.Icon import javax.swing.Icon
import org.jetbrains.jet.plugin.util.string.collapseSpaces import org.jetbrains.jet.plugin.util.string.collapseSpaces
import org.jetbrains.jet.plugin.caches.resolve.resolveToElement
fun <T: Any> PsiElement.getAndRemoveCopyableUserData(key: Key<T>): T? { fun <T: Any> PsiElement.getAndRemoveCopyableUserData(key: Key<T>): T? {
val data = getCopyableUserData(key) val data = getCopyableUserData(key)
@@ -280,7 +273,7 @@ public fun JetElement.getContextForContainingDeclarationBody(): BindingContext?
} }
else -> null else -> null
} }
return bodyElement?.let { getContainingJetFile().getLazyResolveSession().resolveToElement(it) } return bodyElement?.let { it.resolveToElement() }
} }
public fun chooseContainerElement<T>( public fun chooseContainerElement<T>(