Skip to content

Commit 30ce531

Browse files
committed
Include missing properties of classes
Seems to be needed to properly complete the properties of sealed classes
1 parent f4cb5c6 commit 30ce531

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ private fun elementCompletions(file: CompiledFile, cursor: Int, surroundingEleme
305305
val referenceTarget = file.referenceAtPoint(surroundingElement.qualifier!!.startOffset)?.second
306306
if (referenceTarget is ClassDescriptor) {
307307
LOG.info("Completing members of {}", referenceTarget.fqNameSafe)
308-
return referenceTarget.unsubstitutedInnerClassesScope.getContributedDescriptors().asSequence()
308+
return referenceTarget.getDescriptors()
309309
} else {
310310
LOG.warn("No type reference in '{}'", surroundingElement.text)
311311
return emptySequence()
@@ -374,16 +374,24 @@ private fun completeMembers(file: CompiledFile, cursor: Int, receiverExpr: KtExp
374374
// JavaClass.?
375375
val referenceTarget = file.referenceAtPoint(receiverExpr.endOffset - 1)?.second
376376
if (referenceTarget is ClassDescriptor) {
377-
LOG.debug("Completing static members of '{}'", referenceTarget.fqNameSafe)
378-
val statics = referenceTarget.staticScope.getContributedDescriptors().asSequence()
379-
val classes = referenceTarget.unsubstitutedInnerClassesScope.getContributedDescriptors().asSequence()
380-
return descriptors + statics + classes
377+
LOG.debug("Completing members of '{}'", referenceTarget.fqNameSafe)
378+
return descriptors + referenceTarget.getDescriptors()
381379
}
382380

383381
LOG.debug("Can't find member scope for {}", receiverExpr.text)
384382
return emptySequence()
385383
}
386384

385+
private fun ClassDescriptor.getDescriptors(): Sequence<DeclarationDescriptor> {
386+
val statics = staticScope.getContributedDescriptors().asSequence()
387+
val classes = unsubstitutedInnerClassesScope.getContributedDescriptors().asSequence()
388+
val types = unsubstitutedMemberScope.getContributedDescriptors().asSequence()
389+
val companionDescriptors = if (hasCompanionObject && companionObjectDescriptor != null) companionObjectDescriptor!!.getDescriptors() else emptySequence()
390+
391+
return (statics + classes + types + companionDescriptors).toSet().asSequence()
392+
393+
}
394+
387395
private fun isCompanionOfEnum(kotlinType: KotlinType): Boolean {
388396
val classDescriptor = TypeUtils.getClassDescriptor(kotlinType)
389397
val isCompanion = DescriptorUtils.isCompanionObject(classDescriptor)

0 commit comments

Comments
 (0)