[FIR] Don't check @ExtensionFunction in fir consistency tests

This commit is contained in:
Dmitriy Novozhilov
2019-10-30 18:48:06 +03:00
parent ad9bf62b2f
commit 6f91c0e679
@@ -14,13 +14,18 @@ import com.intellij.psi.PsiFile
import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.IElementType
import com.intellij.util.PathUtil import com.intellij.util.PathUtil
import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.FirSessionBase
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirWrappedDelegateExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirWrappedDelegateExpressionImpl
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -130,7 +135,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
override fun visitElement(element: FirElement) { override fun visitElement(element: FirElement) {
// NB: types are reused sometimes (e.g. in accessors) // NB: types are reused sometimes (e.g. in accessors)
if (!result.add(element)) { if (!result.add(element)) {
if (element !is FirTypeRef && element !is FirNoReceiverExpression && element !is FirEmptyContractDescription) { if (element !is FirTypeRef && element !is FirNoReceiverExpression && element !is FirEmptyContractDescription && !element.isExtensionFunctionAnnotationCall) {
val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString() val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString()
throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump") throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump")
} }
@@ -147,7 +152,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
override fun <E : FirElement> transformElement(element: E, data: Unit): CompositeTransformResult<E> { override fun <E : FirElement> transformElement(element: E, data: Unit): CompositeTransformResult<E> {
if (!result.add(element)) { if (!result.add(element)) {
if (element !is FirTypeRef && element !is FirNoReceiverExpression && element !is FirEmptyContractDescription) { if (element !is FirTypeRef && element !is FirNoReceiverExpression && element !is FirEmptyContractDescription && !element.isExtensionFunctionAnnotationCall) {
val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString() val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString()
throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump") throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump")
} }
@@ -166,3 +171,11 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
} }
} }
private val FirElement.isExtensionFunctionAnnotationCall: Boolean get() = (this as? FirAnnotationCall)?.let {
(it.annotationTypeRef as? FirResolvedTypeRef)?.let {
(it.type as? ConeClassLikeType)?.let {
it.lookupTag.classId.asString() == "kotlin/ExtensionFunctionType"
}
}
} == true