[LL API] Fix reflective patching for field accesses
Implement the same behavior as in K1 evaluator. Also see 'IRFragmentCompilerCodegen#codegenFactory' in the IntelliJ project. The commit fixes the following failing tests in the IntelliJ project: - K2IdeK2CodeKotlinEvaluateExpressionTestGenerated$SingleBreakpoint$CompilingEvaluator$InaccessibleMembers.testPrivateAnnotationCompanionValue - K2IdeK2CodeKotlinEvaluateExpressionTestGenerated$SingleBreakpoint$CompilingEvaluator$InaccessibleMembers.testSelfMembers - K2IdeK2CodeKotlinEvaluateExpressionTestGenerated$SingleBreakpoint$CompilingEvaluator$InaccessibleMembers.testOuterMembers - K2IdeK2CodeKotlinEvaluateExpressionTestGenerated$SingleBreakpoint$Uncategorized.testPrivateMember - K2IdeK2CodeKotlinEvaluateExpressionTestGenerated$SingleBreakpoint$Uncategorized.testProperties - K2IdeK2CodeKotlinEvaluateExpressionTestGenerated$SingleBreakpoint$Uncategorized.testPrivatePropertyWithExplicitDefaultGetter - K2IdeK2CodeKotlinEvaluateExpressionTestGenerated$SingleBreakpoint$Uncategorized.testPrivateClass
This commit is contained in:
+11
-1
@@ -44,8 +44,10 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.toFirDiagnostics
|
|||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.*
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.*
|
import org.jetbrains.kotlin.fir.backend.jvm.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.utils.hasBody
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSyntaxDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeSyntaxDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||||
|
import org.jetbrains.kotlin.fir.lazy.AbstractFir2IrLazyDeclaration
|
||||||
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
||||||
import org.jetbrains.kotlin.fir.pipeline.signatureComposerForJvmFir2Ir
|
import org.jetbrains.kotlin.fir.pipeline.signatureComposerForJvmFir2Ir
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
@@ -435,7 +437,15 @@ internal class KtFirCompilerFacility(
|
|||||||
* [org.jetbrains.kotlin.backend.jvm.lower.ReflectiveAccessLowering.visitGetField] (or visitSetField) generates the access without
|
* [org.jetbrains.kotlin.backend.jvm.lower.ReflectiveAccessLowering.visitGetField] (or visitSetField) generates the access without
|
||||||
* asking.
|
* asking.
|
||||||
*/
|
*/
|
||||||
override fun isAccessorWithExplicitImplementation(accessor: IrSimpleFunction) = true
|
override fun isAccessorWithExplicitImplementation(accessor: IrSimpleFunction): Boolean {
|
||||||
|
if (accessor is AbstractFir2IrLazyDeclaration<*>) {
|
||||||
|
val fir = accessor.fir
|
||||||
|
if (fir is FirFunction && fir.hasBody) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CompilerFacilityFir2IrExtensions(
|
private class CompilerFacilityFir2IrExtensions(
|
||||||
|
|||||||
Reference in New Issue
Block a user