FIR: change DOT_BY_SELECTOR to DOT_BY_QUALIFIED strategy
This commit is contained in:
+1
-1
@@ -36,7 +36,7 @@ enum class PositioningStrategy(private val strategy: String) {
|
||||
PARAMETER_VARARG_MODIFIER("PARAMETER_VARARG_MODIFIER"),
|
||||
DECLARATION_RETURN_TYPE("DECLARATION_RETURN_TYPE"),
|
||||
OVERRIDE_MODIFIER("OVERRIDE_MODIFIER"),
|
||||
DOT_BY_SELECTOR("DOT_BY_SELECTOR"),
|
||||
DOT_BY_QUALIFIED("DOT_BY_QUALIFIED"),
|
||||
OPEN_MODIFIER("OPEN_MODIFIER"),
|
||||
WHEN_EXPRESSION("WHEN_EXPRESSION"),
|
||||
IF_EXPRESSION("IF_EXPRESSION"),
|
||||
|
||||
+1
-1
@@ -361,7 +361,7 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
|
||||
}
|
||||
|
||||
val NULLABILITY by object : DiagnosticGroup("Nullability") {
|
||||
val UNSAFE_CALL by error<FirSourceElement, PsiElement>(PositioningStrategy.DOT_BY_SELECTOR) {
|
||||
val UNSAFE_CALL by error<FirSourceElement, PsiElement>(PositioningStrategy.DOT_BY_QUALIFIED) {
|
||||
parameter<ConeKotlinType>("receiverType")
|
||||
}
|
||||
val UNSAFE_IMPLICIT_INVOKE_CALL by error<FirSourceElement, PsiElement> {
|
||||
|
||||
+1
-1
@@ -234,7 +234,7 @@ object FirErrors {
|
||||
val WRONG_IMPLIES_CONDITION by warning0<FirSourceElement, PsiElement>()
|
||||
|
||||
// Nullability
|
||||
val UNSAFE_CALL by error1<FirSourceElement, PsiElement, ConeKotlinType>(SourceElementPositioningStrategies.DOT_BY_SELECTOR)
|
||||
val UNSAFE_CALL by error1<FirSourceElement, PsiElement, ConeKotlinType>(SourceElementPositioningStrategies.DOT_BY_QUALIFIED)
|
||||
val UNSAFE_IMPLICIT_INVOKE_CALL by error1<FirSourceElement, PsiElement, ConeKotlinType>()
|
||||
val UNSAFE_INFIX_CALL by error3<FirSourceElement, KtExpression, FirExpression, String, FirExpression>()
|
||||
val UNSAFE_OPERATOR_CALL by error3<FirSourceElement, KtExpression, FirExpression, String, FirExpression>()
|
||||
|
||||
+3
-9
@@ -315,23 +315,17 @@ object LightTreePositioningStrategies {
|
||||
}
|
||||
}
|
||||
|
||||
val DOT_BY_SELECTOR: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
val DOT_BY_QUALIFIED: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
override fun mark(
|
||||
node: LighterASTNode,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
||||
): List<TextRange> {
|
||||
if (node.tokenType != KtNodeTypes.REFERENCE_EXPRESSION && node.tokenType != KtNodeTypes.CALL_EXPRESSION) {
|
||||
// TODO: normally CALL_EXPRESSION should not be here. In PSI we have REFERENCE_EXPRESSION even for x.bar() case
|
||||
// Remove CALL_EXPRESSION from here and repeat code below twice (see PSI counterpart) when fixed
|
||||
if (node.tokenType != KtNodeTypes.DOT_QUALIFIED_EXPRESSION) {
|
||||
return super.mark(node, startOffset, endOffset, tree)
|
||||
}
|
||||
val parentNode = tree.getParent(node) ?: return super.mark(node, startOffset, endOffset, tree)
|
||||
if (parentNode.tokenType == KtNodeTypes.DOT_QUALIFIED_EXPRESSION) {
|
||||
return markElement(tree.dotOperator(parentNode) ?: node, startOffset, endOffset, tree, node)
|
||||
}
|
||||
return super.mark(node, startOffset, endOffset, tree)
|
||||
return markElement(tree.dotOperator(node) ?: node, startOffset, endOffset, tree, node)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -98,9 +98,9 @@ object SourceElementPositioningStrategies {
|
||||
PositioningStrategies.PARAMETER_VARARG_MODIFIER
|
||||
)
|
||||
|
||||
val DOT_BY_SELECTOR = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.DOT_BY_SELECTOR,
|
||||
PositioningStrategies.DOT_BY_SELECTOR
|
||||
val DOT_BY_QUALIFIED = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.DOT_BY_QUALIFIED,
|
||||
PositioningStrategies.DOT_BY_QUALIFIED
|
||||
)
|
||||
|
||||
val SELECTOR_BY_QUALIFIED = SourceElementPositioningStrategy(
|
||||
|
||||
@@ -711,15 +711,11 @@ object PositioningStrategies {
|
||||
}
|
||||
}
|
||||
|
||||
val DOT_BY_SELECTOR: PositioningStrategy<PsiElement> = object : PositioningStrategy<PsiElement>() {
|
||||
val DOT_BY_QUALIFIED: PositioningStrategy<PsiElement> = object : PositioningStrategy<PsiElement>() {
|
||||
override fun mark(element: PsiElement): List<TextRange> {
|
||||
when (element) {
|
||||
is KtNameReferenceExpression -> {
|
||||
var parent = element
|
||||
repeat(2) {
|
||||
parent = parent.parent
|
||||
(parent as? KtDotQualifiedExpression)?.operationTokenNode?.psi?.let { return mark(it) }
|
||||
}
|
||||
is KtDotQualifiedExpression -> {
|
||||
return mark(element.operationTokenNode.psi)
|
||||
}
|
||||
}
|
||||
return super.mark(element)
|
||||
|
||||
Reference in New Issue
Block a user