[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 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.ClassKind
import org.jetbrains.kotlin.descriptors.Modality 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.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.declarations.* 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.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference 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? { fun Modality.toToken(): KtModifierKeywordToken = when (this) {
return when (this) { Modality.FINAL -> KtTokens.FINAL_KEYWORD
is FirLightSourceElement -> { Modality.SEALED -> KtTokens.SEALED_KEYWORD
val children = Ref<Array<LighterASTNode>>() Modality.OPEN -> KtTokens.OPEN_KEYWORD
val tree = tree Modality.ABSTRACT -> KtTokens.ABSTRACT_KEYWORD
tree.getChildren(element, children) }
val element = children.get().getOrNull(2) ?: return null
element.toFirLightSourceElement(element.startOffset, element.endOffset, tree) val FirFunctionCall.isIterator
} get() = this.calleeReference.name.asString() == "<iterator>"
is FirPsiSourceElement<*> -> {
val operator = psi.children.getOrNull(1)
operator?.toFirPsiSourceElement()
}
else -> null
}
}