[AA FIR] support symbol restoring for static members

^KT-55487 Fixed
This commit is contained in:
Dmitrii Gridin
2022-12-14 23:33:36 +01:00
committed by Space Team
parent f3c7972d20
commit e476150025
34 changed files with 581 additions and 18 deletions
@@ -64,6 +64,18 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated ext
runTest("analysis/analysis-api/testData/symbols/symbolByReference/constructorViaTypeAlias.kt");
}
@Test
@TestMetadata("enumValueOf.kt")
public void testEnumValueOf() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/enumValueOf.kt");
}
@Test
@TestMetadata("enumValues.kt")
public void testEnumValues() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/enumValues.kt");
}
@Test
@TestMetadata("explicitLambdaParameter.kt")
public void testExplicitLambdaParameter() throws Exception {
@@ -106,6 +118,30 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated ext
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaField.kt");
}
@Test
@TestMetadata("javaMethod.kt")
public void testJavaMethod() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaMethod.kt");
}
@Test
@TestMetadata("javaStaticField.kt")
public void testJavaStaticField() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticField.kt");
}
@Test
@TestMetadata("javaStaticMethod.kt")
public void testJavaStaticMethod() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticMethod.kt");
}
@Test
@TestMetadata("javaSyntheticAccessor.kt")
public void testJavaSyntheticAccessor() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaSyntheticAccessor.kt");
}
@Test
@TestMetadata("primaryConstructorValueParameter.kt")
public void testPrimaryConstructorValueParameter() throws Exception {
@@ -117,6 +117,7 @@ internal class KtFirFunctionSymbol(
requireOwnerPointer(),
firSymbol.name,
FirCallableSignature.createSignature(firSymbol),
isStatic = firSymbol.isStatic,
)
KtSymbolKind.LOCAL -> throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(
@@ -55,7 +55,7 @@ internal class KtFirJavaFieldSymbol(
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol> = withValidityAssertion {
KtFirJavaFieldSymbolPointer(requireOwnerPointer(), name)
KtFirJavaFieldSymbolPointer(requireOwnerPointer(), name, firSymbol.isStatic)
}
override fun equals(other: Any?): Boolean = symbolEquals(other)
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isOverride
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.declarations.utils.visibility
import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.isExtension
import org.jetbrains.kotlin.name.CallableId
@@ -97,7 +98,11 @@ internal class KtFirSyntheticJavaPropertySymbol(
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion {
KtFirJavaSyntheticPropertySymbolPointer(requireOwnerPointer(), name)
KtFirJavaSyntheticPropertySymbolPointer(
ownerPointer = requireOwnerPointer(),
propertyName = name,
isSynthetic = firSymbol is SyntheticSymbol,
)
}
override fun equals(other: Any?): Boolean = symbolEquals(other)
@@ -18,7 +18,8 @@ import org.jetbrains.kotlin.name.Name
internal class KtFirJavaFieldSymbolPointer(
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
private val fieldName: Name,
) : KtFirMemberSymbolPointer<KtJavaFieldSymbol>(ownerPointer) {
isStatic: Boolean,
) : KtFirMemberSymbolPointer<KtJavaFieldSymbol>(ownerPointer, isStatic) {
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
candidates: FirScope,
firSession: FirSession,
@@ -11,13 +11,18 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertiesScope
import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.getProperties
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.name.Name
internal class KtFirJavaSyntheticPropertySymbolPointer(
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
private val propertyName: Name,
private val isSynthetic: Boolean,
) : KtFirMemberSymbolPointer<KtSyntheticJavaPropertySymbol>(ownerPointer) {
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
candidates: FirScope,
@@ -30,4 +35,18 @@ internal class KtFirJavaSyntheticPropertySymbolPointer(
return firSymbolBuilder.variableLikeBuilder.buildSyntheticJavaPropertySymbol(syntheticProperty.symbol)
}
context(KtFirAnalysisSession)
override fun getSearchScope(owner: FirClassSymbol<*>): FirScope? {
val baseScope = super.getSearchScope(owner) as? FirTypeScope ?: return null
return if (isSynthetic) {
FirSyntheticPropertiesScope.createIfSyntheticNamesProviderIsDefined(
session = useSiteSession,
dispatchReceiverType = owner.defaultType(),
baseScope = baseScope,
)
} else {
baseScope
}
}
}
@@ -18,7 +18,8 @@ internal class KtFirMemberFunctionSymbolPointer(
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
private val name: Name,
private val signature: FirCallableSignature,
) : KtFirMemberSymbolPointer<KtFunctionSymbol>(ownerPointer) {
isStatic: Boolean,
) : KtFirMemberSymbolPointer<KtFunctionSymbol>(ownerPointer, isStatic) {
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
candidates: FirScope,
firSession: FirSession
@@ -6,41 +6,51 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.analyze
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
import org.jetbrains.kotlin.analysis.api.fir.utils.firSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
internal abstract class KtFirMemberSymbolPointer<S : KtSymbol>(
private val ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
private val isStatic: Boolean = false,
) : KtSymbolPointer<S>() {
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
final override fun restoreSymbol(analysisSession: KtAnalysisSession): S? {
require(analysisSession is KtFirAnalysisSession)
val ownerSymbol = with(analysisSession) {
ownerPointer.restoreSymbol()
}
val scope = with(analysisSession) {
val ownerSymbol = ownerPointer.restoreSymbol() ?: return null
val owner = ownerSymbol.firSymbol as? FirClassSymbol ?: return null
getSearchScope(owner)
} ?: return null
val owner = ownerSymbol?.firSymbol as? FirClassSymbol ?: return null
val firSession = analysisSession.useSiteSession
val scope = owner.unsubstitutedScope(
firSession,
analysisSession.getScopeSessionFor(firSession),
withForcedTypeCalculator = false,
)
return analysisSession.chooseCandidateAndCreateSymbol(scope, firSession)
return analysisSession.chooseCandidateAndCreateSymbol(scope, analysisSession.useSiteSession)
}
protected abstract fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(candidates: FirScope, firSession: FirSession): S?
context(KtFirAnalysisSession)
protected open fun getSearchScope(owner: FirClassSymbol<*>): FirScope? {
val firSession = useSiteSession
val scopeSession = getScopeSessionFor(firSession)
return if (isStatic) {
val firClass = owner.fir as? FirClass ?: return null
firClass.scopeProvider.getStaticMemberScopeForCallables(firClass, firSession, scopeSession)
} else {
owner.unsubstitutedScope(
useSiteSession = firSession,
scopeSession = scopeSession,
withForcedTypeCalculator = false,
)
}
}
}
context(KtAnalysisSession)
@@ -64,6 +64,18 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated exte
runTest("analysis/analysis-api/testData/symbols/symbolByReference/constructorViaTypeAlias.kt");
}
@Test
@TestMetadata("enumValueOf.kt")
public void testEnumValueOf() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/enumValueOf.kt");
}
@Test
@TestMetadata("enumValues.kt")
public void testEnumValues() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/enumValues.kt");
}
@Test
@TestMetadata("explicitLambdaParameter.kt")
public void testExplicitLambdaParameter() throws Exception {
@@ -106,6 +118,30 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated exte
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaField.kt");
}
@Test
@TestMetadata("javaMethod.kt")
public void testJavaMethod() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaMethod.kt");
}
@Test
@TestMetadata("javaStaticField.kt")
public void testJavaStaticField() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticField.kt");
}
@Test
@TestMetadata("javaStaticMethod.kt")
public void testJavaStaticMethod() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticMethod.kt");
}
@Test
@TestMetadata("javaSyntheticAccessor.kt")
public void testJavaSyntheticAccessor() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaSyntheticAccessor.kt");
}
@Test
@TestMetadata("primaryConstructorValueParameter.kt")
public void testPrimaryConstructorValueParameter() throws Exception {
@@ -64,6 +64,18 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerat
runTest("analysis/analysis-api/testData/symbols/symbolByReference/constructorViaTypeAlias.kt");
}
@Test
@TestMetadata("enumValueOf.kt")
public void testEnumValueOf() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/enumValueOf.kt");
}
@Test
@TestMetadata("enumValues.kt")
public void testEnumValues() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/enumValues.kt");
}
@Test
@TestMetadata("explicitLambdaParameter.kt")
public void testExplicitLambdaParameter() throws Exception {
@@ -106,6 +118,30 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerat
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaField.kt");
}
@Test
@TestMetadata("javaMethod.kt")
public void testJavaMethod() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaMethod.kt");
}
@Test
@TestMetadata("javaStaticField.kt")
public void testJavaStaticField() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticField.kt");
}
@Test
@TestMetadata("javaStaticMethod.kt")
public void testJavaStaticMethod() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaStaticMethod.kt");
}
@Test
@TestMetadata("javaSyntheticAccessor.kt")
public void testJavaSyntheticAccessor() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaSyntheticAccessor.kt");
}
@Test
@TestMetadata("primaryConstructorValueParameter.kt")
public void testPrimaryConstructorValueParameter() throws Exception {
@@ -0,0 +1,46 @@
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: /MyKotlinEnum.valueOf
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: FINAL
name: valueOf
origin: SOURCE_MEMBER_GENERATED
receiverParameter: null
returnType: MyKotlinEnum
symbolKind: CLASS_MEMBER
typeParameters: []
valueParameters: [
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: false
isExtension: false
isImplicitLambdaParameter: false
isNoinline: false
isVararg: false
name: value
origin: SOURCE
receiverParameter: null
returnType: kotlin/String
symbolKind: LOCAL
typeParameters: []
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
]
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,9 @@
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
enum class MyKotlinEnum {
FirstEntry, SecondEntry;
}
fun test() {
MyKotlinEnum.val<caret>ueOf("")
}
@@ -0,0 +1 @@
fun valueOf(value: kotlin.String): MyKotlinEnum
@@ -0,0 +1,46 @@
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: /MyKotlinEnum.valueOf
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: true
isSuspend: false
modality: FINAL
name: valueOf
origin: SOURCE_MEMBER_GENERATED
receiverParameter: null
returnType: MyKotlinEnum
symbolKind: CLASS_MEMBER
typeParameters: []
valueParameters: [
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: false
isExtension: false
isImplicitLambdaParameter: false
isNoinline: false
isVararg: false
name: value
origin: SOURCE_MEMBER_GENERATED
receiverParameter: null
returnType: kotlin/String
symbolKind: LOCAL
typeParameters: []
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
]
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,26 @@
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: /MyKotlinEnum.values
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: FINAL
name: values
origin: SOURCE_MEMBER_GENERATED
receiverParameter: null
returnType: kotlin/Array<MyKotlinEnum>
symbolKind: CLASS_MEMBER
typeParameters: []
valueParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,9 @@
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
enum class MyKotlinEnum {
FirstEntry, SecondEntry;
}
fun test() {
MyKotlinEnum.valu<caret>es()
}
@@ -0,0 +1 @@
fun values(): kotlin.Array<MyKotlinEnum>
@@ -0,0 +1,26 @@
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: /MyKotlinEnum.values
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: true
isSuspend: false
modality: FINAL
name: values
origin: SOURCE_MEMBER_GENERATED
receiverParameter: null
returnType: kotlin/Array<MyKotlinEnum>
symbolKind: CLASS_MEMBER
typeParameters: []
valueParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,9 @@
// FILE: main.kt
fun some() {
JavaClass().f<caret>oo();
}
// FILE: JavaClass.java
public class JavaClass {
public void foo() {};
}
@@ -0,0 +1 @@
open fun foo()
@@ -0,0 +1,27 @@
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.foo
contextReceivers: []
contractEffects: []
hasStableParameterNames: false
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: OPEN
name: foo
origin: JAVA
receiverParameter: null
returnType: kotlin/Unit
symbolKind: CLASS_MEMBER
typeParameters: []
valueParameters: []
visibility: Public
getDispatchReceiver(): JavaClass
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1 @@
var field: kotlin.Int
@@ -0,0 +1,17 @@
KtJavaFieldSymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.field
contextReceivers: []
isExtension: false
isStatic: true
isVal: false
modality: FINAL
name: field
origin: JAVA
receiverParameter: null
returnType: kotlin/Int
symbolKind: CLASS_MEMBER
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,10 @@
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
// FILE: main.kt
fun some() {
JavaClass.f<caret>ield;
}
// FILE: JavaClass.java
public class JavaClass {
public static int field = 1;
}
@@ -0,0 +1 @@
open var field: kotlin.Int
@@ -0,0 +1,17 @@
KtJavaFieldSymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.field
contextReceivers: []
isExtension: false
isStatic: true
isVal: false
modality: OPEN
name: field
origin: JAVA
receiverParameter: null
returnType: kotlin/Int
symbolKind: CLASS_MEMBER
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,10 @@
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
// FILE: main.kt
fun some() {
JavaClass.f<caret>oo();
}
// FILE: JavaClass.java
public class JavaClass {
public static void foo() {};
}
@@ -0,0 +1 @@
open fun foo()
@@ -0,0 +1,26 @@
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.foo
contextReceivers: []
contractEffects: []
hasStableParameterNames: false
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: true
isSuspend: false
modality: OPEN
name: foo
origin: JAVA
receiverParameter: null
returnType: kotlin/Unit
symbolKind: CLASS_MEMBER
typeParameters: []
valueParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,2 @@
val JavaClass.foo: kotlin.Int
get()
@@ -0,0 +1,67 @@
KtSyntheticJavaPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.foo
contextReceivers: []
getter: KtPropertyGetterSymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.getFoo
contextReceivers: []
hasBody: false
hasStableParameterNames: true
isDefault: false
isExtension: false
isInline: false
isOverride: false
modality: FINAL
origin: SOURCE_MEMBER_GENERATED
receiverParameter: KtReceiverParameterSymbol:
annotationsList: []
origin: SOURCE
owningCallableSymbol: KtSyntheticJavaPropertySymbol(/JavaClass.foo)
type: JavaClass
getContainingModule: Could not render due to kotlin.NotImplementedError: An operation is not implemented: org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10ReceiverParameterSymbol
deprecationStatus: null
returnType: kotlin/Int
symbolKind: ACCESSOR
typeParameters: []
valueParameters: []
visibility: Public
getContainingModule: Could not render due to kotlin.NotImplementedError: An operation is not implemented: org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescPropertyGetterSymbol
deprecationStatus: null
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: null
isDelegatedProperty: false
isExtension: true
isFromPrimaryConstructor: false
isOverride: false
isStatic: false
isVal: true
javaGetterSymbol: KtFunctionSymbol(/JavaClass.getFoo)
javaSetterSymbol: null
modality: FINAL
name: foo
origin: JAVA_SYNTHETIC_PROPERTY
receiverParameter: KtReceiverParameterSymbol:
annotationsList: []
origin: SOURCE
owningCallableSymbol: KtSyntheticJavaPropertySymbol(/JavaClass.foo)
type: JavaClass
getContainingModule: Could not render due to kotlin.NotImplementedError: An operation is not implemented: org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10ReceiverParameterSymbol
deprecationStatus: null
returnType: kotlin/Int
setter: null
symbolKind: CLASS_MEMBER
typeParameters: []
visibility: Public
getContainingModule: Could not render due to kotlin.NotImplementedError: An operation is not implemented: org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescSyntheticJavaPropertySymbol
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getFoo
javaSetterName: null
setterDeprecationStatus: null
@@ -0,0 +1,10 @@
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
// FILE: main.kt
fun some() {
JavaClass().f<caret>oo;
}
// FILE: JavaClass.java
public class JavaClass {
public int getFoo() { return 1; };
}
@@ -0,0 +1,2 @@
open val foo: kotlin.Int
get()
@@ -0,0 +1,53 @@
KtSyntheticJavaPropertySymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.foo
contextReceivers: []
getter: KtPropertyGetterSymbol:
annotationsList: []
callableIdIfNonLocal: /JavaClass.getFoo
contextReceivers: []
hasBody: false
hasStableParameterNames: true
isDefault: false
isExtension: false
isInline: false
isOverride: false
modality: OPEN
origin: JAVA_SYNTHETIC_PROPERTY
receiverParameter: null
returnType: kotlin/Int
symbolKind: ACCESSOR
typeParameters: []
valueParameters: []
visibility: Public
getDispatchReceiver(): JavaClass
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: null
isDelegatedProperty: false
isExtension: false
isFromPrimaryConstructor: false
isOverride: false
isStatic: false
isVal: true
javaGetterSymbol: KtFunctionSymbol(/JavaClass.getFoo)
javaSetterSymbol: null
modality: OPEN
name: foo
origin: JAVA_SYNTHETIC_PROPERTY
receiverParameter: null
returnType: kotlin/Int
setter: null
symbolKind: CLASS_MEMBER
typeParameters: []
visibility: Public
getDispatchReceiver(): JavaClass
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getFoo
javaSetterName: null
setterDeprecationStatus: null