[FIR] Introduce FirAnnotatedDeclaration

This commit is contained in:
Dmitriy Novozhilov
2020-05-12 11:39:37 +03:00
parent 799253256c
commit 74353d8bc9
16 changed files with 76 additions and 29 deletions
@@ -0,0 +1,32 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
interface FirAnnotatedDeclaration : FirDeclaration, FirAnnotationContainer {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
override val origin: FirDeclarationOrigin
override val attributes: FirDeclarationAttributes
override val annotations: List<FirAnnotationCall>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnnotatedDeclaration(this, data)
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnnotatedDeclaration
}
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -21,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement, FirAnnotationContainer, FirTypeParameterRefsOwner {
interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement, FirTypeParameterRefsOwner {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirDeclaration, FirStatement, FirSymbolOwner<F> {
interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirAnnotatedDeclaration, FirStatement, FirSymbolOwner<F> {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
@@ -18,13 +17,13 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirFile : FirPureAbstractElement(), FirAnnotationContainer, FirDeclaration {
abstract class FirFile : FirPureAbstractElement(), FirAnnotatedDeclaration {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val annotations: List<FirAnnotationCall>
abstract val imports: List<FirImport>
abstract val declarations: List<FirDeclaration>
abstract val name: String
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.FirTargetElement
@@ -22,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirFunction<F : FirFunction<F>> : FirCallableDeclaration<F>, FirTargetElement, FirAnnotationContainer, FirTypeParameterRefsOwner, FirStatement {
interface FirFunction<F : FirFunction<F>> : FirCallableDeclaration<F>, FirTargetElement, FirTypeParameterRefsOwner, FirStatement {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -16,7 +15,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirMemberDeclaration : FirDeclaration, FirAnnotationContainer {
interface FirMemberDeclaration : FirAnnotatedDeclaration {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
@@ -22,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirTypeParameter : FirPureAbstractElement(), FirTypeParameterRef, FirDeclaration, FirSymbolOwner<FirTypeParameter>, FirAnnotationContainer {
abstract class FirTypeParameter : FirPureAbstractElement(), FirTypeParameterRef, FirAnnotatedDeclaration, FirSymbolOwner<FirTypeParameter> {
abstract override val source: FirSourceElement?
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -17,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
interface FirTypedDeclaration : FirAnnotatedDeclaration {
override val source: FirSourceElement?
override val session: FirSession
override val resolvePhase: FirResolvePhase
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirVariable<F : FirVariable<F>> : FirPureAbstractElement(), FirCallableDeclaration<F>, FirDeclaration, FirStatement {
abstract class FirVariable<F : FirVariable<F>> : FirPureAbstractElement(), FirCallableDeclaration<F>, FirAnnotatedDeclaration, FirStatement {
abstract override val source: FirSourceElement?
abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase
@@ -29,10 +29,10 @@ import org.jetbrains.kotlin.name.FqName
@FirBuilderDsl
class FirFileBuilder : FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
lateinit var session: FirSession
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
lateinit var origin: FirDeclarationOrigin
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
val imports: MutableList<FirImport> = mutableListOf()
val declarations: MutableList<FirDeclaration> = mutableListOf()
lateinit var name: String
@@ -41,10 +41,10 @@ class FirFileBuilder : FirAnnotationContainerBuilder {
override fun build(): FirFile {
return FirFileImpl(
source,
annotations,
session,
resolvePhase,
origin,
annotations,
imports,
declarations,
name,
@@ -24,10 +24,10 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirFileImpl(
override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>,
override val session: FirSession,
override var resolvePhase: FirResolvePhase,
override val origin: FirDeclarationOrigin,
override val annotations: MutableList<FirAnnotationCall>,
override val imports: MutableList<FirImport>,
override val declarations: MutableList<FirDeclaration>,
override val name: String,
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
@@ -17,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirLoop : FirPureAbstractElement(), FirStatement, FirTargetElement, FirAnnotationContainer {
abstract class FirLoop : FirPureAbstractElement(), FirStatement, FirTargetElement {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract val block: FirBlock
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
@@ -191,6 +192,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformElement(declaration, data)
}
open fun transformAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
return transformElement(annotatedDeclaration, data)
}
open fun transformAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult<FirDeclaration> {
return transformElement(anonymousInitializer, data)
}
@@ -667,6 +672,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDeclaration(declaration, data)
}
final override fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
return transformAnnotatedDeclaration(annotatedDeclaration, data)
}
final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult<FirDeclaration> {
return transformAnonymousInitializer(anonymousInitializer, data)
}
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
@@ -161,6 +162,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitDeclaration(declaration: FirDeclaration, data: D): R = visitElement(declaration, data)
open fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): R = visitElement(annotatedDeclaration, data)
open fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): R = visitElement(anonymousInitializer, data)
open fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): R = visitElement(typedDeclaration, data)
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
@@ -189,6 +190,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(declaration)
}
open fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration) {
visitElement(annotatedDeclaration)
}
open fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer) {
visitElement(anonymousInitializer)
}
@@ -665,6 +670,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitDeclaration(declaration)
}
final override fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: Nothing?) {
visitAnnotatedDeclaration(annotatedDeclaration)
}
final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: Nothing?) {
visitAnonymousInitializer(anonymousInitializer)
}
@@ -26,42 +26,43 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val statement = element("Statement", Expression, annotationContainer)
val expression = element("Expression", Expression, statement)
val declaration = element("Declaration", Declaration)
val annotatedDeclaration = element("AnnotatedDeclaration", Declaration, declaration, annotationContainer)
val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, symbolOwner)
val typedDeclaration = element("TypedDeclaration", Declaration, declaration, annotationContainer)
val typedDeclaration = element("TypedDeclaration", Declaration, annotatedDeclaration)
val callableDeclaration = element("CallableDeclaration", Declaration, typedDeclaration, symbolOwner)
val typeParameterRef = element("TypeParameterRef", Declaration)
val typeParameter = element("TypeParameter", Declaration, typeParameterRef, declaration, symbolOwner, annotationContainer)
val typeParameter = element("TypeParameter", Declaration, typeParameterRef, annotatedDeclaration, symbolOwner)
val typeParameterRefsOwner = element("TypeParameterRefsOwner", Declaration)
val typeParametersOwner = element("TypeParametersOwner", Declaration, typeParameterRefsOwner)
val memberDeclaration = element("MemberDeclaration", Declaration, declaration, annotationContainer)
val memberDeclaration = element("MemberDeclaration", Declaration, annotatedDeclaration)
val callableMemberDeclaration = element("CallableMemberDeclaration", Declaration, callableDeclaration, memberDeclaration)
val variable = element("Variable", Declaration, callableDeclaration, declaration, statement)
val variable = element("Variable", Declaration, callableDeclaration, annotatedDeclaration, statement)
val valueParameter = element("ValueParameter", Declaration, variable)
val property = element("Property", Declaration, variable, typeParametersOwner, callableMemberDeclaration)
val field = element("Field", Declaration, variable, typeParametersOwner, callableMemberDeclaration)
val enumEntry = element("EnumEntry", Declaration, variable, callableMemberDeclaration)
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, declaration, statement, symbolOwner)
val klass = element("Class", Declaration, classLikeDeclaration, statement, annotationContainer, typeParameterRefsOwner)
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, annotatedDeclaration, statement, symbolOwner)
val klass = element("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner)
val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParameterRefsOwner, klass)
val sealedClass = element("SealedClass", Declaration, regularClass)
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, memberDeclaration, typeParametersOwner)
val function = element("Function", Declaration, callableDeclaration, targetElement, annotationContainer, typeParameterRefsOwner, statement)
val function = element("Function", Declaration, callableDeclaration, targetElement, typeParameterRefsOwner, statement)
val contractDescriptionOwner = element("ContractDescriptionOwner", Declaration)
val simpleFunction = element("SimpleFunction", Declaration, function, callableMemberDeclaration, contractDescriptionOwner, typeParametersOwner)
val propertyAccessor = element("PropertyAccessor", Declaration, function, contractDescriptionOwner, typeParametersOwner)
val constructor = element("Constructor", Declaration, function, callableMemberDeclaration, typeParameterRefsOwner)
val file = element("File", Declaration, annotationContainer, declaration)
val file = element("File", Declaration, annotatedDeclaration)
val anonymousFunction = element("AnonymousFunction", Declaration, function, expression, typeParametersOwner)
val anonymousObject = element("AnonymousObject", Declaration, klass, expression)
val diagnosticHolder = element("DiagnosticHolder", Diagnostics)
val loop = element("Loop", Expression, statement, targetElement, annotationContainer)
val loop = element("Loop", Expression, statement, targetElement)
val errorLoop = element("ErrorLoop", Expression, loop, diagnosticHolder)
val doWhileLoop = element("DoWhileLoop", Expression, loop)
val whileLoop = element("WhileLoop", Expression, loop)