Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -130,30 +130,32 @@ abstract class InjectionPoint<T : PsiElement> {
return doCreateCollectVisitor(at, target, targetClass, mode)?.also {
val isInsideSlice = at.parentOfType<PsiAnnotation>()?.hasQualifiedName(SLICE) == true
val defaultSpecifier = if (isInsideSlice) InjectionPointSpecifier.FIRST else InjectionPointSpecifier.ALL
addFilters(at, targetClass, it, defaultSpecifier)
addFilters(at, targetClass, it, defaultSpecifier, mode)
}
}

protected open fun addFilters(
at: PsiAnnotation,
targetClass: ClassNode,
collectVisitor: CollectVisitor<T>,
defaultSpecifier: InjectionPointSpecifier
defaultSpecifier: InjectionPointSpecifier,
mode: CollectVisitor.Mode,
) {
addStandardFilters(at, targetClass, collectVisitor, defaultSpecifier)
addStandardFilters(at, targetClass, collectVisitor, defaultSpecifier, mode)
}

fun addStandardFilters(
at: PsiAnnotation,
targetClass: ClassNode,
collectVisitor: CollectVisitor<T>,
defaultSpecifier: InjectionPointSpecifier
defaultSpecifier: InjectionPointSpecifier,
mode: CollectVisitor.Mode,
) {
addShiftSupport(at, targetClass, collectVisitor)
addSliceFilter(at, targetClass, collectVisitor)
// make sure the ordinal filter is last, so that the ordinal only increments once the other filters have passed
addOrdinalFilter(at, targetClass, collectVisitor)
addSpecifierFilter(at, targetClass, collectVisitor, defaultSpecifier)
addSpecifierFilter(at, targetClass, collectVisitor, defaultSpecifier, mode)
}

protected open fun addShiftSupport(at: PsiAnnotation, targetClass: ClassNode, collectVisitor: CollectVisitor<*>) {
Expand Down Expand Up @@ -213,8 +215,13 @@ abstract class InjectionPoint<T : PsiElement> {
at: PsiAnnotation,
targetClass: ClassNode,
collectVisitor: CollectVisitor<T>,
defaultSpecifier: InjectionPointSpecifier
defaultSpecifier: InjectionPointSpecifier,
mode: CollectVisitor.Mode,
) {
if (mode == CollectVisitor.Mode.COMPLETION) {
// Ignore the specifier, we want to show all results
return
}
val point = at.findDeclaredAttributeValue("value")?.constantStringValue ?: return
val specifier = InjectionPointSpecifier.entries.firstOrNull { point.endsWith(":$it") } ?: defaultSpecifier
collectVisitor.addResultFilter("specifier") { results, _ ->
Expand Down