Trying to rewrite code to avoid JVM crash

This commit is contained in:
Valentin Kipyatkov
2014-12-17 21:48:00 +03:00
parent 6ec10b9b6b
commit d8574f38d2
@@ -102,20 +102,7 @@ public class ReferenceVariantsHelper(
val receiverValue = ExpressionReceiver(receiverExpression, expressionType)
val dataFlowInfo = context.getDataFlowInfo(expression)
var memberFilter = kindFilter exclude DescriptorKindExclude.Extensions
for (variant in SmartCastUtils.getSmartCastVariantsWithLessSpecificExcluded(receiverValue, context, dataFlowInfo)) {
val members = variant.getMemberScope().getDescriptorsFiltered(DescriptorKindFilter.ALL, nameFilter) // filter by kind later because of constructors
for (member in members) {
if (member is ClassDescriptor) {
if (member.isInner()) {
member.getConstructors().filterTo(descriptors) { callType.canCall(it) && memberFilter.accepts(it) }
}
}
else if (callType.canCall(member) && memberFilter.accepts(member)) {
descriptors.add(member)
}
}
}
descriptors.addMembers(receiverValue, callType, dataFlowInfo, kindFilter, nameFilter)
descriptors.addCallableExtensions(resolutionScope, receiverValue, dataFlowInfo, callType, kindFilter, nameFilter)
}
@@ -146,6 +133,28 @@ public class ReferenceVariantsHelper(
}
}
private fun MutableCollection<DeclarationDescriptor>.addMembers(
receiverValue: ExpressionReceiver,
callType: CallType,
dataFlowInfo: DataFlowInfo,
kindFilter: DescriptorKindFilter,
nameFilter: (Name) -> Boolean) {
var memberFilter = kindFilter exclude DescriptorKindExclude.Extensions
for (variant in SmartCastUtils.getSmartCastVariantsWithLessSpecificExcluded(receiverValue, context, dataFlowInfo)) {
val members = variant.getMemberScope().getDescriptorsFiltered(DescriptorKindFilter.ALL, nameFilter) // filter by kind later because of constructors
for (member in members) {
if (member is ClassDescriptor) {
if (member.isInner()) {
member.getConstructors().filterTo(this) { callType.canCall(it) && memberFilter.accepts(it) }
}
}
else if (callType.canCall(member) && memberFilter.accepts(member)) {
this.add(member)
}
}
}
}
public fun getReferenceVariantsReceivers(expression: JetSimpleNameExpression): ReceiversData {
val receiverData = getExplicitReceiverData(expression)
if (receiverData != null) {