[FIR] Add some helper functions for checkers

This commit is contained in:
vldf
2020-08-27 10:51:56 +03:00
committed by Mikhail Glukhikh
parent 96f24a43be
commit f9c7cce11d
@@ -5,13 +5,15 @@
package org.jetbrains.kotlin.fir.analysis.checkers
import com.intellij.lang.LighterASTNode
import com.intellij.openapi.util.Ref
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.Visibilities
import org.jetbrains.kotlin.fir.Visibility
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
@@ -310,21 +312,14 @@ fun FirClass<*>.findNonInterfaceSupertype(context: CheckerContext): FirTypeRef?
}
/**
* Returns the source element of the eq operator in assignment statement
* Returns KtModifierToken by Modality
*/
fun FirSourceElement.eqOperatorSource(): FirSourceElement? {
return when (this) {
is FirLightSourceElement -> {
val children = Ref<Array<LighterASTNode>>()
val tree = tree
tree.getChildren(element, children)
val element = children.get().getOrNull(2) ?: return null
element.toFirLightSourceElement(element.startOffset, element.endOffset, tree)
}
is FirPsiSourceElement<*> -> {
val operator = psi.children.getOrNull(1)
operator?.toFirPsiSourceElement()
}
else -> null
}
}
fun Modality.toToken(): KtModifierKeywordToken = when (this) {
Modality.FINAL -> KtTokens.FINAL_KEYWORD
Modality.SEALED -> KtTokens.SEALED_KEYWORD
Modality.OPEN -> KtTokens.OPEN_KEYWORD
Modality.ABSTRACT -> KtTokens.ABSTRACT_KEYWORD
}
val FirFunctionCall.isIterator
get() = this.calleeReference.name.asString() == "<iterator>"