From b6abd6442aac73c2c31a065b407972bddf4d4980 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 11 Sep 2014 12:40:45 +0400 Subject: [PATCH] Don't try to search for component function if asked completely different function --- .../descriptors/LazyClassMemberScope.java | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java index ddf81b83139..54f77f7a0f2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java @@ -162,26 +162,33 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope properties = getProperties(parameter.getName()); - if (properties.isEmpty()) continue; - assert properties.size() == 1 : "A constructor parameter is resolved to more than one (" + properties.size() + ") property: " + parameter; - PropertyDescriptor property = (PropertyDescriptor) properties.iterator().next(); - if (property == null) continue; + for (ValueParameterDescriptor parameter : constructor.getValueParameters()) { + if (parameter.getType().isError()) continue; + if (!primaryConstructorParameters.get(parameter.getIndex()).hasValOrVarNode()) continue; - ++componentIndex; + Set properties = getProperties(parameter.getName()); + if (properties.isEmpty()) continue; - if (name.equals(DataClassUtilsPackage.createComponentName(componentIndex))) { - SimpleFunctionDescriptor functionDescriptor = DescriptorResolver.createComponentFunctionDescriptor( - componentIndex, property, parameter, thisDescriptor, trace); - result.add(functionDescriptor); - break; + assert properties.size() == 1 : + "A constructor parameter is resolved to more than one (" + properties.size() + ") property: " + parameter; + + PropertyDescriptor property = (PropertyDescriptor) properties.iterator().next(); + 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)) { SimpleFunctionDescriptor copyFunctionDescriptor = DescriptorResolver.createCopyFunctionDescriptor( constructor.getValueParameters(),