Refactor: Introduce JetElement#resolveToElement utility
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -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>(
|
||||||
|
|||||||
Reference in New Issue
Block a user