From e7ac88d326126b2704084cc7291aa0ff96a3c3ef Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 27 Feb 2019 18:15:51 +0300 Subject: [PATCH] FIR: implement Java fields (in provider, type enhancement, scopes) Related to KT-29218 --- .../kotlin/fir/java/JavaSymbolProvider.kt | 35 +++++++--- .../fir/java/declarations/FirJavaField.kt | 37 ++++++++++ .../java/scopes/JavaClassEnhancementScope.kt | 68 +++++++++++++------ .../fir/java/scopes/JavaClassUseSiteScope.kt | 12 ++++ .../java/AbstractFirTypeEnhancementTest.kt | 11 +++ .../kotlin/fir/declarations/FirField.kt | 23 +++++++ .../kotlin/fir/symbols/impl/FirFieldSymbol.kt | 8 +++ .../fir/visitors/FirTransformerGenerated.kt | 8 +++ .../fir/visitors/FirVisitorGenerated.kt | 4 ++ .../fir/visitors/FirVisitorVoidGenerated.kt | 8 +++ .../compiledJava/ClassWithConstVal.fir.txt | 6 ++ .../loadJava/compiledJava/FieldAsVar.fir.txt | 4 ++ .../compiledJava/FieldOfArrayType.fir.txt | 4 ++ .../compiledJava/FinalFieldAsVal.fir.txt | 3 + .../PackageLocalVisibility.fir.txt | 8 +++ .../compiledJava/PrivateMembers.fir.txt | 4 ++ .../loadJava/compiledJava/TwoFields.fir.txt | 8 +++ .../annotations/AnnotatedField.fir.txt | 3 + .../compiledJava/enum/EnumMembers.fir.txt | 3 + .../PropertyArrayTypes.fir.txt | 12 ++++ .../PropertyComplexTypes.fir.txt | 16 +++++ .../PropertySimpleType.fir.txt | 8 +++ .../compiledJava/notNull/NotNullField.fir.txt | 4 ++ .../ProtectedPackageProperty.fir.txt | 4 ++ 24 files changed, 274 insertions(+), 27 deletions(-) create mode 100644 compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFieldSymbol.kt diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index 90209318d45..c15ccdcc646 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -8,10 +8,11 @@ package org.jetbrains.kotlin.fir.java import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope 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.impl.FirModifiableClass 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.FirJavaValueParameter 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.ConeClassLikeSymbol 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.load.java.JavaClassFinder import org.jetbrains.kotlin.load.java.structure.JavaClass @@ -45,11 +47,13 @@ class JavaSymbolProvider( val firClass = classSymbol.fir as FirModifiableClass val callableSymbols = mutableListOf() for (declaration in firClass.declarations) { - if (declaration is FirNamedFunction) { - val methodId = CallableId(callableId.packageName, callableId.className, declaration.name) - if (methodId == callableId) { - val symbol = declaration.symbol as ConeCallableSymbol - callableSymbols += symbol + when (declaration) { + is FirCallableMember -> { + val declarationId = CallableId(callableId.packageName, callableId.className, declaration.name) + if (declarationId == callableId) { + val symbol = declaration.symbol as ConeCallableSymbol + callableSymbols += symbol + } } } } @@ -80,9 +84,24 @@ class JavaSymbolProvider( for (supertype in javaClass.supertypes) { superTypeRefs += supertype.toFirResolvedTypeRef(session) } - // TODO: fields - // TODO: may be we can process methods later. + // TODO: may be we can process fields & methods later. // 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) { if (javaMethod.isStatic) continue // TODO: statics val methodName = javaMethod.name diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt new file mode 100644 index 00000000000..4fd6de5001e --- /dev/null +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt @@ -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 +} \ No newline at end of file diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt index dbd7b048837..273f5c4d367 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt @@ -7,9 +7,9 @@ package org.jetbrains.kotlin.fir.java.scopes import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl +import org.jetbrains.kotlin.fir.declarations.impl.* 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.FirJavaValueParameter 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.symbols.ConeCallableSymbol 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.impl.FirFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver @@ -48,6 +50,16 @@ class JavaClassEnhancementScope( private val enhancements = mutableMapOf() + 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 { useSiteScope.processFunctionsByName(name) process@{ original -> @@ -58,20 +70,41 @@ class JavaClassEnhancementScope( 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( original: ConeFunctionSymbol, name: Name ): 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( - 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 memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations) val predefinedEnhancementInfo = SignatureBuildingComponents.signature(owner.symbol.classId, firMethod.computeJvmDescriptor()).let { signature -> @@ -95,7 +128,6 @@ class JavaClassEnhancementScope( ) } - val symbol = FirFunctionSymbol(original.callableId) with(firMethod) { FirMemberFunctionImpl( @@ -177,19 +209,17 @@ class JavaClassEnhancementScope( } private fun enhanceReturnType( - ownerFunction: FirJavaMethod, + owner: FirCallableMember, memberContext: FirJavaEnhancementContext, predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo? ): FirResolvedTypeRef { - val signatureParts = ownerFunction.parts( + val signatureParts = owner.parts( typeQualifierResolver, - typeContainer = ownerFunction, isCovariant = true, + typeContainer = owner, isCovariant = true, containerContext = memberContext, containerApplicabilityType = - if (false) // TODO: this.safeAs()?.isJavaField == true - AnnotationTypeQualifierResolver.QualifierApplicabilityType.FIELD - else - AnnotationTypeQualifierResolver.QualifierApplicabilityType.METHOD_RETURN_TYPE + if (owner is FirJavaField) AnnotationTypeQualifierResolver.QualifierApplicabilityType.FIELD + else AnnotationTypeQualifierResolver.QualifierApplicabilityType.METHOD_RETURN_TYPE ) { it.returnTypeRef }.enhance(jsr305State, predefinedEnhancementInfo?.returnTypeInfo) return signatureParts.type } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt index 2ee240a247b..35486a61e32 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt @@ -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.symbols.ConeCallableSymbol 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.types.ConeKotlinType 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() + if (!declaredMemberScope.processPropertiesByName(name) { + seen += it + processor(it) + } + ) return ProcessorAction.STOP + + return ProcessorAction.NEXT + } } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/java/AbstractFirTypeEnhancementTest.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/java/AbstractFirTypeEnhancementTest.kt index 21a1663ddba..21c8f289d13 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/java/AbstractFirTypeEnhancementTest.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/java/AbstractFirTypeEnhancementTest.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.createSession import org.jetbrains.kotlin.fir.declarations.FirDeclaration 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.scopes.JavaClassEnhancementScope 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.service 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.FqName import org.jetbrains.kotlin.name.Name @@ -194,6 +196,15 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() { } 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 -> { declaration.accept(renderer, null) renderer.newLine() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt new file mode 100644 index 00000000000..233eb541314 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt @@ -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 accept(visitor: FirVisitor, data: D): R = + visitor.visitField(this, data) + + override fun acceptChildren(visitor: FirVisitor, data: D) { + super.acceptChildren(visitor, data) + initializer?.accept(visitor, data) + delegate?.accept(visitor, data) + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFieldSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFieldSymbol.kt new file mode 100644 index 00000000000..644d821a014 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFieldSymbol.kt @@ -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 \ No newline at end of file diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt index 39fcfa44b89..feff3b8266c 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt @@ -64,6 +64,10 @@ abstract class FirTransformer : FirVisitor { + return transformDeclaration(field, data) + } + open fun transformNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult { return transformDeclaration(namedDeclaration, data) } @@ -496,6 +500,10 @@ abstract class FirTransformer : FirVisitor { + return transformField(field, data) + } + final override fun visitFile(file: FirFile, data: D): CompositeTransformResult { return transformFile(file, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt index b20d4d0f821..4fafec1819c 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt @@ -64,6 +64,10 @@ abstract class FirVisitor { return visitDeclaration(errorDeclaration, data) } + open fun visitField(field: FirField, data: D): R { + return visitDeclaration(field, data) + } + open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): R { return visitDeclaration(namedDeclaration, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt index f8ce55706e4..29669ab9d11 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt @@ -64,6 +64,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitDeclaration(errorDeclaration, null) } + open fun visitField(field: FirField) { + visitDeclaration(field, null) + } + open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) { visitDeclaration(namedDeclaration, null) } @@ -496,6 +500,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitExpression(expression) } + final override fun visitField(field: FirField, data: Nothing?) { + visitField(field) + } + final override fun visitFile(file: FirFile, data: Nothing?) { visitFile(file) } diff --git a/compiler/testData/loadJava/compiledJava/ClassWithConstVal.fir.txt b/compiler/testData/loadJava/compiledJava/ClassWithConstVal.fir.txt index 790395d8722..061c8e350f8 100644 --- a/compiler/testData/loadJava/compiledJava/ClassWithConstVal.fir.txt +++ b/compiler/testData/loadJava/compiledJava/ClassWithConstVal.fir.txt @@ -1,2 +1,8 @@ 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| + } diff --git a/compiler/testData/loadJava/compiledJava/FieldAsVar.fir.txt b/compiler/testData/loadJava/compiledJava/FieldAsVar.fir.txt index 340f2cc2890..dd3bc907efd 100644 --- a/compiler/testData/loadJava/compiledJava/FieldAsVar.fir.txt +++ b/compiler/testData/loadJava/compiledJava/FieldAsVar.fir.txt @@ -1,2 +1,6 @@ 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 + } diff --git a/compiler/testData/loadJava/compiledJava/FieldOfArrayType.fir.txt b/compiler/testData/loadJava/compiledJava/FieldOfArrayType.fir.txt index fc4089be651..43033bb0ced 100644 --- a/compiler/testData/loadJava/compiledJava/FieldOfArrayType.fir.txt +++ b/compiler/testData/loadJava/compiledJava/FieldOfArrayType.fir.txt @@ -1,2 +1,6 @@ public open class FieldOfArrayType : R|java/lang/Object| { + public open property files(var): R|kotlin/Array>| + public get(): R|kotlin/Array>| + public set(value: R|kotlin/Array>|): kotlin/Unit + } diff --git a/compiler/testData/loadJava/compiledJava/FinalFieldAsVal.fir.txt b/compiler/testData/loadJava/compiledJava/FinalFieldAsVal.fir.txt index 374e4b0622b..8aff444a211 100644 --- a/compiler/testData/loadJava/compiledJava/FinalFieldAsVal.fir.txt +++ b/compiler/testData/loadJava/compiledJava/FinalFieldAsVal.fir.txt @@ -1,2 +1,5 @@ public final class FinalFieldAsVal : R|java/lang/Object| { + public final property f(val): R|kotlin/Int| + public get(): R|kotlin/Int| + } diff --git a/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt b/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt index f2b22f93100..7dbbd1464b8 100644 --- a/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt +++ b/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt @@ -1,4 +1,12 @@ public open class Frame : R|java/lang/Object| { + public/*package*/ open property accessibleContext(var): R|ft|! + public/*package*/ get(): R|ft|! + public/*package*/ set(value: R|ft|!): kotlin/Unit + } public open class JFrame : R|awt/Frame| { + protected/*protected and package*/ open property accessibleContext(var): R|ft|! + protected/*protected and package*/ get(): R|ft|! + protected/*protected and package*/ set(value: R|ft|!): kotlin/Unit + } diff --git a/compiler/testData/loadJava/compiledJava/PrivateMembers.fir.txt b/compiler/testData/loadJava/compiledJava/PrivateMembers.fir.txt index 5e28efc0963..46acfe8ba72 100644 --- a/compiler/testData/loadJava/compiledJava/PrivateMembers.fir.txt +++ b/compiler/testData/loadJava/compiledJava/PrivateMembers.fir.txt @@ -1,4 +1,8 @@ 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| } diff --git a/compiler/testData/loadJava/compiledJava/TwoFields.fir.txt b/compiler/testData/loadJava/compiledJava/TwoFields.fir.txt index 44e37b770ba..be979cd0d0c 100644 --- a/compiler/testData/loadJava/compiledJava/TwoFields.fir.txt +++ b/compiler/testData/loadJava/compiledJava/TwoFields.fir.txt @@ -1,2 +1,10 @@ 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 + } diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt index f3212591408..98b4e03eb80 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt @@ -1,2 +1,5 @@ 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| + } diff --git a/compiler/testData/loadJava/compiledJava/enum/EnumMembers.fir.txt b/compiler/testData/loadJava/compiledJava/enum/EnumMembers.fir.txt index 8f4c25299f9..90b6d4326b4 100644 --- a/compiler/testData/loadJava/compiledJava/enum/EnumMembers.fir.txt +++ b/compiler/testData/loadJava/compiledJava/enum/EnumMembers.fir.txt @@ -1,4 +1,7 @@ public final enum class EnumMembers : R|java/lang/Enum| { + public final property isFirst(val): R|kotlin/Boolean| + public get(): R|kotlin/Boolean| + public open operator function first(): R|kotlin/Boolean| } diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyArrayTypes.fir.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyArrayTypes.fir.txt index 3e5f854b354..488e4d6a984 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyArrayTypes.fir.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyArrayTypes.fir.txt @@ -1,2 +1,14 @@ public open class PropertyArrayTypes : R|java/lang/Object| { + public open property arrayOfArrays(var): R|kotlin/Array>, kotlin/Array>?>>| + public get(): R|kotlin/Array>, kotlin/Array>?>>| + public set(value: R|kotlin/Array>, kotlin/Array>?>>|): kotlin/Unit + + public open property array(var): R|kotlin/Array>| + public get(): R|kotlin/Array>| + public set(value: R|kotlin/Array>|): kotlin/Unit + + public open property genericArray(var): R|kotlin/Array>| + public get(): R|kotlin/Array>| + public set(value: R|kotlin/Array>|): kotlin/Unit + } diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyComplexTypes.fir.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyComplexTypes.fir.txt index 03921b74cdc..605053bc225 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyComplexTypes.fir.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertyComplexTypes.fir.txt @@ -1,2 +1,18 @@ public open class PropertyComplexTypes : R|java/lang/Object| { + public open property genericType(var): R|ft|! + public get(): R|ft|! + public set(value: R|ft|!): kotlin/Unit + + public open property listDefinedGeneric(var): R|ft>, java/util/ArrayList>>| + public get(): R|ft>, java/util/ArrayList>>| + public set(value: R|ft>, java/util/ArrayList>>|): kotlin/Unit + + public open property listGeneric(var): R|ft>, java/util/ArrayList>>| + public get(): R|ft>, java/util/ArrayList>>| + public set(value: R|ft>, java/util/ArrayList>>|): kotlin/Unit + + public open property listOfGenericList(var): R|ft>, java/util/ArrayList>>>, java/util/ArrayList>, java/util/ArrayList>>>>| + public get(): R|ft>, java/util/ArrayList>>>, java/util/ArrayList>, java/util/ArrayList>>>>| + public set(value: R|ft>, java/util/ArrayList>>>, java/util/ArrayList>, java/util/ArrayList>>>>|): kotlin/Unit + } diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertySimpleType.fir.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertySimpleType.fir.txt index 41c6dc67b9c..a38cc0aa3de 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertySimpleType.fir.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/PropertySimpleType.fir.txt @@ -1,2 +1,10 @@ public open class PropertySimpleType : R|java/lang/Object| { + public open property fieldOne(var): R|ft|! + public get(): R|ft|! + public set(value: R|ft|!): kotlin/Unit + + public open property fieldTwo(var): R|ft|! + public get(): R|ft|! + public set(value: R|ft|!): kotlin/Unit + } diff --git a/compiler/testData/loadJava/compiledJava/notNull/NotNullField.fir.txt b/compiler/testData/loadJava/compiledJava/notNull/NotNullField.fir.txt index 7e0c607d1b8..117a1149ebb 100644 --- a/compiler/testData/loadJava/compiledJava/notNull/NotNullField.fir.txt +++ b/compiler/testData/loadJava/compiledJava/notNull/NotNullField.fir.txt @@ -1,2 +1,6 @@ public open class NotNullField : R|java/lang/Object| { + @R|org/jetbrains/annotations/NotNull|() public open property hi(var): R|ft| + public get(): R|ft| + public set(value: R|ft|): kotlin/Unit + } diff --git a/compiler/testData/loadJava/compiledJava/protectedPackage/ProtectedPackageProperty.fir.txt b/compiler/testData/loadJava/compiledJava/protectedPackage/ProtectedPackageProperty.fir.txt index af95bb07e77..bdf40286177 100644 --- a/compiler/testData/loadJava/compiledJava/protectedPackage/ProtectedPackageProperty.fir.txt +++ b/compiler/testData/loadJava/compiledJava/protectedPackage/ProtectedPackageProperty.fir.txt @@ -1,2 +1,6 @@ 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 + }