Global replace JetScope to LexicalScope
This commit is contained in:
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.asLexicalScope
|
||||
import org.jetbrains.kotlin.types.JetType
|
||||
import org.jetbrains.kotlin.types.TypeUtils
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
|
||||
@@ -39,7 +40,7 @@ public fun JetExpression.computeTypeInfoInContext(
|
||||
isStatement: Boolean = false
|
||||
): JetTypeInfo {
|
||||
return contextExpression.getResolutionFacade().frontendService<ExpressionTypingServices>()
|
||||
.getTypeInfo(scope, this, expectedType, dataFlowInfo, trace, isStatement)
|
||||
.getTypeInfo(scope.asLexicalScope(), this, expectedType, dataFlowInfo, trace, isStatement)
|
||||
}
|
||||
|
||||
jvmOverloads
|
||||
|
||||
+10
-9
@@ -28,9 +28,9 @@ import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.asJetScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalChainedScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.types.TypeUtils
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
@@ -85,18 +85,18 @@ public class CodeFragmentAnalyzer(
|
||||
private fun getScopeAndDataFlowForAnalyzeFragment(
|
||||
codeFragment: JetCodeFragment,
|
||||
resolveToElement: (JetElement) -> BindingContext
|
||||
): Pair<JetScope, DataFlowInfo>? {
|
||||
): Pair<LexicalScope, DataFlowInfo>? {
|
||||
val context = codeFragment.getContext()
|
||||
if (context !is JetExpression) return null
|
||||
|
||||
val scopeForContextElement: JetScope?
|
||||
val scopeForContextElement: LexicalScope?
|
||||
val dataFlowInfo: DataFlowInfo
|
||||
|
||||
when (context) {
|
||||
is JetClassOrObject -> {
|
||||
val descriptor = resolveSession.getClassDescriptor(context, NoLookupLocation.FROM_IDE) as ClassDescriptorWithResolutionScopes
|
||||
|
||||
scopeForContextElement = descriptor.getScopeForMemberDeclarationResolution().asJetScope()
|
||||
scopeForContextElement = descriptor.getScopeForMemberDeclarationResolution()
|
||||
dataFlowInfo = DataFlowInfo.EMPTY
|
||||
}
|
||||
is JetExpression -> {
|
||||
@@ -104,7 +104,7 @@ public class CodeFragmentAnalyzer(
|
||||
|
||||
val contextForElement = resolveToElement(correctedContext)
|
||||
|
||||
scopeForContextElement = contextForElement[BindingContext.RESOLUTION_SCOPE, correctedContext]
|
||||
scopeForContextElement = contextForElement[BindingContext.LEXICAL_SCOPE, correctedContext]
|
||||
dataFlowInfo = contextForElement.getDataFlowInfo(correctedContext)
|
||||
}
|
||||
is JetFile -> {
|
||||
@@ -117,10 +117,11 @@ public class CodeFragmentAnalyzer(
|
||||
if (scopeForContextElement == null) return null
|
||||
|
||||
val codeFragmentScope = resolveSession.getFileScopeProvider().getFileScope(codeFragment)
|
||||
val chainedScope = ChainedScope(
|
||||
scopeForContextElement.getContainingDeclaration(),
|
||||
val chainedScope = LexicalChainedScope(
|
||||
scopeForContextElement, scopeForContextElement.ownerDescriptor,
|
||||
false, null,
|
||||
"Scope for resolve code fragment",
|
||||
scopeForContextElement, codeFragmentScope)
|
||||
codeFragmentScope)
|
||||
|
||||
return chainedScope to dataFlowInfo
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
@@ -34,7 +33,7 @@ import org.jetbrains.kotlin.resolve.ImportPath
|
||||
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
import org.jetbrains.kotlin.resolve.lazy.LazyFileScope
|
||||
|
||||
public fun JetElement.getResolutionFacade(): ResolutionFacade {
|
||||
return KotlinCacheService.getInstance(getProject()).getResolutionFacade(listOf(this))
|
||||
@@ -96,6 +95,6 @@ public fun getResolveScope(file: JetFile): GlobalSearchScope {
|
||||
}
|
||||
}
|
||||
|
||||
public fun ResolutionFacade.getFileTopLevelScope(file: JetFile): JetScope {
|
||||
public fun ResolutionFacade.getFileTopLevelScope(file: JetFile): LazyFileScope {
|
||||
return frontendService<FileScopeProvider>().getFileScope(file)
|
||||
}
|
||||
@@ -32,6 +32,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.FunctionDescriptorUtil
|
||||
import org.jetbrains.kotlin.resolve.scopes.*
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.asJetScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsFileScope
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||
|
||||
public class KDocReference(element: KDocName): JetMultiReference<KDocName>(element) {
|
||||
@@ -84,7 +86,7 @@ public fun resolveKDocLink(resolutionFacade: ResolutionFacade,
|
||||
var result: Collection<DeclarationDescriptor> = listOf(fromDescriptor)
|
||||
qualifiedName.forEach { nameComponent ->
|
||||
if (result.size() != 1) return listOf()
|
||||
val scope = getResolutionScope(resolutionFacade, result.first())
|
||||
val scope = getResolutionScope(resolutionFacade, result.first()).asJetScope()
|
||||
result = scope.getDescriptors().filter { it.getName().asString() == nameComponent }
|
||||
}
|
||||
|
||||
@@ -94,7 +96,7 @@ public fun resolveKDocLink(resolutionFacade: ResolutionFacade,
|
||||
private fun resolveInLocalScope(fromDescriptor: DeclarationDescriptor,
|
||||
name: String,
|
||||
resolutionFacade: ResolutionFacade): List<DeclarationDescriptor> {
|
||||
val scope = getResolutionScope(resolutionFacade, fromDescriptor)
|
||||
val scope = getResolutionScope(resolutionFacade, fromDescriptor).asJetScope()
|
||||
return scope.getDescriptors().filter {
|
||||
it.getName().asString() == name && it.getContainingDeclaration() == fromDescriptor
|
||||
}
|
||||
@@ -129,30 +131,28 @@ private fun getPackageInnerScope(descriptor: PackageFragmentDescriptor): JetScop
|
||||
return descriptor.getContainingDeclaration().getPackage(descriptor.fqName).memberScope
|
||||
}
|
||||
|
||||
private fun getClassInnerScope(outerScope: JetScope, descriptor: ClassDescriptor): JetScope {
|
||||
val redeclarationHandler = RedeclarationHandler.DO_NOTHING
|
||||
private fun getClassInnerScope(outerScope: LexicalScope, descriptor: ClassDescriptor): LexicalScope {
|
||||
|
||||
val headerScope = WritableScopeImpl(outerScope, descriptor, redeclarationHandler, "Class ${descriptor.getName()} header scope",
|
||||
descriptor.thisAsReceiverParameter)
|
||||
for (typeParameter in descriptor.getTypeConstructor().getParameters()) {
|
||||
headerScope.addClassifierDescriptor(typeParameter)
|
||||
val headerScope = LexicalScopeImpl(outerScope, descriptor, false, descriptor.thisAsReceiverParameter,
|
||||
"Class ${descriptor.getName()} header scope") {
|
||||
for (typeParameter in descriptor.getTypeConstructor().getParameters()) {
|
||||
addClassifierDescriptor(typeParameter)
|
||||
}
|
||||
for (constructor in descriptor.getConstructors()) {
|
||||
addFunctionDescriptor(constructor)
|
||||
}
|
||||
}
|
||||
for (constructor in descriptor.getConstructors()) {
|
||||
headerScope.addFunctionDescriptor(constructor)
|
||||
}
|
||||
headerScope.changeLockLevel(WritableScope.LockLevel.READING)
|
||||
|
||||
val classScope = ChainedScope(descriptor, "Class ${descriptor.getName()} scope", descriptor.getDefaultType().getMemberScope(), headerScope)
|
||||
return classScope
|
||||
return LexicalChainedScope(headerScope, descriptor, false, null,
|
||||
"Class ${descriptor.getName()} scope", descriptor.getDefaultType().getMemberScope())
|
||||
}
|
||||
|
||||
public fun getResolutionScope(resolutionFacade: ResolutionFacade, descriptor: DeclarationDescriptor): JetScope {
|
||||
public fun getResolutionScope(resolutionFacade: ResolutionFacade, descriptor: DeclarationDescriptor): LexicalScope {
|
||||
return when (descriptor) {
|
||||
is PackageFragmentDescriptor ->
|
||||
getPackageInnerScope(descriptor)
|
||||
getPackageInnerScope(descriptor).memberScopeAsFileScope()
|
||||
|
||||
is PackageViewDescriptor ->
|
||||
descriptor.memberScope
|
||||
descriptor.memberScope.memberScopeAsFileScope()
|
||||
|
||||
is ClassDescriptor ->
|
||||
getClassInnerScope(getOuterScope(descriptor, resolutionFacade), descriptor)
|
||||
@@ -173,7 +173,7 @@ public fun getResolutionScope(resolutionFacade: ResolutionFacade, descriptor: De
|
||||
}
|
||||
}
|
||||
|
||||
private fun getOuterScope(descriptor: DeclarationDescriptorWithSource, resolutionFacade: ResolutionFacade): JetScope {
|
||||
private fun getOuterScope(descriptor: DeclarationDescriptorWithSource, resolutionFacade: ResolutionFacade): LexicalScope {
|
||||
val parent = descriptor.getContainingDeclaration()
|
||||
if (parent is PackageFragmentDescriptor) {
|
||||
val containingFile = (descriptor.getSource() as? PsiSourceElement)?.psi?.getContainingFile() as? JetFile
|
||||
|
||||
@@ -43,7 +43,6 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.kotlin.resolve.lazy.*
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.asJetScope
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.check
|
||||
|
||||
public class ResolveElementCache(
|
||||
@@ -407,15 +406,15 @@ public class ResolveElementCache(
|
||||
classOrObject,
|
||||
descriptor,
|
||||
descriptor.getUnsubstitutedPrimaryConstructor(),
|
||||
descriptor.getScopeForClassHeaderResolution().asJetScope(),
|
||||
descriptor.getScopeForMemberDeclarationResolution().asJetScope())
|
||||
descriptor.getScopeForClassHeaderResolution(),
|
||||
descriptor.getScopeForMemberDeclarationResolution())
|
||||
|
||||
return trace
|
||||
}
|
||||
|
||||
private fun propertyAdditionalResolve(resolveSession: ResolveSession, jetProperty: JetProperty, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
||||
val trace = createDelegatingTrace(jetProperty)
|
||||
val propertyResolutionScope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(jetProperty).asJetScope()
|
||||
val propertyResolutionScope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(jetProperty)
|
||||
|
||||
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
|
||||
val descriptor = resolveSession.resolveToDescriptor(jetProperty) as PropertyDescriptor
|
||||
@@ -448,7 +447,7 @@ public class ResolveElementCache(
|
||||
private fun functionAdditionalResolve(resolveSession: ResolveSession, namedFunction: JetNamedFunction, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
||||
val trace = createDelegatingTrace(namedFunction)
|
||||
|
||||
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(namedFunction).asJetScope()
|
||||
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(namedFunction)
|
||||
val functionDescriptor = resolveSession.resolveToDescriptor(namedFunction) as FunctionDescriptor
|
||||
ForceResolveUtil.forceResolveAllContents(functionDescriptor)
|
||||
|
||||
@@ -461,7 +460,7 @@ public class ResolveElementCache(
|
||||
private fun secondaryConstructorAdditionalResolve(resolveSession: ResolveSession, constructor: JetSecondaryConstructor, file: JetFile, statementFilter: StatementFilter): BindingTrace {
|
||||
val trace = createDelegatingTrace(constructor)
|
||||
|
||||
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(constructor).asJetScope()
|
||||
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(constructor)
|
||||
val constructorDescriptor = resolveSession.resolveToDescriptor(constructor) as ConstructorDescriptor
|
||||
ForceResolveUtil.forceResolveAllContents(constructorDescriptor)
|
||||
|
||||
@@ -473,7 +472,7 @@ public class ResolveElementCache(
|
||||
|
||||
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: JetClass, file: JetFile): BindingTrace {
|
||||
val trace = createDelegatingTrace(klass)
|
||||
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(klass).asJetScope()
|
||||
val scope = resolveSession.getDeclarationScopeProvider().getResolutionScopeForDeclaration(klass)
|
||||
|
||||
val classDescriptor = resolveSession.resolveToDescriptor(klass) as ClassDescriptor
|
||||
val constructorDescriptor = classDescriptor.getUnsubstitutedPrimaryConstructor()
|
||||
|
||||
Reference in New Issue
Block a user