Don't try to search for component function if asked completely different function

This commit is contained in:
Nikolay Krasko
2014-09-11 12:40:45 +04:00
parent c3f44d5030
commit b6abd6442a
@@ -162,26 +162,33 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
assert constructor.getValueParameters().size() == primaryConstructorParameters.size() assert constructor.getValueParameters().size() == primaryConstructorParameters.size()
: "From descriptor: " + constructor.getValueParameters().size() + " but from PSI: " + primaryConstructorParameters.size(); : "From descriptor: " + constructor.getValueParameters().size() + " but from PSI: " + primaryConstructorParameters.size();
int componentIndex = 0; if (DataClassUtilsPackage.isComponentLike(name)) {
for (ValueParameterDescriptor parameter : constructor.getValueParameters()) { int componentIndex = 0;
if (parameter.getType().isError()) continue;
if (!primaryConstructorParameters.get(parameter.getIndex()).hasValOrVarNode()) continue;
Set<VariableDescriptor> properties = getProperties(parameter.getName()); for (ValueParameterDescriptor parameter : constructor.getValueParameters()) {
if (properties.isEmpty()) continue; if (parameter.getType().isError()) continue;
assert properties.size() == 1 : "A constructor parameter is resolved to more than one (" + properties.size() + ") property: " + parameter; if (!primaryConstructorParameters.get(parameter.getIndex()).hasValOrVarNode()) continue;
PropertyDescriptor property = (PropertyDescriptor) properties.iterator().next();
if (property == null) continue;
++componentIndex; Set<VariableDescriptor> properties = getProperties(parameter.getName());
if (properties.isEmpty()) continue;
if (name.equals(DataClassUtilsPackage.createComponentName(componentIndex))) { assert properties.size() == 1 :
SimpleFunctionDescriptor functionDescriptor = DescriptorResolver.createComponentFunctionDescriptor( "A constructor parameter is resolved to more than one (" + properties.size() + ") property: " + parameter;
componentIndex, property, parameter, thisDescriptor, trace);
result.add(functionDescriptor); PropertyDescriptor property = (PropertyDescriptor) properties.iterator().next();
break; if (property == null) continue;
++componentIndex;
if (name.equals(DataClassUtilsPackage.createComponentName(componentIndex))) {
SimpleFunctionDescriptor functionDescriptor = DescriptorResolver.createComponentFunctionDescriptor(
componentIndex, property, parameter, thisDescriptor, trace);
result.add(functionDescriptor);
break;
}
} }
} }
if (name.equals(DescriptorResolver.COPY_METHOD_NAME)) { if (name.equals(DescriptorResolver.COPY_METHOD_NAME)) {
SimpleFunctionDescriptor copyFunctionDescriptor = DescriptorResolver.createCopyFunctionDescriptor( SimpleFunctionDescriptor copyFunctionDescriptor = DescriptorResolver.createCopyFunctionDescriptor(
constructor.getValueParameters(), constructor.getValueParameters(),