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)
}
public fun JetElement.resolveToElement(): BindingContext {
return getLazyResolveSession().resolveToElement(this)
}
public fun JetElement.getBindingContext(): BindingContext {
return getAnalysisResults().bindingContext
}
@@ -19,7 +19,6 @@ package org.jetbrains.jet.plugin.project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.plugin.caches.resolve.ResolutionFacade;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
public final class AnalyzerFacadeWithCache {
@@ -29,7 +28,6 @@ public final class AnalyzerFacadeWithCache {
@NotNull
public static BindingContext getContextForElement(@NotNull JetElement jetElement) {
ResolutionFacade resolveSessionForBodies = ResolvePackage.getLazyResolveSession(jetElement);
return resolveSessionForBodies.resolveToElement(jetElement);
return ResolvePackage.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.JetBinaryExpression
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.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.jet.plugin.caches.resolve.resolveToElement
public class ConvertToForEachLoopIntention : JetSelfTargetingIntention<JetExpression>("convert.to.for.each.loop.intention", javaClass()) {
private fun getFunctionLiteralArgument(element: JetExpression): JetFunctionLiteralExpression? {
@@ -78,7 +78,7 @@ public class ConvertToForEachLoopIntention : JetSelfTargetingIntention<JetExpres
isWellFormedFunctionLiteral(functionLiteral) &&
checkTotalNumberOfArguments(element)) {
val context = element.getContainingJetFile().getLazyResolveSession().resolveToElement(element)
val context = element.resolveToElement()
val resolvedCall = element.getResolvedCall(context)
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.JetNodeTypes
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.caches.resolve.resolveToElement
fun specifyTypeExplicitly(declaration: JetNamedFunction, typeText: String) {
specifyTypeExplicitly(declaration, JetPsiFactory(declaration).createType(typeText))
@@ -44,14 +44,12 @@ fun specifyTypeExplicitly(declaration: JetNamedFunction, typeReference: JetTypeR
}
fun expressionType(expression: JetExpression): JetType? {
val resolveSession = expression.getLazyResolveSession()
val bindingContext = resolveSession.resolveToElement(expression)
val bindingContext = expression.resolveToElement()
return bindingContext.get(BindingContext.EXPRESSION_TYPE, expression)
}
fun functionReturnType(function: JetNamedFunction): JetType? {
val resolveSession = function.getLazyResolveSession()
val bindingContext = resolveSession.resolveToElement(function)
val bindingContext = function.resolveToElement()
val descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, function)
if (descriptor == null) return null
return (descriptor as FunctionDescriptor).getReturnType()
@@ -16,17 +16,10 @@
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.openapi.util.Key
import com.intellij.psi.PsiDirectory
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.refactoring.util.ConflictsUtil
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.psi.psiUtil.getParentByType
import org.jetbrains.jet.lang.psi.psiUtil.isAncestor
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import com.intellij.psi.PsiNamedElement
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
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 javax.swing.Icon
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? {
val data = getCopyableUserData(key)
@@ -280,7 +273,7 @@ public fun JetElement.getContextForContainingDeclarationBody(): BindingContext?
}
else -> null
}
return bodyElement?.let { getContainingJetFile().getLazyResolveSession().resolveToElement(it) }
return bodyElement?.let { it.resolveToElement() }
}
public fun chooseContainerElement<T>(