FIR: fix MANY_COMPANION_OBJECTS positioning
This commit is contained in:
+2
-2
@@ -3,7 +3,7 @@ class A {
|
||||
|
||||
}
|
||||
|
||||
companion <!MANY_COMPANION_OBJECTS, REDECLARATION!>object<!> {
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> <!REDECLARATION!>object<!> {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ class B {
|
||||
|
||||
}
|
||||
|
||||
companion <!MANY_COMPANION_OBJECTS!>object B<!> {
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> object B {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -45,6 +45,7 @@ enum class PositioningStrategy(private val strategy: String) {
|
||||
SELECTOR_BY_QUALIFIED("SELECTOR_BY_QUALIFIED"),
|
||||
REFERENCE_BY_QUALIFIED("REFERENCE_BY_QUALIFIED"),
|
||||
PRIVATE_MODIFIER("PRIVATE_MODIFIER"),
|
||||
COMPANION_OBJECT("COMPANION_OBJECT"),
|
||||
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -252,7 +252,7 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
|
||||
}
|
||||
|
||||
val REDECLARATIONS by object : DiagnosticGroup("Redeclarations") {
|
||||
val MANY_COMPANION_OBJECTS by error<FirSourceElement, PsiElement>()
|
||||
val MANY_COMPANION_OBJECTS by error<FirSourceElement, KtObjectDeclaration>(PositioningStrategy.COMPANION_OBJECT)
|
||||
val CONFLICTING_OVERLOADS by error<FirSourceElement, PsiElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
||||
parameter<Collection<AbstractFirBasedSymbol<*>>>("conflictingOverloads")
|
||||
}
|
||||
|
||||
+2
-1
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.psi.KtFunction
|
||||
import org.jetbrains.kotlin.psi.KtIfExpression
|
||||
import org.jetbrains.kotlin.psi.KtModifierListOwner
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtParameter
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.KtPropertyAccessor
|
||||
@@ -181,7 +182,7 @@ object FirErrors {
|
||||
val NON_FINAL_MEMBER_IN_OBJECT by warning0<FirSourceElement, KtNamedDeclaration>(SourceElementPositioningStrategies.OPEN_MODIFIER)
|
||||
|
||||
// Redeclarations
|
||||
val MANY_COMPANION_OBJECTS by error0<FirSourceElement, PsiElement>()
|
||||
val MANY_COMPANION_OBJECTS by error0<FirSourceElement, KtObjectDeclaration>(SourceElementPositioningStrategies.COMPANION_OBJECT)
|
||||
val CONFLICTING_OVERLOADS by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
val REDECLARATION by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>()
|
||||
val ANY_METHOD_IMPLEMENTED_IN_INTERFACE by error0<FirSourceElement, PsiElement>()
|
||||
|
||||
+15
@@ -55,6 +55,18 @@ object LightTreePositioningStrategies {
|
||||
}
|
||||
}
|
||||
|
||||
val COMPANION_OBJECT: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
override fun mark(
|
||||
node: LighterASTNode,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
tree: FlyweightCapableTreeStructure<LighterASTNode>
|
||||
): List<TextRange> {
|
||||
val target = tree.companionKeyword(node) ?: node
|
||||
return markElement(target, startOffset, endOffset, tree, node)
|
||||
}
|
||||
}
|
||||
|
||||
val SECONDARY_CONSTRUCTOR_DELEGATION_CALL: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
override fun mark(
|
||||
node: LighterASTNode,
|
||||
@@ -405,6 +417,9 @@ fun FirSourceElement.hasVar(): Boolean =
|
||||
fun FirSourceElement.hasPrimaryConstructor(): Boolean =
|
||||
treeStructure.primaryConstructor(lighterASTNode) != null
|
||||
|
||||
private fun FlyweightCapableTreeStructure<LighterASTNode>.companionKeyword(node: LighterASTNode): LighterASTNode? =
|
||||
modifierList(node)?.let { findChildByType(it, KtTokens.COMPANION_KEYWORD) }
|
||||
|
||||
private fun FlyweightCapableTreeStructure<LighterASTNode>.constructorKeyword(node: LighterASTNode): LighterASTNode? =
|
||||
findChildByType(node, KtTokens.CONSTRUCTOR_KEYWORD)
|
||||
|
||||
|
||||
+5
@@ -18,6 +18,11 @@ object SourceElementPositioningStrategies {
|
||||
PositioningStrategies.VAL_OR_VAR_NODE
|
||||
)
|
||||
|
||||
val COMPANION_OBJECT = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.COMPANION_OBJECT,
|
||||
PositioningStrategies.COMPANION_OBJECT
|
||||
)
|
||||
|
||||
val SECONDARY_CONSTRUCTOR_DELEGATION_CALL = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.SECONDARY_CONSTRUCTOR_DELEGATION_CALL,
|
||||
PositioningStrategies.SECONDARY_CONSTRUCTOR_DELEGATION_CALL
|
||||
|
||||
@@ -5,7 +5,7 @@ class A {
|
||||
companion <!REDECLARATION!>object<!> {
|
||||
val x = 1
|
||||
}
|
||||
companion <!MANY_COMPANION_OBJECTS, REDECLARATION!>object<!> {
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> <!REDECLARATION!>object<!> {
|
||||
val x = 1
|
||||
}
|
||||
}
|
||||
@@ -14,10 +14,10 @@ class AA {
|
||||
companion object {
|
||||
val x = 1
|
||||
}
|
||||
companion <!MANY_COMPANION_OBJECTS!>object A<!> {
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> object A {
|
||||
val x = 1
|
||||
}
|
||||
companion <!MANY_COMPANION_OBJECTS!>object AA<!> {
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> object AA {
|
||||
val x = 1
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -2,16 +2,16 @@ class A {
|
||||
inner class I {
|
||||
companion <!NESTED_CLASS_NOT_ALLOWED!>object A<!>
|
||||
|
||||
companion <!MANY_COMPANION_OBJECTS, NESTED_CLASS_NOT_ALLOWED!>object B<!>
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> <!NESTED_CLASS_NOT_ALLOWED!>object B<!>
|
||||
|
||||
companion <!MANY_COMPANION_OBJECTS, NESTED_CLASS_NOT_ALLOWED!>object C<!>
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> <!NESTED_CLASS_NOT_ALLOWED!>object C<!>
|
||||
}
|
||||
}
|
||||
|
||||
object O {
|
||||
companion object A
|
||||
|
||||
companion <!MANY_COMPANION_OBJECTS!>object B<!>
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> object B
|
||||
|
||||
companion <!MANY_COMPANION_OBJECTS!>object C<!>
|
||||
<!MANY_COMPANION_OBJECTS!>companion<!> object C
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user