Raw FIR: support a bunch of new elements + some fixes
Support: calls, constructor calls, annotation calls, arguments Support: enums, primary constructors, const modifier Support: inner modifier, qualified types Add: some base transformed types Fix: acceptChildren etc. Progress: #KT-24013
This commit is contained in:
committed by
Mikhail Glukhikh
parent
2ddf52123a
commit
3e06f426d0
@@ -16,11 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBody
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirAnnotationCallImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirBlockBodyImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionBodyImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
|
||||
import org.jetbrains.kotlin.fir.types.FirUserType
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.impl.*
|
||||
@@ -70,14 +66,17 @@ class RawFirBuilder(val session: FirSession) {
|
||||
this.accept(this@Visitor, Unit) as R
|
||||
|
||||
private fun KtTypeReference?.toFirOrImplicitType(): FirType =
|
||||
convertSafe<FirUserType>() ?: FirImplicitTypeImpl(session, this)
|
||||
convertSafe() ?: FirImplicitTypeImpl(session, this)
|
||||
|
||||
private fun KtTypeReference?.toFirOrErrorType(): FirType =
|
||||
convertSafe<FirUserType>() ?: FirErrorTypeImpl(session, this, false)
|
||||
convertSafe() ?: FirErrorTypeImpl(session, this, false, if (this == null) "Incomplete code" else "Conversion failed")
|
||||
|
||||
private fun KtExpression?.toFirBody(): FirBody? =
|
||||
convertSafe<FirExpression>()?.let { it as? FirBody ?: FirExpressionBodyImpl(session, it) }
|
||||
|
||||
private fun KtExpression?.toFirExpression(): FirExpression =
|
||||
convertSafe() ?: FirErrorExpressionImpl(session, this)
|
||||
|
||||
private fun KtPropertyAccessor?.toFirPropertyAccessor(
|
||||
property: KtProperty,
|
||||
propertyType: FirType,
|
||||
@@ -143,6 +142,59 @@ class RawFirBuilder(val session: FirSession) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtCallElement.extractArgumentsTo(container: FirAbstractCall) {
|
||||
for (argument in this.valueArguments) {
|
||||
container.arguments += argument.getArgumentExpression().toFirExpression()
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtClassOrObject.extractSuperTypeListEntriesTo(container: FirClassImpl) {
|
||||
var superTypeCallEntry: KtSuperTypeCallEntry? = null
|
||||
for (superTypeListEntry in superTypeListEntries) {
|
||||
when (superTypeListEntry) {
|
||||
is KtSuperTypeEntry -> {
|
||||
container.superTypes += superTypeListEntry.typeReference.toFirOrErrorType()
|
||||
}
|
||||
is KtSuperTypeCallEntry -> {
|
||||
container.superTypes += superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType()
|
||||
superTypeCallEntry = superTypeListEntry
|
||||
}
|
||||
is KtDelegatedSuperTypeEntry -> {
|
||||
val type = superTypeListEntry.typeReference.toFirOrErrorType()
|
||||
container.superTypes += FirDelegatedTypeImpl(
|
||||
type,
|
||||
superTypeListEntry.delegateExpression.convertSafe()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
val firPrimaryConstructor = primaryConstructor?.toFirConstructor(superTypeCallEntry) ?: return
|
||||
container.declarations += firPrimaryConstructor
|
||||
}
|
||||
|
||||
private fun KtPrimaryConstructor.toFirConstructor(superTypeCallEntry: KtSuperTypeCallEntry?): FirConstructor {
|
||||
val constructorCallee = superTypeCallEntry?.calleeExpression
|
||||
val firDelegatedCall = constructorCallee?.let {
|
||||
FirDelegatedConstructorCallImpl(
|
||||
session,
|
||||
constructorCallee,
|
||||
FirErrorTypeImpl(session, constructorCallee, false, "Not implemented yet"),
|
||||
isThis = false
|
||||
).apply {
|
||||
superTypeCallEntry.extractArgumentsTo(this)
|
||||
}
|
||||
}
|
||||
val firConstructor = FirPrimaryConstructorImpl(
|
||||
session,
|
||||
this,
|
||||
visibility,
|
||||
firDelegatedCall
|
||||
)
|
||||
extractAnnotationsTo(firConstructor)
|
||||
extractValueParametersTo(firConstructor)
|
||||
return firConstructor
|
||||
}
|
||||
|
||||
override fun visitKtFile(file: KtFile, data: Unit): FirElement {
|
||||
val firFile = FirFileImpl(session, file, file.name, file.packageFqName)
|
||||
for (annotationEntry in file.annotationEntries) {
|
||||
@@ -163,6 +215,20 @@ class RawFirBuilder(val session: FirSession) {
|
||||
return firFile
|
||||
}
|
||||
|
||||
override fun visitEnumEntry(enumEntry: KtEnumEntry, data: Unit): FirElement {
|
||||
val firEnumEntry = FirEnumEntryImpl(
|
||||
session,
|
||||
enumEntry,
|
||||
enumEntry.nameAsSafeName
|
||||
)
|
||||
enumEntry.extractAnnotationsTo(firEnumEntry)
|
||||
enumEntry.extractSuperTypeListEntriesTo(firEnumEntry)
|
||||
for (declaration in enumEntry.declarations) {
|
||||
firEnumEntry.declarations += declaration.convert<FirDeclaration>()
|
||||
}
|
||||
return firEnumEntry
|
||||
}
|
||||
|
||||
override fun visitClassOrObject(classOrObject: KtClassOrObject, data: Unit): FirElement {
|
||||
val classKind = when (classOrObject) {
|
||||
is KtObjectDeclaration -> ClassKind.OBJECT
|
||||
@@ -181,29 +247,13 @@ class RawFirBuilder(val session: FirSession) {
|
||||
classOrObject.visibility,
|
||||
classOrObject.modality,
|
||||
classKind,
|
||||
isInner = classOrObject.hasModifier(KtTokens.INNER_KEYWORD),
|
||||
isCompanion = (classOrObject as? KtObjectDeclaration)?.isCompanion() == true,
|
||||
isData = (classOrObject as? KtClass)?.isData() == true
|
||||
)
|
||||
classOrObject.extractAnnotationsTo(firClass)
|
||||
classOrObject.extractTypeParametersTo(firClass)
|
||||
for (superTypeListEntry in classOrObject.superTypeListEntries) {
|
||||
when (superTypeListEntry) {
|
||||
is KtSuperTypeEntry -> {
|
||||
firClass.superTypes += superTypeListEntry.typeReference.toFirOrErrorType()
|
||||
}
|
||||
is KtSuperTypeCallEntry -> {
|
||||
firClass.superTypes += superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType()
|
||||
// TODO: primary constructor!
|
||||
}
|
||||
is KtDelegatedSuperTypeEntry -> {
|
||||
val type = superTypeListEntry.typeReference.toFirOrErrorType()
|
||||
firClass.superTypes += FirDelegatedTypeImpl(
|
||||
type,
|
||||
superTypeListEntry.delegateExpression.convertSafe()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
classOrObject.extractSuperTypeListEntriesTo(firClass)
|
||||
for (declaration in classOrObject.declarations) {
|
||||
firClass.declarations += declaration.convert<FirDeclaration>()
|
||||
}
|
||||
@@ -223,6 +273,11 @@ class RawFirBuilder(val session: FirSession) {
|
||||
}
|
||||
|
||||
override fun visitNamedFunction(function: KtNamedFunction, data: Unit): FirElement {
|
||||
if (function.name == null) {
|
||||
// TODO: return anonymous function here
|
||||
// TODO: what if name is not null but we're in expression position?
|
||||
return FirExpressionStub(session, function)
|
||||
}
|
||||
val firFunction = FirMemberFunctionImpl(
|
||||
session,
|
||||
function,
|
||||
@@ -246,15 +301,27 @@ class RawFirBuilder(val session: FirSession) {
|
||||
}
|
||||
|
||||
override fun visitSecondaryConstructor(constructor: KtSecondaryConstructor, data: Unit): FirElement {
|
||||
val firConstructor = FirSecondaryConstructorImpl(
|
||||
val firConstructor = FirConstructorImpl(
|
||||
session,
|
||||
constructor,
|
||||
constructor.visibility,
|
||||
constructor.getDelegationCall().convert(),
|
||||
constructor.bodyExpression.toFirBody()
|
||||
)
|
||||
constructor.extractAnnotationsTo(firConstructor)
|
||||
constructor.extractValueParametersTo(firConstructor)
|
||||
return super.visitSecondaryConstructor(constructor, data)
|
||||
return firConstructor
|
||||
}
|
||||
|
||||
override fun visitConstructorDelegationCall(call: KtConstructorDelegationCall, data: Unit): FirElement {
|
||||
val firConstructorCall = FirDelegatedConstructorCallImpl(
|
||||
session,
|
||||
call,
|
||||
FirErrorTypeImpl(session, call, false, "Not implemented yet"),
|
||||
call.isCallToThis || call.isImplicit
|
||||
)
|
||||
call.extractArgumentsTo(firConstructorCall)
|
||||
return firConstructorCall
|
||||
}
|
||||
|
||||
override fun visitAnonymousInitializer(initializer: KtAnonymousInitializer, data: Unit): FirElement {
|
||||
@@ -274,6 +341,7 @@ class RawFirBuilder(val session: FirSession) {
|
||||
property.visibility,
|
||||
property.modality,
|
||||
property.hasModifier(KtTokens.OVERRIDE_KEYWORD),
|
||||
property.hasModifier(KtTokens.CONST_KEYWORD),
|
||||
property.receiverTypeReference.convertSafe(),
|
||||
propertyType,
|
||||
property.isVar,
|
||||
@@ -298,18 +366,25 @@ class RawFirBuilder(val session: FirSession) {
|
||||
val firType = when (unwrappedElement) {
|
||||
is KtDynamicType -> FirDynamicTypeImpl(session, typeReference, isNullable)
|
||||
is KtUserType -> {
|
||||
val referenceExpression = unwrappedElement.referenceExpression
|
||||
var referenceExpression = unwrappedElement.referenceExpression
|
||||
if (referenceExpression != null) {
|
||||
val userType = FirUserTypeImpl(
|
||||
session, typeReference, isNullable,
|
||||
referenceExpression.getReferencedNameAsName()
|
||||
session, typeReference, isNullable
|
||||
)
|
||||
for (typeArgument in unwrappedElement.typeArguments) {
|
||||
userType.arguments += typeArgument.convert<FirTypeProjection>()
|
||||
}
|
||||
var qualifier: KtUserType? = unwrappedElement
|
||||
do {
|
||||
val firQualifier = FirQualifierPartImpl(referenceExpression!!.getReferencedNameAsName())
|
||||
for (typeArgument in qualifier!!.typeArguments) {
|
||||
firQualifier.typeArguments += typeArgument.convert<FirTypeProjection>()
|
||||
}
|
||||
userType.qualifier.add(0, firQualifier)
|
||||
|
||||
qualifier = qualifier.qualifier
|
||||
referenceExpression = qualifier?.referenceExpression
|
||||
} while (referenceExpression != null)
|
||||
userType
|
||||
} else {
|
||||
FirErrorTypeImpl(session, typeReference, isNullable)
|
||||
FirErrorTypeImpl(session, typeReference, isNullable, "Incomplete user type")
|
||||
}
|
||||
}
|
||||
is KtFunctionType -> {
|
||||
@@ -325,7 +400,7 @@ class RawFirBuilder(val session: FirSession) {
|
||||
}
|
||||
functionType
|
||||
}
|
||||
null -> FirErrorTypeImpl(session, typeReference, isNullable)
|
||||
null -> FirErrorTypeImpl(session, typeReference, isNullable, "Unwrapped type is null")
|
||||
else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}")
|
||||
}
|
||||
|
||||
@@ -336,12 +411,14 @@ class RawFirBuilder(val session: FirSession) {
|
||||
}
|
||||
|
||||
override fun visitAnnotationEntry(annotationEntry: KtAnnotationEntry, data: Unit): FirElement {
|
||||
return FirAnnotationCallImpl(
|
||||
val firAnnotationCall = FirAnnotationCallImpl(
|
||||
session,
|
||||
annotationEntry,
|
||||
annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget(),
|
||||
annotationEntry.typeReference.toFirOrErrorType()
|
||||
)
|
||||
annotationEntry.extractArgumentsTo(firAnnotationCall)
|
||||
return firAnnotationCall
|
||||
}
|
||||
|
||||
override fun visitTypeParameter(parameter: KtTypeParameter, data: Unit): FirElement {
|
||||
|
||||
@@ -22,11 +22,13 @@ interface FirElement {
|
||||
fun accept(visitor: FirVisitorVoid) =
|
||||
accept(visitor, null)
|
||||
|
||||
fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {}
|
||||
fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
fun acceptChildren(visitor: FirVisitorVoid) =
|
||||
acceptChildren(visitor, null)
|
||||
|
||||
fun <E : FirElement, D> transform(visitor: FirTransformer<D>, data: D): CompositeTransformResult<E> =
|
||||
accept(visitor, data) as CompositeTransformResult<E>
|
||||
CompositeTransformResult(accept(visitor, data))
|
||||
|
||||
fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement = this
|
||||
}
|
||||
@@ -118,7 +118,12 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
if (memberDeclaration.isInline) {
|
||||
print("inline ")
|
||||
}
|
||||
} else if (memberDeclaration is FirProperty) {
|
||||
if (memberDeclaration.isConst) {
|
||||
print("const ")
|
||||
}
|
||||
}
|
||||
|
||||
visitNamedDeclaration(memberDeclaration)
|
||||
}
|
||||
|
||||
@@ -130,7 +135,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
override fun visitDeclaration(declaration: FirDeclaration) {
|
||||
print(
|
||||
when (declaration) {
|
||||
is FirClass -> "class"
|
||||
is FirClass -> declaration.classKind.name.toLowerCase().replace("_", " ")
|
||||
is FirTypeAlias -> "typealias"
|
||||
is FirNamedFunction -> "function"
|
||||
is FirProperty -> "property"
|
||||
@@ -146,6 +151,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
override fun visitClass(klass: FirClass) {
|
||||
visitMemberDeclaration(klass)
|
||||
val attributes = listOfNotNull(
|
||||
"inner".takeIf { klass.isInner },
|
||||
"companion".takeIf { klass.isCompanion },
|
||||
"data".takeIf { klass.isData }
|
||||
)
|
||||
@@ -203,6 +209,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
constructor.valueParameters.renderParameters()
|
||||
constructor.delegatedConstructor?.accept(this)
|
||||
constructor.body?.accept(this)
|
||||
if (constructor.body == null) {
|
||||
println()
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) {
|
||||
@@ -306,8 +315,8 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
visitCall(annotationCall)
|
||||
}
|
||||
|
||||
override fun visitConstructorCall(constructorCall: FirConstructorCall) {
|
||||
visitCall(constructorCall)
|
||||
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
|
||||
visitCall(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
override fun visitType(type: FirType) {
|
||||
@@ -365,11 +374,16 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
|
||||
override fun visitUserType(userType: FirUserType) {
|
||||
userType.annotations.renderAnnotations()
|
||||
print(userType.name)
|
||||
if (userType.arguments.isNotEmpty()) {
|
||||
print("<")
|
||||
userType.arguments.renderSeparated()
|
||||
print(">")
|
||||
for ((index, qualifier) in userType.qualifier.withIndex()) {
|
||||
if (index != 0) {
|
||||
print(".")
|
||||
}
|
||||
print(qualifier.name)
|
||||
if (qualifier.typeArguments.isNotEmpty()) {
|
||||
print("<")
|
||||
qualifier.typeArguments.renderSeparated()
|
||||
print(">")
|
||||
}
|
||||
}
|
||||
visitTypeWithNullability(userType)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir
|
||||
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
fun <T : FirElement, D> MutableList<T>.transformInplace(transformer: FirTransformer<D>, data: D) {
|
||||
val iterator = this.listIterator()
|
||||
while (iterator.hasNext()) {
|
||||
val next = iterator.next()
|
||||
val result = next.transform<T, D>(transformer, data)
|
||||
if (result.isSingle) {
|
||||
iterator.set(result.single)
|
||||
} else {
|
||||
val resultIterator = result.list.listIterator()
|
||||
if (!resultIterator.hasNext()) {
|
||||
iterator.remove()
|
||||
} else {
|
||||
iterator.set(resultIterator.next())
|
||||
}
|
||||
while (resultIterator.hasNext()) {
|
||||
iterator.add(resultIterator.next())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ interface FirCallableMember : @VisitedSupertype FirDeclaration, FirMemberDeclara
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitCallableMember(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
receiverType?.accept(visitor, data)
|
||||
super<FirMemberDeclaration>.acceptChildren(visitor, data)
|
||||
returnType.accept(visitor, data)
|
||||
|
||||
@@ -6,17 +6,21 @@
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
// May be all containers should be properties and not base classes
|
||||
// About descriptors: introduce something like FirDescriptor which is FirUnresolved at the beginning and FirSymbol(descriptor) at the end
|
||||
@BaseTransformedType
|
||||
interface FirClass : FirDeclarationContainer, FirMemberDeclaration {
|
||||
// including delegated types
|
||||
val superTypes: List<FirType>
|
||||
|
||||
val classKind: ClassKind
|
||||
|
||||
val isInner: Boolean
|
||||
|
||||
val isCompanion: Boolean
|
||||
|
||||
val isData: Boolean
|
||||
@@ -24,7 +28,7 @@ interface FirClass : FirDeclarationContainer, FirMemberDeclaration {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitClass(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super.acceptChildren(visitor, data)
|
||||
for (superType in superTypes) {
|
||||
superType.accept(visitor, data)
|
||||
|
||||
@@ -6,21 +6,26 @@
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirConstructor : FirFunction, FirAnnotationContainer {
|
||||
val delegatedConstructor: FirConstructorCall?
|
||||
val delegatedConstructor: FirDelegatedConstructorCall?
|
||||
|
||||
val visibility: Visibility
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitConstructor(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
delegatedConstructor?.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -14,7 +14,7 @@ interface FirDeclarationWithBody : FirDeclaration {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitDeclarationWithBody(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
body?.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
@@ -5,19 +5,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCall
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirEnumEntry : FirClass {
|
||||
val arguments: List<FirExpression>
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirEnumEntry : @VisitedSupertype FirClass, FirCall {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitEnumEntry(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
for (argument in arguments) {
|
||||
argument.accept(visitor, data)
|
||||
}
|
||||
super.acceptChildren(visitor, data)
|
||||
super<FirClass>.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirFile : @VisitedSupertype FirPackageFragment, FirDeclaration, FirAnnotationContainer {
|
||||
val name: String
|
||||
|
||||
@@ -20,7 +22,7 @@ interface FirFile : @VisitedSupertype FirPackageFragment, FirDeclaration, FirAnn
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitFile(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
for (import in imports) {
|
||||
import.accept(visitor, data)
|
||||
|
||||
@@ -15,7 +15,7 @@ interface FirFunction : FirDeclarationWithBody, FirAnnotationContainer {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitFunction(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
|
||||
@@ -18,7 +18,7 @@ interface FirMemberDeclaration : FirTypeParameterContainer, FirNamedDeclaration,
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitMemberDeclaration(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
for (typeParameter in typeParameters) {
|
||||
typeParameter.accept(visitor, data)
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
|
||||
val isOperator: Boolean
|
||||
|
||||
@@ -18,8 +20,11 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitNamedFunction(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirCallableMember>.acceptChildren(visitor, data)
|
||||
super<FirFunction>.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@ interface FirPackageFragment : FirElement, FirDeclarationContainer {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitPackageFragment(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
for (declaration in declarations) {
|
||||
declaration.accept(visitor, data)
|
||||
}
|
||||
|
||||
@@ -5,13 +5,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
// May be should not inherit FirVariable
|
||||
@BaseTransformedType
|
||||
interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMember, FirVariable {
|
||||
val isConst: Boolean
|
||||
|
||||
// Should it be nullable or have some default?
|
||||
val getter: FirPropertyAccessor
|
||||
|
||||
@@ -22,7 +26,7 @@ interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMember, Fir
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitProperty(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirCallableMember>.acceptChildren(visitor, data)
|
||||
initializer?.accept(visitor, data)
|
||||
delegate?.accept(visitor, data)
|
||||
|
||||
@@ -19,8 +19,11 @@ interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclarati
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitPropertyAccessor(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
||||
super<FirFunction>.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -5,18 +5,16 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirTypeAlias : FirMemberDeclaration, FirAnnotationContainer {
|
||||
interface FirTypeAlias : FirMemberDeclaration {
|
||||
val abbreviatedType: FirType
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitTypeAlias(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super.acceptChildren(visitor, data)
|
||||
abbreviatedType.accept(visitor, data)
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirTypeParameter : FirNamedDeclaration, FirAnnotationContainer {
|
||||
val variance: Variance
|
||||
|
||||
@@ -18,7 +20,7 @@ interface FirTypeParameter : FirNamedDeclaration, FirAnnotationContainer {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitTypeParameter(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
for (bound in bounds) {
|
||||
|
||||
@@ -15,7 +15,7 @@ interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitTypedDeclaration(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
returnType.accept(visitor, data)
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration {
|
||||
val isCrossinline: Boolean
|
||||
|
||||
@@ -21,7 +23,7 @@ interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclarat
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitValueParameter(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
||||
defaultValue?.accept(visitor, data)
|
||||
}
|
||||
|
||||
@@ -12,20 +12,32 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirClassImpl(
|
||||
open class FirClassImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
override val classKind: ClassKind,
|
||||
override val isCompanion: Boolean,
|
||||
override val isData: Boolean
|
||||
final override val classKind: ClassKind,
|
||||
final override val isInner: Boolean,
|
||||
final override val isCompanion: Boolean,
|
||||
final override val isData: Boolean
|
||||
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality), FirClass {
|
||||
override val superTypes = mutableListOf<FirType>()
|
||||
|
||||
override val declarations = mutableListOf<FirDeclaration>()
|
||||
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirClass {
|
||||
typeParameters.transformInplace(transformer, data)
|
||||
superTypes.transformInplace(transformer, data)
|
||||
declarations.transformInplace(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -10,12 +10,12 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBody
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
|
||||
class FirSecondaryConstructorImpl(
|
||||
open class FirConstructorImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val visibility: Visibility,
|
||||
override val delegatedConstructor: FirConstructorCall?,
|
||||
final override val visibility: Visibility,
|
||||
final override val delegatedConstructor: FirDelegatedConstructorCall?,
|
||||
body: FirBody?
|
||||
) : FirAbstractFunction(session, psi, body), FirConstructor
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirEnumEntryImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
name: Name
|
||||
) : FirClassImpl(
|
||||
session,
|
||||
psi,
|
||||
name,
|
||||
visibility = Visibilities.UNKNOWN,
|
||||
modality = Modality.FINAL,
|
||||
classKind = ClassKind.ENUM_ENTRY,
|
||||
isInner = false,
|
||||
isCompanion = false,
|
||||
isData = false
|
||||
), FirEnumEntry {
|
||||
override val arguments = mutableListOf<FirExpression>()
|
||||
}
|
||||
@@ -6,11 +6,14 @@
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirFileImpl(
|
||||
session: FirSession,
|
||||
@@ -21,4 +24,10 @@ class FirFileImpl(
|
||||
override val imports = mutableListOf<FirImport>()
|
||||
|
||||
override val declarations = mutableListOf<FirDeclaration>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
imports.transformInplace(transformer, data)
|
||||
declarations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
}
|
||||
+1
@@ -22,6 +22,7 @@ class FirMemberPropertyImpl(
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
isOverride: Boolean,
|
||||
override val isConst: Boolean,
|
||||
receiverType: FirType?,
|
||||
returnType: FirType,
|
||||
override val isVar: Boolean,
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
|
||||
class FirPrimaryConstructorImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
visibility: Visibility,
|
||||
delegatedConstructor: FirDelegatedConstructorCall?
|
||||
) : FirConstructorImpl(session, psi, visibility, delegatedConstructor, body = null)
|
||||
@@ -6,9 +6,11 @@
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirAnnotationCall : FirCall {
|
||||
val annotationType: FirType
|
||||
|
||||
@@ -18,7 +20,7 @@ interface FirAnnotationCall : FirCall {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitAnnotationCall(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotationType.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
interface FirAnnotationContainer {
|
||||
val annotations: List<FirAnnotationCall>
|
||||
|
||||
fun <D> acceptAnnotations(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
fun <R, D> acceptAnnotations(visitor: FirVisitor<R, D>, data: D) {
|
||||
for (annotation in annotations) {
|
||||
annotation.accept(visitor, data)
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ interface FirBody : FirExpression {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitBody(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
for (statement in statements) {
|
||||
statement.accept(visitor, data)
|
||||
}
|
||||
|
||||
@@ -5,15 +5,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirCall : FirExpression {
|
||||
val arguments: List<FirExpression>
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitCall(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
for (argument in arguments) {
|
||||
argument.accept(visitor, data)
|
||||
}
|
||||
|
||||
+11
-4
@@ -6,15 +6,22 @@
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirConstructorCall : FirCall {
|
||||
interface FirDelegatedConstructorCall : FirCall, FirTypeProjectionContainer {
|
||||
// Do we need 'constructedType: FirType' here?
|
||||
val constructedType: FirType
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitConstructorCall(this, data)
|
||||
val isThis: Boolean
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
val isSuper: Boolean
|
||||
get() = !isThis
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitDelegatedConstructorCall(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
constructedType.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
interface FirErrorExpression : FirExpression
|
||||
@@ -5,9 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirStatement : FirElement {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitStatement(this, data)
|
||||
|
||||
@@ -22,7 +22,7 @@ interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, F
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitVariable(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
initializer?.accept(visitor, data)
|
||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
|
||||
abstract class FirAbstractCall(
|
||||
final override val session: FirSession,
|
||||
final override val psi: PsiElement?
|
||||
) : FirCall {
|
||||
final override val arguments = mutableListOf<FirExpression>()
|
||||
}
|
||||
+3
-5
@@ -13,10 +13,8 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
|
||||
class FirAnnotationCallImpl(
|
||||
override val session: FirSession,
|
||||
override val psi: PsiElement?,
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val useSiteTarget: AnnotationUseSiteTarget?,
|
||||
override val annotationType: FirType
|
||||
) : FirAnnotationCall {
|
||||
override val arguments = mutableListOf<FirExpression>()
|
||||
}
|
||||
) : FirAbstractCall(session, psi), FirAnnotationCall
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
|
||||
class FirDelegatedConstructorCallImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val constructedType: FirType,
|
||||
override val isThis: Boolean
|
||||
) : FirAbstractCall(session, psi), FirDelegatedConstructorCall {
|
||||
override val typeArguments = mutableListOf<FirTypeProjection>()
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
|
||||
|
||||
class FirErrorExpressionImpl(
|
||||
override val session: FirSession,
|
||||
override val psi: PsiElement?
|
||||
) : FirErrorExpression
|
||||
@@ -16,7 +16,7 @@ interface FirDelegatedType : FirType {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitDelegatedType(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super.acceptChildren(visitor, data)
|
||||
delegate?.accept(visitor, data)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ package org.jetbrains.kotlin.fir.types
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirErrorType : FirType {
|
||||
val reason: String
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitErrorType(this, data)
|
||||
}
|
||||
@@ -19,7 +19,7 @@ interface FirFunctionType : FirTypeWithNullability {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitFunctionType(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
receiverType?.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
|
||||
@@ -5,15 +5,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.types
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirType : FirElement, FirAnnotationContainer {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitType(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.types
|
||||
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirTypeProjection : FirElement {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitTypeProjection(this, data)
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
package org.jetbrains.kotlin.fir.types
|
||||
|
||||
interface FirTypeProjectionContainer {
|
||||
val arguments: List<FirTypeProjection>
|
||||
val typeArguments: List<FirTypeProjection>
|
||||
}
|
||||
+1
-1
@@ -16,7 +16,7 @@ interface FirTypeProjectionWithVariance : FirTypeProjection {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitTypeProjectionWithVariance(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
type.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
@@ -8,16 +8,22 @@ package org.jetbrains.kotlin.fir.types
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
interface FirUserType : FirTypeWithNullability, FirTypeProjectionContainer {
|
||||
interface FirQualifierPart : FirTypeProjectionContainer {
|
||||
val name: Name
|
||||
}
|
||||
|
||||
interface FirUserType : FirTypeWithNullability {
|
||||
val qualifier: List<FirQualifierPart>
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitUserType(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super.acceptChildren(visitor, data)
|
||||
for (argument in arguments) {
|
||||
argument.accept(visitor, data)
|
||||
for (qualifier in qualifier.reversed()) {
|
||||
for (argument in qualifier.typeArguments) {
|
||||
argument.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ class FirDelegatedTypeImpl(
|
||||
return super<FirDelegatedType>.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> acceptChildren(visitor: FirVisitor<Unit, D>, data: D) {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
type.acceptChildren(visitor, data)
|
||||
delegate?.accept(visitor, data)
|
||||
}
|
||||
|
||||
@@ -13,7 +13,8 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
class FirErrorTypeImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
isNullable: Boolean
|
||||
isNullable: Boolean,
|
||||
override val reason: String
|
||||
) : FirAbstractAnnotatedType(session, psi, isNullable), FirErrorType {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||
return super<FirErrorType>.accept(visitor, data)
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.types.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.types.FirQualifierPart
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirQualifierPartImpl(override val name: Name) : FirQualifierPart {
|
||||
override val typeArguments = mutableListOf<FirTypeProjection>()
|
||||
}
|
||||
@@ -7,15 +7,14 @@ package org.jetbrains.kotlin.fir.types.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.types.FirQualifierPart
|
||||
import org.jetbrains.kotlin.fir.types.FirUserType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import java.util.*
|
||||
|
||||
class FirUserTypeImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
isNullable: Boolean,
|
||||
override val name: Name
|
||||
isNullable: Boolean
|
||||
) : FirAbstractAnnotatedType(session, psi, isNullable), FirUserType {
|
||||
override val arguments = mutableListOf<FirTypeProjection>()
|
||||
override val qualifier = LinkedList<FirQualifierPart>()
|
||||
}
|
||||
+2
-1
@@ -32,4 +32,5 @@ inline class CompositeTransformResult<out T : Any>(val a: Any) {
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T : FirElement> T.compose() = CompositeTransformResult.single(this)
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun <T : FirElement> T.compose() = CompositeTransformResult.single(this)
|
||||
+37
-47
@@ -1,10 +1,10 @@
|
||||
/*
|
||||
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -26,10 +26,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformDeclaration(declarationWithBody, data)
|
||||
}
|
||||
|
||||
open fun transformAnonymousInitializer(
|
||||
anonymousInitializer: FirAnonymousInitializer,
|
||||
data: D
|
||||
): CompositeTransformResult<FirDeclaration> {
|
||||
open fun transformAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
return transformDeclarationWithBody(anonymousInitializer, data)
|
||||
}
|
||||
|
||||
@@ -101,82 +98,83 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformElement(packageFragment, data)
|
||||
}
|
||||
|
||||
open fun <E : FirPackageFragment> transformFile(file: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformFile(file: FirFile, data: D): CompositeTransformResult<FirFile> {
|
||||
return transformPackageFragment(file, data)
|
||||
}
|
||||
|
||||
open fun <E : FirElement> transformStatement(statement: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformStatement(statement: FirStatement, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(statement, data)
|
||||
}
|
||||
|
||||
open fun <E : FirStatement> transformExpression(expression: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformExpression(expression: FirExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformStatement(expression, data)
|
||||
}
|
||||
|
||||
open fun <E : FirExpression> transformBody(body: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformBody(body: FirBody, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(body, data)
|
||||
}
|
||||
|
||||
open fun <E : FirExpression> transformCall(call: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformCall(call: FirCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(call, data)
|
||||
}
|
||||
|
||||
open fun <E : FirCall> transformAnnotationCall(annotationCall: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformCall(annotationCall, data)
|
||||
}
|
||||
|
||||
open fun <E : FirCall> transformConstructorCall(constructorCall: E, data: D): CompositeTransformResult<E> {
|
||||
return transformCall(constructorCall, data)
|
||||
open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformCall(delegatedConstructorCall, data)
|
||||
}
|
||||
|
||||
open fun <E : FirElement> transformType(type: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(errorExpression, data)
|
||||
}
|
||||
|
||||
open fun transformType(type: FirType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformElement(type, data)
|
||||
}
|
||||
|
||||
open fun <E : FirType> transformDelegatedType(delegatedType: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformDelegatedType(delegatedType: FirDelegatedType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformType(delegatedType, data)
|
||||
}
|
||||
|
||||
open fun <E : FirType> transformErrorType(errorType: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformErrorType(errorType: FirErrorType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformType(errorType, data)
|
||||
}
|
||||
|
||||
open fun <E : FirType> transformImplicitType(implicitType: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformImplicitType(implicitType: FirImplicitType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformType(implicitType, data)
|
||||
}
|
||||
|
||||
open fun <E : FirType> transformTypeWithNullability(typeWithNullability: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: D): CompositeTransformResult<FirType> {
|
||||
return transformType(typeWithNullability, data)
|
||||
}
|
||||
|
||||
open fun <E : FirTypeWithNullability> transformDynamicType(dynamicType: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformDynamicType(dynamicType: FirDynamicType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformTypeWithNullability(dynamicType, data)
|
||||
}
|
||||
|
||||
open fun <E : FirTypeWithNullability> transformFunctionType(functionType: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformFunctionType(functionType: FirFunctionType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformTypeWithNullability(functionType, data)
|
||||
}
|
||||
|
||||
open fun <E : FirTypeWithNullability> transformResolvedType(resolvedType: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformResolvedType(resolvedType: FirResolvedType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformTypeWithNullability(resolvedType, data)
|
||||
}
|
||||
|
||||
open fun <E : FirTypeWithNullability> transformUserType(userType: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformUserType(userType: FirUserType, data: D): CompositeTransformResult<FirType> {
|
||||
return transformTypeWithNullability(userType, data)
|
||||
}
|
||||
|
||||
open fun <E : FirElement> transformTypeProjection(typeProjection: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformTypeProjection(typeProjection: FirTypeProjection, data: D): CompositeTransformResult<FirTypeProjection> {
|
||||
return transformElement(typeProjection, data)
|
||||
}
|
||||
|
||||
open fun <E : FirTypeProjection> transformStarProjection(starProjection: E, data: D): CompositeTransformResult<E> {
|
||||
open fun transformStarProjection(starProjection: FirStarProjection, data: D): CompositeTransformResult<FirTypeProjection> {
|
||||
return transformTypeProjection(starProjection, data)
|
||||
}
|
||||
|
||||
open fun <E : FirTypeProjection> transformTypeProjectionWithVariance(
|
||||
typeProjectionWithVariance: E,
|
||||
data: D
|
||||
): CompositeTransformResult<E> {
|
||||
open fun transformTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): CompositeTransformResult<FirTypeProjection> {
|
||||
return transformTypeProjection(typeProjectionWithVariance, data)
|
||||
}
|
||||
|
||||
@@ -192,10 +190,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformDeclaration(declaration, data)
|
||||
}
|
||||
|
||||
final override fun visitDeclarationWithBody(
|
||||
declarationWithBody: FirDeclarationWithBody,
|
||||
data: D
|
||||
): CompositeTransformResult<FirElement> {
|
||||
final override fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformDeclarationWithBody(declarationWithBody, data)
|
||||
}
|
||||
|
||||
@@ -235,10 +230,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformTypeProjection(typeProjection, data)
|
||||
}
|
||||
|
||||
final override fun visitTypeWithNullability(
|
||||
typeWithNullability: FirTypeWithNullability,
|
||||
data: D
|
||||
): CompositeTransformResult<FirElement> {
|
||||
final override fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformTypeWithNullability(typeWithNullability, data)
|
||||
}
|
||||
|
||||
@@ -246,8 +238,8 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformAnnotationCall(annotationCall, data)
|
||||
}
|
||||
|
||||
final override fun visitConstructorCall(constructorCall: FirConstructorCall, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformConstructorCall(constructorCall, data)
|
||||
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformDelegatedConstructorCall(delegatedConstructorCall, data)
|
||||
}
|
||||
|
||||
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult<FirElement> {
|
||||
@@ -278,10 +270,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformVariable(variable, data)
|
||||
}
|
||||
|
||||
final override fun visitAnonymousInitializer(
|
||||
anonymousInitializer: FirAnonymousInitializer,
|
||||
data: D
|
||||
): CompositeTransformResult<FirElement> {
|
||||
final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformAnonymousInitializer(anonymousInitializer, data)
|
||||
}
|
||||
|
||||
@@ -293,6 +282,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformBody(body, data)
|
||||
}
|
||||
|
||||
final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformErrorExpression(errorExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitConstructor(constructor: FirConstructor, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformConstructor(constructor, data)
|
||||
}
|
||||
@@ -333,10 +326,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformStarProjection(starProjection, data)
|
||||
}
|
||||
|
||||
final override fun visitTypeProjectionWithVariance(
|
||||
typeProjectionWithVariance: FirTypeProjectionWithVariance,
|
||||
data: D
|
||||
): CompositeTransformResult<FirElement> {
|
||||
final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformTypeProjectionWithVariance(typeProjectionWithVariance, data)
|
||||
}
|
||||
|
||||
|
||||
@@ -122,8 +122,12 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitCall(annotationCall, data)
|
||||
}
|
||||
|
||||
open fun visitConstructorCall(constructorCall: FirConstructorCall, data: D): R {
|
||||
return visitCall(constructorCall, data)
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R {
|
||||
return visitCall(delegatedConstructorCall, data)
|
||||
}
|
||||
|
||||
open fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): R {
|
||||
return visitExpression(errorExpression, data)
|
||||
}
|
||||
|
||||
open fun visitType(type: FirType, data: D): R {
|
||||
|
||||
+12
-4
@@ -122,8 +122,12 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitCall(annotationCall, null)
|
||||
}
|
||||
|
||||
open fun visitConstructorCall(constructorCall: FirConstructorCall) {
|
||||
visitCall(constructorCall, null)
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
|
||||
visitCall(delegatedConstructorCall, null)
|
||||
}
|
||||
|
||||
open fun visitErrorExpression(errorExpression: FirErrorExpression) {
|
||||
visitExpression(errorExpression, null)
|
||||
}
|
||||
|
||||
open fun visitType(type: FirType) {
|
||||
@@ -234,8 +238,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitAnnotationCall(annotationCall)
|
||||
}
|
||||
|
||||
final override fun visitConstructorCall(constructorCall: FirConstructorCall, data: Nothing?) {
|
||||
visitConstructorCall(constructorCall)
|
||||
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) {
|
||||
visitDelegatedConstructorCall(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) {
|
||||
@@ -278,6 +282,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitBody(body)
|
||||
}
|
||||
|
||||
final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: Nothing?) {
|
||||
visitErrorExpression(errorExpression)
|
||||
}
|
||||
|
||||
final override fun visitConstructor(constructor: FirConstructor, data: Nothing?) {
|
||||
visitConstructor(constructor)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
open class A
|
||||
|
||||
|
||||
class B : A
|
||||
@@ -0,0 +1,5 @@
|
||||
FILE: F.kt
|
||||
unknown open class A() {
|
||||
}
|
||||
unknown final class B() : A {
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
abstract class A {
|
||||
abstract class Nested
|
||||
}
|
||||
|
||||
typealias TA = A
|
||||
|
||||
class B : TA() {
|
||||
class NestedInB : Nested()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
FILE: NestedOfAliasedType.kt
|
||||
unknown abstract class A() {
|
||||
unknown abstract class Nested() {
|
||||
}
|
||||
|
||||
}
|
||||
unknown final typealias TA = A
|
||||
unknown final class B() : TA {
|
||||
unknown final class NestedInB() : Nested {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package p
|
||||
|
||||
abstract class My {
|
||||
abstract class NestedOne : My() {
|
||||
abstract class NestedTwo : NestedOne() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Your : My() {
|
||||
class NestedThree : NestedOne()
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
FILE: NestedSuperType.kt
|
||||
unknown abstract class My() {
|
||||
unknown abstract class NestedOne() : My {
|
||||
unknown abstract class NestedTwo() : NestedOne {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
unknown final class Your() : My {
|
||||
unknown final class NestedThree() : NestedOne {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package a.b
|
||||
|
||||
class C<T, out S> {
|
||||
inner class D<R, in P> {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
interface Test {
|
||||
val x: a.b.C<out CharSequence, *>.D<in List<*>, *>
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
FILE: complexTypes.kt
|
||||
<T, out S> unknown final class C() {
|
||||
<R, in P> unknown final class D(inner) {
|
||||
}
|
||||
|
||||
}
|
||||
unknown final interface Test() {
|
||||
unknown final property x(val): a.b.C<out CharSequence, *>.D<in List<*>, *>
|
||||
unknown get(): a.b.C<out CharSequence, *>.D<in List<*>, *>
|
||||
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
open class Base<T>(val x: T)
|
||||
|
||||
class Derived<T : Any>(x: T) : Base<T>(x)
|
||||
|
||||
fun <T : Any> create(x: T): Derived<T> = Derived(x)
|
||||
@@ -0,0 +1,12 @@
|
||||
FILE: derivedClass.kt
|
||||
<T> unknown open class Base() {
|
||||
unknown constructor(x: T)
|
||||
|
||||
}
|
||||
<T : Any> unknown final class Derived() : Base<T> {
|
||||
unknown constructor(x: T)STUB
|
||||
|
||||
}
|
||||
<T : Any> unknown final function create(x: T): Derived<T> {
|
||||
STUB
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
import my.println
|
||||
|
||||
enum class Order {
|
||||
FIRST,
|
||||
SECOND,
|
||||
THIRD
|
||||
}
|
||||
|
||||
enum class Planet(val m: Double, internal val r: Double) {
|
||||
MERCURY(1.0, 2.0) {
|
||||
override fun sayHello() {
|
||||
println("Hello!!!")
|
||||
}
|
||||
},
|
||||
VENERA(3.0, 4.0) {
|
||||
override fun sayHello() {
|
||||
println("Ola!!!")
|
||||
}
|
||||
},
|
||||
EARTH(5.0, 6.0) {
|
||||
override fun sayHello() {
|
||||
println("Privet!!!")
|
||||
}
|
||||
};
|
||||
|
||||
val g: Double = G * m / (r * r)
|
||||
|
||||
abstract fun sayHello()
|
||||
|
||||
companion object {
|
||||
const val G = 6.67e-11
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
FILE: enums.kt
|
||||
unknown final enum class Order() {
|
||||
unknown final enum entry FIRST() {
|
||||
}
|
||||
|
||||
unknown final enum entry SECOND() {
|
||||
}
|
||||
|
||||
unknown final enum entry THIRD() {
|
||||
}
|
||||
|
||||
}
|
||||
unknown final enum class Planet() {
|
||||
unknown constructor(m: Double, r: Double)
|
||||
|
||||
unknown final enum entry MERCURY() : Planet {
|
||||
unknown final override function sayHello(): <implicit> {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
unknown final enum entry VENERA() : Planet {
|
||||
unknown final override function sayHello(): <implicit> {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
unknown final enum entry EARTH() : Planet {
|
||||
unknown final override function sayHello(): <implicit> {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
unknown final property g(val): Double = STUB
|
||||
unknown get(): Double
|
||||
|
||||
unknown abstract function sayHello(): <implicit>
|
||||
|
||||
unknown final object Companion(companion) {
|
||||
unknown final const property G(val): <implicit> = STUB
|
||||
unknown get(): <implicit>
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
interface Some
|
||||
|
||||
object O1 : Some
|
||||
|
||||
object O2 : Some
|
||||
|
||||
enum class SomeEnum(val x: Some) {
|
||||
FIRST(O1) {
|
||||
override fun check(y: Some): Boolean = true
|
||||
},
|
||||
SECOND(O2) {
|
||||
override fun check(y: Some): Boolean = y == O2
|
||||
};
|
||||
|
||||
abstract fun check(y: Some): Boolean
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
FILE: enums2.kt
|
||||
unknown final interface Some() {
|
||||
}
|
||||
unknown final object O1() : Some {
|
||||
}
|
||||
unknown final object O2() : Some {
|
||||
}
|
||||
unknown final enum class SomeEnum() {
|
||||
unknown constructor(x: Some)
|
||||
|
||||
unknown final enum entry FIRST() : SomeEnum {
|
||||
unknown final override function check(y: Some): Boolean {
|
||||
STUB
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
unknown final enum entry SECOND() : SomeEnum {
|
||||
unknown final override function check(y: Some): Boolean {
|
||||
STUB
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
unknown abstract function check(y: Some): Boolean
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
fun <T> simpleRun(f: (T) -> Unit): Unit = f()
|
||||
|
||||
fun <T, R> List<T>.simpleMap(f: (T) -> R): R {
|
||||
|
||||
}
|
||||
|
||||
fun <T> simpleWith(t: T, f: T.() -> Unit): Unit = t.f()
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
FILE: functionTypes.kt
|
||||
<T> unknown final function simpleRun(f: ( (<no name provided>: T): Unit )): Unit {
|
||||
STUB
|
||||
}
|
||||
<T, R> unknown final function simpleMapList<T>.(f: ( (<no name provided>: T): R )): R {
|
||||
}
|
||||
<T> unknown final function simpleWith(t: T, f: ( T.(): Unit )): Unit {
|
||||
STUB
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
interface Any
|
||||
|
||||
inline fun <reified T : Any> Any.safeAs(): T? = this as? T
|
||||
|
||||
abstract class Summator {
|
||||
abstract fun <T> plus(first: T, second: T): T
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
FILE: genericFunctions.kt
|
||||
unknown final interface Any() {
|
||||
}
|
||||
<T : Any> unknown final inline function safeAsAny.(): T? {
|
||||
STUB
|
||||
}
|
||||
unknown abstract class Summator() {
|
||||
<T> unknown abstract function plus(first: T, second: T): T
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
abstract class Base(val s: String)
|
||||
|
||||
class Outer {
|
||||
class Derived(s: String) : Base(s)
|
||||
|
||||
object Obj : Base("")
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
FILE: nestedClass.kt
|
||||
unknown abstract class Base() {
|
||||
unknown constructor(s: String)
|
||||
|
||||
}
|
||||
unknown final class Outer() {
|
||||
unknown final class Derived() : Base {
|
||||
unknown constructor(s: String)STUB
|
||||
|
||||
}
|
||||
|
||||
unknown final object Obj() : Base {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,4 +14,6 @@ class SomeClass : SomeInterface {
|
||||
override var bar: Boolean
|
||||
get() = true
|
||||
set(value) {}
|
||||
|
||||
var fau: Double
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
FILE: simpleClass.kt
|
||||
unknown final class SomeInterface() {
|
||||
unknown final interface SomeInterface() {
|
||||
unknown final function foo(x: Int, y: String): String
|
||||
|
||||
unknown final property bar(val): Boolean
|
||||
@@ -20,4 +20,8 @@ FILE: simpleClass.kt
|
||||
unknown set(value: Boolean): <implicit> {
|
||||
}
|
||||
|
||||
unknown final property fau(var): Double
|
||||
unknown get(): Double
|
||||
unknown set(value: Double): R/Unit/
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
interface B
|
||||
|
||||
typealias C = B
|
||||
|
||||
class D : C
|
||||
@@ -0,0 +1,6 @@
|
||||
FILE: simpleTypeAlias.kt
|
||||
unknown final interface B() {
|
||||
}
|
||||
unknown final typealias C = B
|
||||
unknown final class D() : C {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
open class A
|
||||
|
||||
interface B<S, T : A>
|
||||
|
||||
typealias C<T> = B<T, A>
|
||||
|
||||
class D : C<A>
|
||||
@@ -0,0 +1,8 @@
|
||||
FILE: typeAliasWithGeneric.kt
|
||||
unknown open class A() {
|
||||
}
|
||||
<S, T : A> unknown final interface B() {
|
||||
}
|
||||
unknown final typealias C = B<T, A>
|
||||
unknown final class D() : C<A> {
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package test
|
||||
|
||||
interface Some
|
||||
|
||||
abstract class My<T : Some> {
|
||||
inner class T
|
||||
|
||||
abstract val x: T
|
||||
|
||||
abstract fun foo(arg: T)
|
||||
|
||||
abstract val y: My.T
|
||||
|
||||
abstract val z: test.My.T
|
||||
|
||||
class Some : T()
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
FILE: typeParameterVsNested.kt
|
||||
unknown final interface Some() {
|
||||
}
|
||||
<T : Some> unknown abstract class My() {
|
||||
unknown final class T(inner) {
|
||||
}
|
||||
|
||||
unknown abstract property x(val): T
|
||||
unknown get(): T
|
||||
|
||||
unknown abstract function foo(arg: T): <implicit>
|
||||
|
||||
unknown abstract property y(val): My.T
|
||||
unknown get(): My.T
|
||||
|
||||
unknown abstract property z(val): test.My.T
|
||||
unknown get(): test.My.T
|
||||
|
||||
unknown final class Some() : T {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
FILE: typeParameters.kt
|
||||
<out T : Any> unknown final class List() {
|
||||
<out T : Any> unknown final interface List() {
|
||||
unknown final operator function get(index: Int): T
|
||||
|
||||
unknown final infix function concat(other: List<T>): List<T>
|
||||
|
||||
+77
-7
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -21,6 +21,10 @@ import java.util.regex.Pattern;
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public class RawFirBuilderTestCaseGenerated extends AbstractRawFirBuilderTestCase {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doRawFirTest, TargetBackend.ANY, testDataFilePath);
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInRawBuilder() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/rawBuilder"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
@@ -29,26 +33,92 @@ public class RawFirBuilderTestCaseGenerated extends AbstractRawFirBuilderTestCas
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class Declarations extends AbstractRawFirBuilderTestCase {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doRawFirTest, TargetBackend.ANY, testDataFilePath);
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInDeclarations() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/rawBuilder/declarations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("complexTypes.kt")
|
||||
public void testComplexTypes() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/complexTypes.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("derivedClass.kt")
|
||||
public void testDerivedClass() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/derivedClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("enums.kt")
|
||||
public void testEnums() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/enums.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("enums2.kt")
|
||||
public void testEnums2() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/enums2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("F.kt")
|
||||
public void testF() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/F.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("functionTypes.kt")
|
||||
public void testFunctionTypes() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/functionTypes.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericFunctions.kt")
|
||||
public void testGenericFunctions() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/genericFunctions.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nestedClass.kt")
|
||||
public void testNestedClass() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/nestedClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NestedOfAliasedType.kt")
|
||||
public void testNestedOfAliasedType() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/NestedOfAliasedType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("NestedSuperType.kt")
|
||||
public void testNestedSuperType() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/NestedSuperType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("simpleClass.kt")
|
||||
public void testSimpleClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/rawBuilder/declarations/simpleClass.kt");
|
||||
doRawFirTest(fileName);
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/simpleClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("simpleFun.kt")
|
||||
public void testSimpleFun() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/rawBuilder/declarations/simpleFun.kt");
|
||||
doRawFirTest(fileName);
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/simpleFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("simpleTypeAlias.kt")
|
||||
public void testSimpleTypeAlias() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/simpleTypeAlias.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("typeAliasWithGeneric.kt")
|
||||
public void testTypeAliasWithGeneric() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/typeAliasWithGeneric.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("typeParameterVsNested.kt")
|
||||
public void testTypeParameterVsNested() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/typeParameterVsNested.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("typeParameters.kt")
|
||||
public void testTypeParameters() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/rawBuilder/declarations/typeParameters.kt");
|
||||
doRawFirTest(fileName);
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/typeParameters.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user