resolve constructor reference in standard library

This commit is contained in:
Svetlana Isakova
2012-09-05 17:44:17 +04:00
parent e72c3d79f8
commit b4e3c36c5e
3 changed files with 18 additions and 2 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.jet.plugin.references;
import com.google.common.collect.Lists;
import com.intellij.openapi.components.AbstractProjectComponent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
@@ -44,6 +45,7 @@ import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.resolve.DescriptorRenderer;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -115,6 +117,7 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
});
}
@Nullable
private DeclarationDescriptor findCurrentDescriptorForClass(@NotNull ClassDescriptor originalDescriptor) {
if (originalDescriptor.getKind().isObject()) {
DeclarationDescriptor currentParent = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
@@ -126,12 +129,19 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
}
}
@Nullable
private DeclarationDescriptor findCurrentDescriptorForMember(@NotNull MemberDescriptor originalDescriptor) {
JetScope memberScope = getMemberScope(findCurrentDescriptor(originalDescriptor.getContainingDeclaration()));
DeclarationDescriptor containingDeclaration = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
JetScope memberScope = getMemberScope(containingDeclaration);
if (memberScope == null) return null;
String renderedOriginal = DescriptorRenderer.TEXT.render(originalDescriptor);
for (DeclarationDescriptor member : memberScope.getAllDescriptors()) {
Collection<DeclarationDescriptor> descriptors = Lists.newArrayList();
descriptors.addAll(memberScope.getAllDescriptors());
if (containingDeclaration instanceof ClassDescriptor) {
descriptors.addAll(((ClassDescriptor) containingDeclaration).getConstructors());
}
for (DeclarationDescriptor member : descriptors) {
if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(),
JetStandardClasses.UNIT_ALIAS.getName()))) {
return member;
@@ -0,0 +1,2 @@
val ia = <ref>IntArray(4)
//jet/Arrays.jet:IntArray
@@ -71,6 +71,10 @@ public class StandardLibraryReferenceResolverTest extends ResolveTestCase {
doTest();
}
public void testIntArrayConstructor() throws Exception {
doTest();
}
public void testAllReferencesResolved() {
StandardLibraryReferenceResolver referenceResolver = getProject().getComponent(StandardLibraryReferenceResolver.class);
for (DeclarationDescriptor descriptor : getAllStandardDescriptors(JetStandardClasses.STANDARD_CLASSES_NAMESPACE)) {