Fixed partial resolve for default parameter values
This commit is contained in:
@@ -61,20 +61,19 @@ public class ResolveElementCache(resolveSession: ResolveSession, private val pro
|
||||
if (bodyResolveMode != BodyResolveMode.FULL && !hasElementAdditionalResolveCached(resolveElement) && resolveElement is JetDeclaration) {
|
||||
if (bodyResolveMode == BodyResolveMode.PARTIAL) {
|
||||
val statementToResolve = PartialBodyResolveFilter.findStatementToResolve(contextElement, resolveElement)
|
||||
if (statementToResolve != null) {
|
||||
val map = partialBodyResolveCache.getValue()
|
||||
map[statementToResolve]?.let { return it }
|
||||
val map = partialBodyResolveCache.getValue()
|
||||
map[statementToResolve ?: resolveElement]?.let { return it }
|
||||
|
||||
val (bindingContext, statementFilter) = performElementAdditionalResolve(resolveElement, statementToResolve, BodyResolveMode.PARTIAL)
|
||||
val (bindingContext, statementFilter) = performElementAdditionalResolve(resolveElement, contextElement, BodyResolveMode.PARTIAL)
|
||||
|
||||
for (statement in (statementFilter as PartialBodyResolveFilter).allStatementsToResolve) {
|
||||
if (!map.containsKey(statement)) {
|
||||
map[statement] = bindingContext
|
||||
}
|
||||
for (statement in (statementFilter as PartialBodyResolveFilter).allStatementsToResolve) {
|
||||
if (!map.containsKey(statement)) {
|
||||
map[statement] = bindingContext
|
||||
}
|
||||
|
||||
return bindingContext
|
||||
}
|
||||
map[resolveElement] = bindingContext // we use the whole declaration key in the map to obtain resolve not inside any block (e.g. default parameter values)
|
||||
|
||||
return bindingContext
|
||||
}
|
||||
else {
|
||||
return performElementAdditionalResolve(resolveElement, contextElement, bodyResolveMode).first
|
||||
|
||||
@@ -29,7 +29,7 @@ public class ResolveElementCacheTest : JetLightCodeInsightFixtureTestCase() {
|
||||
private val FILE_TEXT =
|
||||
"""
|
||||
class C {
|
||||
fun a() {
|
||||
fun a(p: Int = 0) {
|
||||
b(1, 2)
|
||||
val x = c()
|
||||
d(x)
|
||||
@@ -144,4 +144,16 @@ class C {
|
||||
assert(bindingContext3 !== bindingContext1)
|
||||
}
|
||||
}
|
||||
|
||||
public fun testPartialResolveCachedForDefaultParameterValue() {
|
||||
doTest {
|
||||
val defaultValue = (members[0] as JetNamedFunction).getValueParameters()[0].getDefaultValue()
|
||||
val bindingContext1 = defaultValue!!.analyze(BodyResolveMode.PARTIAL)
|
||||
val bindingContext2 = defaultValue.analyze(BodyResolveMode.PARTIAL)
|
||||
assert(bindingContext1 === bindingContext2)
|
||||
|
||||
val bindingContext3 = statements[0].analyze(BodyResolveMode.PARTIAL)
|
||||
assert(bindingContext3 !== bindingContext2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user