resolve constructor reference in standard library
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.references;
|
package org.jetbrains.jet.plugin.references;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.openapi.components.AbstractProjectComponent;
|
import com.intellij.openapi.components.AbstractProjectComponent;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.startup.StartupManager;
|
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 org.jetbrains.jet.resolve.DescriptorRenderer;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -115,6 +117,7 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
private DeclarationDescriptor findCurrentDescriptorForClass(@NotNull ClassDescriptor originalDescriptor) {
|
private DeclarationDescriptor findCurrentDescriptorForClass(@NotNull ClassDescriptor originalDescriptor) {
|
||||||
if (originalDescriptor.getKind().isObject()) {
|
if (originalDescriptor.getKind().isObject()) {
|
||||||
DeclarationDescriptor currentParent = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
|
DeclarationDescriptor currentParent = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
|
||||||
@@ -126,12 +129,19 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
private DeclarationDescriptor findCurrentDescriptorForMember(@NotNull MemberDescriptor originalDescriptor) {
|
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;
|
if (memberScope == null) return null;
|
||||||
|
|
||||||
String renderedOriginal = DescriptorRenderer.TEXT.render(originalDescriptor);
|
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(),
|
if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(),
|
||||||
JetStandardClasses.UNIT_ALIAS.getName()))) {
|
JetStandardClasses.UNIT_ALIAS.getName()))) {
|
||||||
return member;
|
return member;
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
val ia = <ref>IntArray(4)
|
||||||
|
//jet/Arrays.jet:IntArray
|
||||||
+4
@@ -71,6 +71,10 @@ public class StandardLibraryReferenceResolverTest extends ResolveTestCase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIntArrayConstructor() throws Exception {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testAllReferencesResolved() {
|
public void testAllReferencesResolved() {
|
||||||
StandardLibraryReferenceResolver referenceResolver = getProject().getComponent(StandardLibraryReferenceResolver.class);
|
StandardLibraryReferenceResolver referenceResolver = getProject().getComponent(StandardLibraryReferenceResolver.class);
|
||||||
for (DeclarationDescriptor descriptor : getAllStandardDescriptors(JetStandardClasses.STANDARD_CLASSES_NAMESPACE)) {
|
for (DeclarationDescriptor descriptor : getAllStandardDescriptors(JetStandardClasses.STANDARD_CLASSES_NAMESPACE)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user