FIR2IR: fix intersection type smart cast when synthetic property accessed

This commit is contained in:
Mikhail Glukhikh
2021-01-22 09:00:32 +03:00
parent 504bdfc283
commit 1c9064836e
8 changed files with 560 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
// FILE: Modality.java
public interface Modality
// FILE: DeclarationDescriptor.java
public interface DeclarationDescriptor
// FILE: DeclarationDescriptorWithVisibility.java
public interface DeclarationDescriptorWithVisibility extends DeclarationDescriptor
// FILE: DeclarationDescriptorWithSource.java
public interface DeclarationDescriptorWithSource extends DeclarationDescriptor
// FILE: DeclarationDescriptorNonRoot.java
public interface DeclarationDescriptorNonRoot extends DeclarationDescriptorWithSource
// FILE: CallableDescriptor.java
public interface CallableDescriptor extends
DeclarationDescriptorWithVisibility, DeclarationDescriptorNonRoot, Substitutable<CallableDescriptor>
// FILE: MemberDescriptor.java
public interface MemberDescriptor extends DeclarationDescriptorNonRoot, DeclarationDescriptorWithVisibility {
Modality getModality();
}
// FILE: Modality.kt
interface Substitutable<out T : DeclarationDescriptorNonRoot>
abstract class ResolutionPart {
abstract fun KotlinResolutionCandidate.process(): String
// helper functions
//protected inline val KotlinResolutionCandidate.candidateDescriptor get() = resolvedCall.candidateDescriptor
}
class KotlinResolutionCandidate(val resolvedCall: Atom)
class Atom(val candidateDescriptor: CallableDescriptor)
object Owner : ResolutionPart() {
override fun KotlinResolutionCandidate.process(): String {
val candidateDescriptor = resolvedCall.candidateDescriptor
if (candidateDescriptor is MemberDescriptor && candidateDescriptor.modality != null) {
return "OK"
}
return "FAIL"
}
}
object Final : Modality