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.scopes.KtCompositeScope
|
||||
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.KtClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
@@ -90,11 +88,15 @@ internal class FirCallableCompletionContributor(
|
||||
extensionChecker: ExtensionApplicabilityChecker,
|
||||
visibilityChecker: CompletionVisibilityChecker,
|
||||
) {
|
||||
val packageSymbol = explicitReceiver.reference()?.resolveToSymbol() as? KtPackageSymbol
|
||||
if (packageSymbol == null) {
|
||||
collectDotCompletionForCallableReceiver(implicitScopes, explicitReceiver, expectedType, extensionChecker, visibilityChecker)
|
||||
} else {
|
||||
collectDotCompletionForPackageReceiver(packageSymbol, expectedType, visibilityChecker)
|
||||
val symbol = explicitReceiver.reference()?.resolveToSymbol()
|
||||
when {
|
||||
symbol is KtPackageSymbol -> collectDotCompletionForPackageReceiver(symbol, expectedType, visibilityChecker)
|
||||
symbol is KtNamedClassOrObjectSymbol && !symbol.classKind.isObject && symbol.companionObject == null -> {
|
||||
// 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 {
|
||||
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