Code fragments: Use file scope as a fallback when a more specific one is not available
This commit is contained in:
+16
-8
@@ -17,8 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.caches.resolve
|
package org.jetbrains.kotlin.idea.caches.resolve
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptorWithResolutionScopes
|
|
||||||
import org.jetbrains.kotlin.idea.project.ResolveElementCache
|
import org.jetbrains.kotlin.idea.project.ResolveElementCache
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -29,10 +28,7 @@ import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoAfter
|
|||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ExplicitImportsScope
|
import org.jetbrains.kotlin.resolve.scopes.*
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ImportingScope
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.ErrorLexicalScope
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.addImportingScopes
|
import org.jetbrains.kotlin.resolve.scopes.utils.addImportingScopes
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
|
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
|
||||||
@@ -134,7 +130,15 @@ class CodeFragmentAnalyzer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val scopeWithImports = enrichScopeWithImports(scope ?: ErrorLexicalScope(), codeFragment)
|
if (scope == null) {
|
||||||
|
val containingKtFile = codeFragment.context?.containingFile as? KtFile
|
||||||
|
if (containingKtFile != null) {
|
||||||
|
bindingContext = resolveSession.bindingContext
|
||||||
|
scope = resolveSession.fileScopeProvider.getFileResolutionScope(containingKtFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val scopeWithImports = enrichScopeWithImports(scope ?: createEmptyScope(resolveSession.moduleDescriptor), codeFragment)
|
||||||
return ContextAnalysisResult(bindingContext, scopeWithImports, dataFlowInfo)
|
return ContextAnalysisResult(bindingContext, scopeWithImports, dataFlowInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,4 +202,8 @@ class CodeFragmentAnalyzer(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private fun createEmptyScope(moduleDescriptor: ModuleDescriptor): LexicalScope {
|
||||||
|
return LexicalScope.Base(ImportingScope.Empty, moduleDescriptor)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user