FIR IDE: do not complete callables for classifier without companion
This commit is contained in:
committed by
TeamCityServer
parent
365bc5712b
commit
55621b7aad
+10
-8
@@ -14,9 +14,7 @@ import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtScopeContext
|
import org.jetbrains.kotlin.idea.frontend.api.components.KtScopeContext
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
@@ -90,11 +88,15 @@ internal class FirCallableCompletionContributor(
|
|||||||
extensionChecker: ExtensionApplicabilityChecker,
|
extensionChecker: ExtensionApplicabilityChecker,
|
||||||
visibilityChecker: CompletionVisibilityChecker,
|
visibilityChecker: CompletionVisibilityChecker,
|
||||||
) {
|
) {
|
||||||
val packageSymbol = explicitReceiver.reference()?.resolveToSymbol() as? KtPackageSymbol
|
val symbol = explicitReceiver.reference()?.resolveToSymbol()
|
||||||
if (packageSymbol == null) {
|
when {
|
||||||
collectDotCompletionForCallableReceiver(implicitScopes, explicitReceiver, expectedType, extensionChecker, visibilityChecker)
|
symbol is KtPackageSymbol -> collectDotCompletionForPackageReceiver(symbol, expectedType, visibilityChecker)
|
||||||
} else {
|
symbol is KtNamedClassOrObjectSymbol && !symbol.classKind.isObject && symbol.companionObject == null -> {
|
||||||
collectDotCompletionForPackageReceiver(packageSymbol, expectedType, visibilityChecker)
|
// symbol cannot be used as callable receiver
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
collectDotCompletionForCallableReceiver(implicitScopes, explicitReceiver, expectedType, extensionChecker, visibilityChecker)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
@@ -84,3 +84,8 @@ abstract class KtNamedClassOrObjectSymbol : KtClassOrObjectSymbol(),
|
|||||||
enum class KtClassKind {
|
enum class KtClassKind {
|
||||||
CLASS, ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, OBJECT, COMPANION_OBJECT, INTERFACE, ANONYMOUS_OBJECT
|
CLASS, ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, OBJECT, COMPANION_OBJECT, INTERFACE, ANONYMOUS_OBJECT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val KtClassKind.isObject
|
||||||
|
get() = this == KtClassKind.OBJECT
|
||||||
|
|| this == KtClassKind.COMPANION_OBJECT
|
||||||
|
|| this == KtClassKind.ANONYMOUS_OBJECT
|
||||||
Reference in New Issue
Block a user