Skip to content

Commit 1050bae

Browse files
committed
Provide correct member completions for safe calls
1 parent e218afd commit 1050bae

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

server/src/main/kotlin/org/javacs/kt/completion/Completions.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ private fun elementCompletions(file: CompiledFile, cursor: Int, surroundingEleme
186186
// .?
187187
is KtQualifiedExpression -> {
188188
LOG.info("Completing member expression '{}'", surroundingElement.text)
189-
completeMembers(file, cursor, surroundingElement.receiverExpression)
189+
completeMembers(file, cursor, surroundingElement.receiverExpression, surroundingElement is KtSafeQualifiedExpression)
190190
}
191191
is KtCallableReferenceExpression -> {
192192
// something::?
@@ -214,13 +214,14 @@ private fun elementCompletions(file: CompiledFile, cursor: Int, surroundingEleme
214214
}
215215
}
216216

217-
private fun completeMembers(file: CompiledFile, cursor: Int, receiverExpr: KtExpression): Sequence<DeclarationDescriptor> {
217+
private fun completeMembers(file: CompiledFile, cursor: Int, receiverExpr: KtExpression, unwrapNullable: Boolean = false): Sequence<DeclarationDescriptor> {
218218
// thingWithType.?
219219
val lexicalScope = file.scopeAtPoint(cursor)
220220
var descriptors = emptySequence<DeclarationDescriptor>()
221221
if (lexicalScope != null) {
222-
val receiverType = file.typeOfExpression(receiverExpr, lexicalScope)
223-
if (receiverType != null) {
222+
val expressionType = file.typeOfExpression(receiverExpr, lexicalScope)
223+
if (expressionType != null) {
224+
val receiverType = if (unwrapNullable) TypeUtils.makeNotNullable(expressionType) else expressionType
224225
LOG.debug("Completing members of instance '{}'", receiverType)
225226
val members = receiverType.memberScope.getContributedDescriptors().asSequence()
226227
val extensions = extensionFunctions(lexicalScope).filter { isExtensionFor(receiverType, it) }

0 commit comments

Comments
 (0)