FIR: implement Java fields (in provider, type enhancement, scopes)
Related to KT-29218
This commit is contained in:
@@ -8,10 +8,11 @@ package org.jetbrains.kotlin.fir.java
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
||||||
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter
|
||||||
import org.jetbrains.kotlin.fir.resolve.AbstractFirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.AbstractFirSymbolProvider
|
||||||
@@ -19,6 +20,7 @@ import org.jetbrains.kotlin.fir.symbols.CallableId
|
|||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
@@ -45,11 +47,13 @@ class JavaSymbolProvider(
|
|||||||
val firClass = classSymbol.fir as FirModifiableClass
|
val firClass = classSymbol.fir as FirModifiableClass
|
||||||
val callableSymbols = mutableListOf<ConeCallableSymbol>()
|
val callableSymbols = mutableListOf<ConeCallableSymbol>()
|
||||||
for (declaration in firClass.declarations) {
|
for (declaration in firClass.declarations) {
|
||||||
if (declaration is FirNamedFunction) {
|
when (declaration) {
|
||||||
val methodId = CallableId(callableId.packageName, callableId.className, declaration.name)
|
is FirCallableMember -> {
|
||||||
if (methodId == callableId) {
|
val declarationId = CallableId(callableId.packageName, callableId.className, declaration.name)
|
||||||
val symbol = declaration.symbol as ConeCallableSymbol
|
if (declarationId == callableId) {
|
||||||
callableSymbols += symbol
|
val symbol = declaration.symbol as ConeCallableSymbol
|
||||||
|
callableSymbols += symbol
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,9 +84,24 @@ class JavaSymbolProvider(
|
|||||||
for (supertype in javaClass.supertypes) {
|
for (supertype in javaClass.supertypes) {
|
||||||
superTypeRefs += supertype.toFirResolvedTypeRef(session)
|
superTypeRefs += supertype.toFirResolvedTypeRef(session)
|
||||||
}
|
}
|
||||||
// TODO: fields
|
// TODO: may be we can process fields & methods later.
|
||||||
// TODO: may be we can process methods later.
|
|
||||||
// However, they should be built up to override resolve stage
|
// However, they should be built up to override resolve stage
|
||||||
|
for (javaField in javaClass.fields) {
|
||||||
|
if (javaField.isStatic) continue // TODO: statics
|
||||||
|
val fieldName = javaField.name
|
||||||
|
val fieldId = CallableId(classId.packageFqName, classId.relativeClassName, fieldName)
|
||||||
|
val fieldSymbol = FirFieldSymbol(fieldId)
|
||||||
|
val returnType = javaField.type
|
||||||
|
val firJavaField = FirJavaField(
|
||||||
|
session, fieldSymbol, fieldName,
|
||||||
|
javaField.visibility, javaField.modality,
|
||||||
|
returnTypeRef = returnType.toFirJavaTypeRef(session),
|
||||||
|
isVar = !javaField.isFinal
|
||||||
|
).apply {
|
||||||
|
addAnnotationsFrom(javaField)
|
||||||
|
}
|
||||||
|
declarations += firJavaField
|
||||||
|
}
|
||||||
for (javaMethod in javaClass.methods) {
|
for (javaMethod in javaClass.methods) {
|
||||||
if (javaMethod.isStatic) continue // TODO: statics
|
if (javaMethod.isStatic) continue // TODO: statics
|
||||||
val methodName = javaMethod.name
|
val methodName = javaMethod.name
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.java.declarations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
|
class FirJavaField(
|
||||||
|
session: FirSession,
|
||||||
|
symbol: FirFieldSymbol,
|
||||||
|
name: Name,
|
||||||
|
visibility: Visibility,
|
||||||
|
modality: Modality?,
|
||||||
|
returnTypeRef: FirJavaTypeRef,
|
||||||
|
override val isVar: Boolean
|
||||||
|
) : FirAbstractCallableMember(
|
||||||
|
session, psi = null, symbol = symbol, name = name,
|
||||||
|
visibility = visibility, modality = modality,
|
||||||
|
isExpect = false, isActual = false, isOverride = false,
|
||||||
|
receiverTypeRef = null, returnTypeRef = returnTypeRef
|
||||||
|
), FirField {
|
||||||
|
override val delegate: FirExpression?
|
||||||
|
get() = null
|
||||||
|
|
||||||
|
override val initializer: FirExpression?
|
||||||
|
get() = null
|
||||||
|
}
|
||||||
+49
-19
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.fir.java.scopes
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||||
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter
|
||||||
import org.jetbrains.kotlin.fir.java.enhancement.EnhancementSignatureParts
|
import org.jetbrains.kotlin.fir.java.enhancement.EnhancementSignatureParts
|
||||||
@@ -21,8 +21,10 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
|
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
|
||||||
@@ -48,6 +50,16 @@ class JavaClassEnhancementScope(
|
|||||||
|
|
||||||
private val enhancements = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>()
|
private val enhancements = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>()
|
||||||
|
|
||||||
|
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
||||||
|
useSiteScope.processPropertiesByName(name) process@{ original ->
|
||||||
|
|
||||||
|
val field = enhancements.getOrPut(original) { enhance(original, name) }
|
||||||
|
processor(field as ConePropertySymbol)
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.processPropertiesByName(name, processor)
|
||||||
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
useSiteScope.processFunctionsByName(name) process@{ original ->
|
useSiteScope.processFunctionsByName(name) process@{ original ->
|
||||||
|
|
||||||
@@ -58,20 +70,41 @@ class JavaClassEnhancementScope(
|
|||||||
return super.processFunctionsByName(name, processor)
|
return super.processFunctionsByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun enhance(
|
||||||
|
original: ConePropertySymbol,
|
||||||
|
name: Name
|
||||||
|
): FirPropertySymbol {
|
||||||
|
val firField = (original as FirBasedSymbol<*>).fir as? FirJavaField ?: error("Can't make enhancement for $original")
|
||||||
|
|
||||||
|
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firField.annotations)
|
||||||
|
val newReturnTypeRef = enhanceReturnType(firField, memberContext, null)
|
||||||
|
|
||||||
|
val symbol = FirPropertySymbol(original.callableId)
|
||||||
|
with(firField) {
|
||||||
|
FirMemberPropertyImpl(
|
||||||
|
session, null, symbol, name,
|
||||||
|
visibility, modality, isExpect, isActual, isOverride,
|
||||||
|
isConst = false, isLateInit = false,
|
||||||
|
receiverTypeRef = null,
|
||||||
|
returnTypeRef = newReturnTypeRef,
|
||||||
|
isVar = isVar, initializer = null,
|
||||||
|
getter = FirDefaultPropertyGetter(session, null, newReturnTypeRef, visibility),
|
||||||
|
setter = FirDefaultPropertySetter(session, null, newReturnTypeRef, visibility),
|
||||||
|
delegate = null
|
||||||
|
).apply {
|
||||||
|
annotations += firField.annotations
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return symbol
|
||||||
|
}
|
||||||
|
|
||||||
private fun enhance(
|
private fun enhance(
|
||||||
original: ConeFunctionSymbol,
|
original: ConeFunctionSymbol,
|
||||||
name: Name
|
name: Name
|
||||||
): FirFunctionSymbol {
|
): FirFunctionSymbol {
|
||||||
val firMethod = (original as FirBasedSymbol<*>).fir as? FirJavaMethod ?: error("Can't fake override for $original")
|
val firMethod = (original as FirBasedSymbol<*>).fir as? FirJavaMethod ?: error("Can't make enhancement for $original")
|
||||||
|
|
||||||
val memberContext = context.copyWithNewDefaultTypeQualifiers(
|
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations)
|
||||||
typeQualifierResolver, jsr305State, firMethod.annotations
|
|
||||||
)
|
|
||||||
// TODO: When loading method as an override for a property, all annotations are stick to its getter
|
|
||||||
// if (this is FirProperty && getter !is FirDefaultPropertyAccessor)
|
|
||||||
// getter
|
|
||||||
// else
|
|
||||||
// this
|
|
||||||
|
|
||||||
val predefinedEnhancementInfo =
|
val predefinedEnhancementInfo =
|
||||||
SignatureBuildingComponents.signature(owner.symbol.classId, firMethod.computeJvmDescriptor()).let { signature ->
|
SignatureBuildingComponents.signature(owner.symbol.classId, firMethod.computeJvmDescriptor()).let { signature ->
|
||||||
@@ -95,7 +128,6 @@ class JavaClassEnhancementScope(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val symbol = FirFunctionSymbol(original.callableId)
|
val symbol = FirFunctionSymbol(original.callableId)
|
||||||
with(firMethod) {
|
with(firMethod) {
|
||||||
FirMemberFunctionImpl(
|
FirMemberFunctionImpl(
|
||||||
@@ -177,19 +209,17 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun enhanceReturnType(
|
private fun enhanceReturnType(
|
||||||
ownerFunction: FirJavaMethod,
|
owner: FirCallableMember,
|
||||||
memberContext: FirJavaEnhancementContext,
|
memberContext: FirJavaEnhancementContext,
|
||||||
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
|
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
|
||||||
): FirResolvedTypeRef {
|
): FirResolvedTypeRef {
|
||||||
val signatureParts = ownerFunction.parts(
|
val signatureParts = owner.parts(
|
||||||
typeQualifierResolver,
|
typeQualifierResolver,
|
||||||
typeContainer = ownerFunction, isCovariant = true,
|
typeContainer = owner, isCovariant = true,
|
||||||
containerContext = memberContext,
|
containerContext = memberContext,
|
||||||
containerApplicabilityType =
|
containerApplicabilityType =
|
||||||
if (false) // TODO: this.safeAs<FirProperty>()?.isJavaField == true
|
if (owner is FirJavaField) AnnotationTypeQualifierResolver.QualifierApplicabilityType.FIELD
|
||||||
AnnotationTypeQualifierResolver.QualifierApplicabilityType.FIELD
|
else AnnotationTypeQualifierResolver.QualifierApplicabilityType.METHOD_RETURN_TYPE
|
||||||
else
|
|
||||||
AnnotationTypeQualifierResolver.QualifierApplicabilityType.METHOD_RETURN_TYPE
|
|
||||||
) { it.returnTypeRef }.enhance(jsr305State, predefinedEnhancementInfo?.returnTypeInfo)
|
) { it.returnTypeRef }.enhance(jsr305State, predefinedEnhancementInfo?.returnTypeInfo)
|
||||||
return signatureParts.type
|
return signatureParts.type
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractProviderBasedScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -97,4 +98,15 @@ class JavaClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
||||||
|
val seen = mutableSetOf<ConePropertySymbol>()
|
||||||
|
if (!declaredMemberScope.processPropertiesByName(name) {
|
||||||
|
seen += it
|
||||||
|
processor(it)
|
||||||
|
}
|
||||||
|
) return ProcessorAction.STOP
|
||||||
|
|
||||||
|
return ProcessorAction.NEXT
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.FirRenderer
|
|||||||
import org.jetbrains.kotlin.fir.createSession
|
import org.jetbrains.kotlin.fir.createSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
||||||
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
|
import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirScopeProvider
|
import org.jetbrains.kotlin.fir.resolve.FirScopeProvider
|
||||||
@@ -32,6 +33,7 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
|||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -194,6 +196,15 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
|
|||||||
}
|
}
|
||||||
ProcessorAction.NEXT
|
ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
|
is FirJavaField -> enhancementScope.processPropertiesByName(declaration.name) { symbol ->
|
||||||
|
val enhanced = (symbol as? FirPropertySymbol)?.fir
|
||||||
|
if (enhanced != null && enhanced !in renderedDeclarations) {
|
||||||
|
enhanced.accept(renderer, null)
|
||||||
|
renderer.newLine()
|
||||||
|
renderedDeclarations += enhanced
|
||||||
|
}
|
||||||
|
ProcessorAction.NEXT
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
declaration.accept(renderer, null)
|
declaration.accept(renderer, null)
|
||||||
renderer.newLine()
|
renderer.newLine()
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||||
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
|
@BaseTransformedType
|
||||||
|
interface FirField : @VisitedSupertype FirDeclaration, FirCallableMember, FirVariable {
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitField(this, data)
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
super<FirCallableMember>.acceptChildren(visitor, data)
|
||||||
|
initializer?.accept(visitor, data)
|
||||||
|
delegate?.accept(visitor, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.symbols.impl
|
||||||
|
|
||||||
|
typealias FirFieldSymbol = FirPropertySymbol
|
||||||
+8
@@ -64,6 +64,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformDeclaration(errorDeclaration, data)
|
return transformDeclaration(errorDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformField(field: FirField, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
|
return transformDeclaration(field, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformDeclaration(namedDeclaration, data)
|
return transformDeclaration(namedDeclaration, data)
|
||||||
}
|
}
|
||||||
@@ -496,6 +500,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformExpression(expression, data)
|
return transformExpression(expression, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitField(field: FirField, data: D): CompositeTransformResult<FirElement> {
|
||||||
|
return transformField(field, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitFile(file: FirFile, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitFile(file: FirFile, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformFile(file, data)
|
return transformFile(file, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,10 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitDeclaration(errorDeclaration, data)
|
return visitDeclaration(errorDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitField(field: FirField, data: D): R {
|
||||||
|
return visitDeclaration(field, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): R {
|
open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): R {
|
||||||
return visitDeclaration(namedDeclaration, data)
|
return visitDeclaration(namedDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -64,6 +64,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitDeclaration(errorDeclaration, null)
|
visitDeclaration(errorDeclaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitField(field: FirField) {
|
||||||
|
visitDeclaration(field, null)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) {
|
open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) {
|
||||||
visitDeclaration(namedDeclaration, null)
|
visitDeclaration(namedDeclaration, null)
|
||||||
}
|
}
|
||||||
@@ -496,6 +500,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitExpression(expression)
|
visitExpression(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitField(field: FirField, data: Nothing?) {
|
||||||
|
visitField(field)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitFile(file: FirFile, data: Nothing?) {
|
final override fun visitFile(file: FirFile, data: Nothing?) {
|
||||||
visitFile(file)
|
visitFile(file)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,8 @@
|
|||||||
public final class ClassWithConstVal : R|java/lang/Object| {
|
public final class ClassWithConstVal : R|java/lang/Object| {
|
||||||
|
public final property f(val): R|kotlin/Int|
|
||||||
|
public get(): R|kotlin/Int|
|
||||||
|
|
||||||
|
public final property f2(val): R|kotlin/Int|
|
||||||
|
public get(): R|kotlin/Int|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,6 @@
|
|||||||
public final class FieldAsVar : R|java/lang/Object| {
|
public final class FieldAsVar : R|java/lang/Object| {
|
||||||
|
public open property f(var): R|kotlin/Int|
|
||||||
|
public get(): R|kotlin/Int|
|
||||||
|
public set(value: R|kotlin/Int|): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,6 @@
|
|||||||
public open class FieldOfArrayType : R|java/lang/Object| {
|
public open class FieldOfArrayType : R|java/lang/Object| {
|
||||||
|
public open property files(var): R|kotlin/Array<ft<java/io/File, java/io/File?>>|
|
||||||
|
public get(): R|kotlin/Array<ft<java/io/File, java/io/File?>>|
|
||||||
|
public set(value: R|kotlin/Array<ft<java/io/File, java/io/File?>>|): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,5 @@
|
|||||||
public final class FinalFieldAsVal : R|java/lang/Object| {
|
public final class FinalFieldAsVal : R|java/lang/Object| {
|
||||||
|
public final property f(val): R|kotlin/Int|
|
||||||
|
public get(): R|kotlin/Int|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
public open class Frame : R|java/lang/Object| {
|
public open class Frame : R|java/lang/Object| {
|
||||||
|
public/*package*/ open property accessibleContext(var): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
public/*package*/ get(): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
public/*package*/ set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
public open class JFrame : R|awt/Frame| {
|
public open class JFrame : R|awt/Frame| {
|
||||||
|
protected/*protected and package*/ open property accessibleContext(var): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
protected/*protected and package*/ get(): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
protected/*protected and package*/ set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
public open class PrivateMembers : R|java/lang/Object| {
|
public open class PrivateMembers : R|java/lang/Object| {
|
||||||
|
private open property field(var): R|kotlin/Int|
|
||||||
|
private get(): R|kotlin/Int|
|
||||||
|
private set(value: R|kotlin/Int|): kotlin/Unit
|
||||||
|
|
||||||
private open operator function method(): R|kotlin/Unit|
|
private open operator function method(): R|kotlin/Unit|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,10 @@
|
|||||||
public final class TwoFields : R|java/lang/Object| {
|
public final class TwoFields : R|java/lang/Object| {
|
||||||
|
public open property a(var): R|kotlin/Int|
|
||||||
|
public get(): R|kotlin/Int|
|
||||||
|
public set(value: R|kotlin/Int|): kotlin/Unit
|
||||||
|
|
||||||
|
public open property b(var): R|kotlin/Short|
|
||||||
|
public get(): R|kotlin/Short|
|
||||||
|
public set(value: R|kotlin/Short|): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,5 @@
|
|||||||
public open class AnnotatedField : R|java/lang/Object| {
|
public open class AnnotatedField : R|java/lang/Object| {
|
||||||
|
@R|test/AnnotatedField.Anno|(String(member)) public final property y(val): R|kotlin/Int|
|
||||||
|
public get(): R|kotlin/Int|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
public final enum class EnumMembers : R|java/lang/Enum<test/EnumMembers>| {
|
public final enum class EnumMembers : R|java/lang/Enum<test/EnumMembers>| {
|
||||||
|
public final property isFirst(val): R|kotlin/Boolean|
|
||||||
|
public get(): R|kotlin/Boolean|
|
||||||
|
|
||||||
public open operator function first(): R|kotlin/Boolean|
|
public open operator function first(): R|kotlin/Boolean|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -1,2 +1,14 @@
|
|||||||
<T> public open class PropertyArrayTypes : R|java/lang/Object| {
|
<T> public open class PropertyArrayTypes : R|java/lang/Object| {
|
||||||
|
public open property arrayOfArrays(var): R|kotlin/Array<ft<kotlin/Array<ft<java/lang/String, java/lang/String?>>, kotlin/Array<ft<java/lang/String, java/lang/String?>>?>>|
|
||||||
|
public get(): R|kotlin/Array<ft<kotlin/Array<ft<java/lang/String, java/lang/String?>>, kotlin/Array<ft<java/lang/String, java/lang/String?>>?>>|
|
||||||
|
public set(value: R|kotlin/Array<ft<kotlin/Array<ft<java/lang/String, java/lang/String?>>, kotlin/Array<ft<java/lang/String, java/lang/String?>>?>>|): kotlin/Unit
|
||||||
|
|
||||||
|
public open property array(var): R|kotlin/Array<ft<java/lang/String, java/lang/String?>>|
|
||||||
|
public get(): R|kotlin/Array<ft<java/lang/String, java/lang/String?>>|
|
||||||
|
public set(value: R|kotlin/Array<ft<java/lang/String, java/lang/String?>>|): kotlin/Unit
|
||||||
|
|
||||||
|
public open property genericArray(var): R|kotlin/Array<ft<T, T?>>|
|
||||||
|
public get(): R|kotlin/Array<ft<T, T?>>|
|
||||||
|
public set(value: R|kotlin/Array<ft<T, T?>>|): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+16
@@ -1,2 +1,18 @@
|
|||||||
<T> public open class PropertyComplexTypes : R|java/lang/Object| {
|
<T> public open class PropertyComplexTypes : R|java/lang/Object| {
|
||||||
|
public open property genericType(var): R|ft<T, T?>|!
|
||||||
|
public get(): R|ft<T, T?>|!
|
||||||
|
public set(value: R|ft<T, T?>|!): kotlin/Unit
|
||||||
|
|
||||||
|
public open property listDefinedGeneric(var): R|ft<java/util/ArrayList<ft<java/lang/String, java/lang/String?>>, java/util/ArrayList<ft<java/lang/String, java/lang/String?>>>|
|
||||||
|
public get(): R|ft<java/util/ArrayList<ft<java/lang/String, java/lang/String?>>, java/util/ArrayList<ft<java/lang/String, java/lang/String?>>>|
|
||||||
|
public set(value: R|ft<java/util/ArrayList<ft<java/lang/String, java/lang/String?>>, java/util/ArrayList<ft<java/lang/String, java/lang/String?>>>|): kotlin/Unit
|
||||||
|
|
||||||
|
public open property listGeneric(var): R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>|
|
||||||
|
public get(): R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>|
|
||||||
|
public set(value: R|ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>|): kotlin/Unit
|
||||||
|
|
||||||
|
public open property listOfGenericList(var): R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>>|
|
||||||
|
public get(): R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>>|
|
||||||
|
public set(value: R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>>, java/util/ArrayList<ft<T, T?>>>>>|): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -1,2 +1,10 @@
|
|||||||
public open class PropertySimpleType : R|java/lang/Object| {
|
public open class PropertySimpleType : R|java/lang/Object| {
|
||||||
|
public open property fieldOne(var): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
public get(): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
public set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
|
||||||
|
|
||||||
|
public open property fieldTwo(var): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
public get(): R|ft<java/lang/String, java/lang/String?>|!
|
||||||
|
public set(value: R|ft<java/lang/String, java/lang/String?>|!): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,6 @@
|
|||||||
public open class NotNullField : R|java/lang/Object| {
|
public open class NotNullField : R|java/lang/Object| {
|
||||||
|
@R|org/jetbrains/annotations/NotNull|() public open property hi(var): R|ft<java/lang/String, java/lang/String>|
|
||||||
|
public get(): R|ft<java/lang/String, java/lang/String>|
|
||||||
|
public set(value: R|ft<java/lang/String, java/lang/String>|): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -1,2 +1,6 @@
|
|||||||
public open class ProtectedPackageProperty : R|java/lang/Object| {
|
public open class ProtectedPackageProperty : R|java/lang/Object| {
|
||||||
|
protected/*protected and package*/ open property foo(var): R|kotlin/Int|
|
||||||
|
protected/*protected and package*/ get(): R|kotlin/Int|
|
||||||
|
protected/*protected and package*/ set(value: R|kotlin/Int|): kotlin/Unit
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user