[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.jvm.*
|
||||
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.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.lazy.AbstractFir2IrLazyDeclaration
|
||||
import org.jetbrains.kotlin.fir.pipeline.applyIrGenerationExtensions
|
||||
import org.jetbrains.kotlin.fir.pipeline.signatureComposerForJvmFir2Ir
|
||||
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
|
||||
* 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(
|
||||
|
||||
Reference in New Issue
Block a user