KT-8530 Synthetic properties doesn't work with smart casts

#KT-8530 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-07-17 15:13:39 +03:00
parent b6027a0efe
commit 23cfe88b71
19 changed files with 229 additions and 71 deletions
@@ -167,7 +167,9 @@ public class ReferenceVariantsHelper(
val memberFilter = kindFilter exclude DescriptorKindExclude.Extensions
val containingDeclaration = resolutionScope.getContainingDeclaration()
for (receiverType in SmartCastUtils.getSmartCastVariantsWithLessSpecificExcluded(receiverValue, context, containingDeclaration, dataFlowInfo)) {
val receiverTypes = SmartCastUtils.getSmartCastVariantsWithLessSpecificExcluded(receiverValue, context, containingDeclaration, dataFlowInfo)
for (receiverType in receiverTypes) {
val members = receiverType.getMemberScope().getDescriptorsFiltered(DescriptorKindFilter.ALL, nameFilter) // filter by kind later because of constructors
for (member in members) {
if (member is ClassDescriptor) {
@@ -179,12 +181,12 @@ public class ReferenceVariantsHelper(
this.add(member)
}
}
}
if (!kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) {
for (extension in resolutionScope.getSyntheticExtensionProperties(receiverType)) {
if (nameFilter(extension.getName()) && kindFilter.accepts(extension)) {
addAll(extension.substituteExtensionIfCallable(receiverValue, callType, context, dataFlowInfo, containingDeclaration))
}
if (!kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) {
for (extension in resolutionScope.getSyntheticExtensionProperties(receiverTypes)) {
if (nameFilter(extension.getName()) && kindFilter.accepts(extension)) {
addAll(extension.substituteExtensionIfCallable(receiverValue, callType, context, dataFlowInfo, containingDeclaration))
}
}
}