ResolveElementCache: script can now be analyzable parent
So #KT-20096 Fixed
This commit is contained in:
@@ -713,7 +713,7 @@ fun main(args: Array<String>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
testClass<AbstractIntentionTest> {
|
testClass<AbstractIntentionTest> {
|
||||||
model("intentions", pattern = "^([\\w\\-_]+)\\.kt$")
|
model("intentions", pattern = "^([\\w\\-_]+)\\.(kt|kts)$")
|
||||||
}
|
}
|
||||||
|
|
||||||
testClass<AbstractIntentionTest2> {
|
testClass<AbstractIntentionTest2> {
|
||||||
|
|||||||
@@ -238,7 +238,8 @@ class ResolveElementCache(
|
|||||||
KtTypeConstraint::class.java,
|
KtTypeConstraint::class.java,
|
||||||
KtPackageDirective::class.java,
|
KtPackageDirective::class.java,
|
||||||
KtCodeFragment::class.java,
|
KtCodeFragment::class.java,
|
||||||
KtTypeAlias::class.java) as KtElement?
|
KtTypeAlias::class.java
|
||||||
|
) as KtElement?
|
||||||
|
|
||||||
when (elementOfAdditionalResolve) {
|
when (elementOfAdditionalResolve) {
|
||||||
null -> {
|
null -> {
|
||||||
@@ -251,7 +252,8 @@ class ResolveElementCache(
|
|||||||
return element
|
return element
|
||||||
}
|
}
|
||||||
|
|
||||||
return null
|
// Case of pure script element, like val (x, y) = ... on top of the script
|
||||||
|
return element.getParentOfType<KtScript>(strict = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
is KtPackageDirective -> return element
|
is KtPackageDirective -> return element
|
||||||
@@ -334,6 +336,8 @@ class ResolveElementCache(
|
|||||||
|
|
||||||
is KtCodeFragment -> codeFragmentAdditionalResolve(resolveElement, bodyResolveMode)
|
is KtCodeFragment -> codeFragmentAdditionalResolve(resolveElement, bodyResolveMode)
|
||||||
|
|
||||||
|
is KtScript -> scriptAdditionalResolve(resolveSession, resolveElement, bodyResolveMode.bindingTraceFilter)
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
if (resolveElement.getParentOfType<KtPackageDirective>(true) != null) {
|
if (resolveElement.getParentOfType<KtPackageDirective>(true) != null) {
|
||||||
packageRefAdditionalResolve(resolveSession, resolveElement, bodyResolveMode.bindingTraceFilter)
|
packageRefAdditionalResolve(resolveSession, resolveElement, bodyResolveMode.bindingTraceFilter)
|
||||||
@@ -487,6 +491,15 @@ class ResolveElementCache(
|
|||||||
return trace
|
return trace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun scriptAdditionalResolve(resolveSession: ResolveSession, script: KtScript,
|
||||||
|
bindingTraceFilter: BindingTraceFilter): BindingTrace {
|
||||||
|
val trace = createDelegatingTrace(script, bindingTraceFilter)
|
||||||
|
val scriptDescriptor = resolveSession.resolveToDescriptor(script) as ScriptDescriptor
|
||||||
|
ForceResolveUtil.forceResolveAllContents(scriptDescriptor)
|
||||||
|
forceResolveAnnotationsInside(script)
|
||||||
|
return trace
|
||||||
|
}
|
||||||
|
|
||||||
private fun functionAdditionalResolve(resolveSession: ResolveSession, namedFunction: KtNamedFunction, file: KtFile,
|
private fun functionAdditionalResolve(resolveSession: ResolveSession, namedFunction: KtNamedFunction, file: KtFile,
|
||||||
statementFilter: StatementFilter,
|
statementFilter: StatementFilter,
|
||||||
bindingTraceFilter: BindingTraceFilter): BindingTrace {
|
bindingTraceFilter: BindingTraceFilter): BindingTrace {
|
||||||
|
|||||||
Vendored
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// IS_APPLICABLE: false
|
||||||
|
// WITH_RUNTIME
|
||||||
|
// SKIP_ERRORS_BEFORE
|
||||||
|
// SKIP_ERRORS_AFTER
|
||||||
|
|
||||||
|
val (x, y) = run <caret>{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun run(f: () -> Unit) = f()
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// IS_APPLICABLE: false
|
||||||
|
// WITH_RUNTIME
|
||||||
|
// SKIP_ERRORS_BEFORE
|
||||||
|
// SKIP_ERRORS_AFTER
|
||||||
|
|
||||||
|
run <caret>{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun run(f: () -> Unit) = f()
|
||||||
@@ -186,7 +186,7 @@ abstract class AbstractIntentionTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val EXTENSIONS = arrayOf(".kt", ".java", ".groovy")
|
private val EXTENSIONS = arrayOf(".kt", ".kts", ".java", ".groovy")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user