Skip to content

Commit 3e3f617

Browse files
cypressiousSpace Team
authored andcommitted
[LL] Fix argument list copying in copyQualifiedAccess
After the changes to buildResolvedArgumentList, a NPE started happening in analysis/analysis-api/testData/components/resolver/singleByPsi /suspendLambda.kt because the mapping had null values.
1 parent d9bd992 commit 3e3f617

File tree

1 file changed

+5
-21
lines changed

1 file changed

+5
-21
lines changed

analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/resolver/AllCandidatesResolver.kt

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.ContextCollector
1313
import org.jetbrains.kotlin.analysis.utils.printer.parentsOfType
1414
import org.jetbrains.kotlin.fir.FirSession
1515
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
16-
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
1716
import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunctionCopy
1817
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
1918
import org.jetbrains.kotlin.fir.expressions.*
@@ -198,16 +197,7 @@ private fun copyQualifiedAccess(
198197
argumentList = when (val argumentListToCopy = qualifiedAccess.argumentList) {
199198
is FirEmptyArgumentList -> argumentListToCopy
200199
is FirResolvedArgumentList -> {
201-
var hasNullableParameter = false
202-
val newArguments = argumentListToCopy.arguments.map(::copyArgument)
203-
val newMapping = LinkedHashMap<FirExpression, FirValueParameter?>(newArguments.size)
204-
for (newArgument in newArguments) {
205-
val parameter = argumentListToCopy.mapping[newArgument]
206-
newMapping[newArgument] = parameter
207-
if (parameter == null) {
208-
hasNullableParameter = true
209-
}
210-
}
200+
val newMapping = argumentListToCopy.mapping.mapKeysTo(LinkedHashMap()) { copyArgument(it.key) }
211201

212202
/**
213203
* Arguments from the original argument list are used, so it has to be copied as well.
@@ -223,16 +213,10 @@ private fun copyQualifiedAccess(
223213
null
224214
}
225215

226-
if (hasNullableParameter && newOriginalList != null) {
227-
buildArgumentListForErrorCall(original = newOriginalList, mapping = newMapping)
228-
} else {
229-
@Suppress("UNCHECKED_CAST") // The mapping is guaranteed to be of the correct type by `hasNullableParameter`
230-
buildResolvedArgumentList(
231-
original = newOriginalList,
232-
mapping = newMapping as LinkedHashMap<FirExpression, FirValueParameter>,
233-
)
234-
}
235-
216+
buildResolvedArgumentList(
217+
original = newOriginalList,
218+
mapping = newMapping,
219+
)
236220
}
237221

238222
else -> {

0 commit comments

Comments
 (0)