More elegant way to achieve the same + fixed KT-7746 Top level package name completion does not work inside class body
#KT-7746 Fixed
This commit is contained in:
+2
@@ -35,4 +35,6 @@ public class SamConstructorDescriptor(
|
|||||||
|
|
||||||
public object SamConstructorDescriptorKindExclude : DescriptorKindExclude {
|
public object SamConstructorDescriptorKindExclude : DescriptorKindExclude {
|
||||||
override fun matches(descriptor: DeclarationDescriptor) = descriptor is SamConstructorDescriptor
|
override fun matches(descriptor: DeclarationDescriptor) = descriptor is SamConstructorDescriptor
|
||||||
|
|
||||||
|
override val fullyExcludedDescriptorKinds: Int get() = 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ public class DescriptorKindFilter(
|
|||||||
= kindMask and kinds != 0
|
= kindMask and kinds != 0
|
||||||
|
|
||||||
public fun exclude(exclude: DescriptorKindExclude): DescriptorKindFilter
|
public fun exclude(exclude: DescriptorKindExclude): DescriptorKindFilter
|
||||||
= DescriptorKindFilter(kindMask, excludes + listOf(exclude))
|
= DescriptorKindFilter(kindMask and exclude.fullyExcludedDescriptorKinds.inv(), excludes + listOf(exclude))
|
||||||
|
|
||||||
public fun withoutKinds(kinds: Int): DescriptorKindFilter
|
public fun withoutKinds(kinds: Int): DescriptorKindFilter
|
||||||
= DescriptorKindFilter(kindMask and kinds.inv(), excludes)
|
= DescriptorKindFilter(kindMask and kinds.inv(), excludes)
|
||||||
@@ -196,20 +196,29 @@ public class DescriptorKindFilter(
|
|||||||
public trait DescriptorKindExclude {
|
public trait DescriptorKindExclude {
|
||||||
public fun matches(descriptor: DeclarationDescriptor): Boolean
|
public fun matches(descriptor: DeclarationDescriptor): Boolean
|
||||||
|
|
||||||
|
public val fullyExcludedDescriptorKinds: Int
|
||||||
|
|
||||||
override fun toString() = this.javaClass.getSimpleName()
|
override fun toString() = this.javaClass.getSimpleName()
|
||||||
|
|
||||||
public object Extensions : DescriptorKindExclude {
|
public object Extensions : DescriptorKindExclude {
|
||||||
override fun matches(descriptor: DeclarationDescriptor)
|
override fun matches(descriptor: DeclarationDescriptor)
|
||||||
= descriptor is CallableDescriptor && descriptor.getExtensionReceiverParameter() != null
|
= descriptor is CallableDescriptor && descriptor.getExtensionReceiverParameter() != null
|
||||||
|
|
||||||
|
override val fullyExcludedDescriptorKinds: Int get() = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public object NonExtensions : DescriptorKindExclude {
|
public object NonExtensions : DescriptorKindExclude {
|
||||||
override fun matches(descriptor: DeclarationDescriptor)
|
override fun matches(descriptor: DeclarationDescriptor)
|
||||||
= descriptor !is CallableDescriptor || descriptor.getExtensionReceiverParameter() == null
|
= descriptor !is CallableDescriptor || descriptor.getExtensionReceiverParameter() == null
|
||||||
|
|
||||||
|
override val fullyExcludedDescriptorKinds: Int
|
||||||
|
get() = DescriptorKindFilter.ALL_KINDS_MASK and (DescriptorKindFilter.FUNCTIONS_MASK or DescriptorKindFilter.VARIABLES_MASK).inv()
|
||||||
}
|
}
|
||||||
|
|
||||||
public object EnumEntry : DescriptorKindExclude {
|
public object EnumEntry : DescriptorKindExclude {
|
||||||
override fun matches(descriptor: DeclarationDescriptor)
|
override fun matches(descriptor: DeclarationDescriptor)
|
||||||
= descriptor is ClassDescriptor && descriptor.getKind() == ClassKind.ENUM_ENTRY
|
= descriptor is ClassDescriptor && descriptor.getKind() == ClassKind.ENUM_ENTRY
|
||||||
|
|
||||||
|
override val fullyExcludedDescriptorKinds: Int get() = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -221,9 +221,7 @@ public class ReferenceVariantsHelper(
|
|||||||
nameFilter: (Name) -> Boolean
|
nameFilter: (Name) -> Boolean
|
||||||
) {
|
) {
|
||||||
if (kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) return
|
if (kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) return
|
||||||
val extensionsFilter = kindFilter
|
val extensionsFilter = kindFilter.exclude(DescriptorKindExclude.NonExtensions)
|
||||||
.restrictedToKinds(DescriptorKindFilter.FUNCTIONS_MASK or DescriptorKindFilter.VARIABLES_MASK)
|
|
||||||
.exclude(DescriptorKindExclude.NonExtensions)
|
|
||||||
|
|
||||||
fun processExtension(descriptor: DeclarationDescriptor) {
|
fun processExtension(descriptor: DeclarationDescriptor) {
|
||||||
addAll((descriptor as CallableDescriptor).substituteExtensionIfCallable(receiver, callType, context, dataFlowInfo, resolutionScope.getContainingDeclaration()))
|
addAll((descriptor as CallableDescriptor).substituteExtensionIfCallable(receiver, callType, context, dataFlowInfo, resolutionScope.getContainingDeclaration()))
|
||||||
|
|||||||
+4
-4
@@ -233,11 +233,11 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
|||||||
private companion object {
|
private companion object {
|
||||||
object NonAnnotationClassifierExclude : DescriptorKindExclude {
|
object NonAnnotationClassifierExclude : DescriptorKindExclude {
|
||||||
override fun matches(descriptor: DeclarationDescriptor): Boolean {
|
override fun matches(descriptor: DeclarationDescriptor): Boolean {
|
||||||
return if (descriptor is ClassDescriptor)
|
if (descriptor !is ClassifierDescriptor) return false
|
||||||
descriptor.getKind() != ClassKind.ANNOTATION_CLASS
|
return descriptor !is ClassDescriptor || descriptor.getKind() != ClassKind.ANNOTATION_CLASS
|
||||||
else
|
|
||||||
descriptor !is ClassifierDescriptor
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val fullyExcludedDescriptorKinds: Int get() = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
val ANNOTATION_TYPES_FILTER = DescriptorKindFilter(DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK) exclude NonAnnotationClassifierExclude
|
val ANNOTATION_TYPES_FILTER = DescriptorKindFilter(DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK) exclude NonAnnotationClassifierExclude
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
class A {
|
||||||
|
kot<caret>
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXIST: "kotlin"
|
||||||
+6
@@ -865,6 +865,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("TopLevelPackageInClassBody.kt")
|
||||||
|
public void testTopLevelPackageInClassBody() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TopLevelPackageInClassBody.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("TypeParameterFromOuterClass.kt")
|
@TestMetadata("TypeParameterFromOuterClass.kt")
|
||||||
public void testTypeParameterFromOuterClass() throws Exception {
|
public void testTypeParameterFromOuterClass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeParameterFromOuterClass.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeParameterFromOuterClass.kt");
|
||||||
|
|||||||
+6
@@ -865,6 +865,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("TopLevelPackageInClassBody.kt")
|
||||||
|
public void testTopLevelPackageInClassBody() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TopLevelPackageInClassBody.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("TypeParameterFromOuterClass.kt")
|
@TestMetadata("TypeParameterFromOuterClass.kt")
|
||||||
public void testTypeParameterFromOuterClass() throws Exception {
|
public void testTypeParameterFromOuterClass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeParameterFromOuterClass.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeParameterFromOuterClass.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user