From 8d5c6297c7c6214dfaccf48be2b11d9ce0408bca Mon Sep 17 00:00:00 2001 From: Jaebaek Seo Date: Fri, 8 Jul 2022 19:04:16 +0000 Subject: [PATCH] Add ReadWriteAccessCheckerFirImpl class ReadWriteAccessCheckerFirImpl class is ReadWriteAccessChecker implementation for FIR. We register it for both stand-alone and test analsys. It is used by KotlinFirReferenceContributor.kt to check the synthetic Java property. --- .../fir/references/FirSimpleNameReference.kt | 1 - .../KotlinFirReferenceContributor.kt | 2 -- .../ReadWriteAccessCheckerFirImpl.kt | 18 ++++++++++++++++++ .../StandaloneAnalysisAPISessionBuilder.kt | 3 +++ .../base/AnalysisApiFirTestServiceRegistrar.kt | 3 +++ 5 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/ReadWriteAccessCheckerFirImpl.kt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt index ef0bed2ca76..2261fcff941 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSyntheticJavaPropertyS import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.references.ReferenceAccess internal class KtFirSimpleNameReference( expression: KtSimpleNameExpression, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KotlinFirReferenceContributor.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KotlinFirReferenceContributor.kt index 3609d06628f..912d5a28a69 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KotlinFirReferenceContributor.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KotlinFirReferenceContributor.kt @@ -5,8 +5,6 @@ package org.jetbrains.kotlin.idea.references -import com.intellij.psi.PsiReference -import org.jetbrains.kotlin.psi.KtNameReferenceExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.resolve.references.ReferenceAccess diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/ReadWriteAccessCheckerFirImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/ReadWriteAccessCheckerFirImpl.kt new file mode 100644 index 00000000000..6e55b90b8d7 --- /dev/null +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/ReadWriteAccessCheckerFirImpl.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2010-2022 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.analysis.api.fir.references + +import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker +import org.jetbrains.kotlin.psi.KtBinaryExpression +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.resolve.references.ReferenceAccess + +class ReadWriteAccessCheckerFirImpl : ReadWriteAccessChecker { + override fun readWriteAccessWithFullExpressionByResolve(assignment: KtBinaryExpression): Pair? { + // TODO + return null + } +} \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt index 151066b3fcc..6c54e6aa5fd 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt @@ -14,6 +14,7 @@ import com.intellij.psi.impl.PsiElementFinderImpl import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider +import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService import org.jetbrains.kotlin.analysis.api.lifetime.KtDefaultLifetimeTokenProvider import org.jetbrains.kotlin.analysis.api.lifetime.KtReadActionConfinementDefaultLifetimeTokenProvider @@ -48,6 +49,7 @@ import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor +import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker import org.jetbrains.kotlin.light.classes.symbol.KotlinAsJavaFirSupport import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache import org.jetbrains.kotlin.load.kotlin.PackagePartProvider @@ -152,6 +154,7 @@ public class StandaloneAnalysisAPISessionBuilder( registerService(SymbolLightClassFacadeCache::class.java, SymbolLightClassFacadeCache(this)) registerService(ClsJavaStubByVirtualFileCache::class.java, ClsJavaStubByVirtualFileCache()) registerService(KotlinAsJavaSupport::class.java, KotlinAsJavaFirSupport(this)) + registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) } @Suppress("DEPRECATION") diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt index 80932bf900a..cf9af626ea6 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt @@ -12,6 +12,7 @@ import com.intellij.psi.impl.PsiElementFinderImpl import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider +import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory @@ -26,6 +27,7 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor +import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker import org.jetbrains.kotlin.light.classes.symbol.KotlinAsJavaFirSupport import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache import org.jetbrains.kotlin.test.TestInfrastructureInternals @@ -49,6 +51,7 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { registerService(SymbolLightClassFacadeCache::class.java) registerService(KotlinAsJavaSupport::class.java, KotlinAsJavaFirSupport(project)) registerService(KtCompilerPluginsProvider::class.java, KtCompilerPluginsProviderForTests(project)) + registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) } with(PsiElementFinder.EP.getPoint(project)) {