test and a bit of refactoring for py->java resolve

This commit is contained in:
Dmitry Jemerov
2008-03-14 15:31:41 +03:00
parent 666a29eec1
commit dafa93878d
4 changed files with 60 additions and 13 deletions
@@ -2,10 +2,7 @@ package com.jetbrains.python.psi.impl;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.*;
import com.jetbrains.python.psi.PyReferenceExpression;
import org.jetbrains.annotations.Nullable;
@@ -14,8 +11,14 @@ import org.jetbrains.annotations.Nullable;
*/
public class PyJavaImportResolver implements PyImportResolver {
@Nullable
public PsiElement resolveImportReference(final PyReferenceExpression importRef, final PsiElement importFrom) {
public PsiElement resolveImportReference(final PyReferenceExpression importRef, PsiElement importFrom) {
String fqn = importRef.getText();
if (importFrom instanceof PsiDirectory) {
PsiPackage fromPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory) importFrom);
if (fromPackage != null) {
importFrom = fromPackage;
}
}
if (importFrom instanceof PsiPackage) {
fqn = ((PsiPackage) importFrom).getQualifiedName() + "." + fqn;
}
@@ -1,14 +1,14 @@
package com.jetbrains.python.psi.impl;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.jetbrains.python.psi.*;
import org.jetbrains.annotations.Nullable;
@@ -36,13 +36,16 @@ public class ResolveImportUtil {
}
}
for(PyImportResolver resolver: Extensions.getExtensions(PyImportResolver.EP_NAME)) {
PsiElement result = resolver.resolveImportReference(importRef, importFrom);
if (result != null) {
return result;
}
PsiElement result = resolvePythonImport(importRef, importFrom, referencedName);
if (result != null) {
return result;
}
return resolveForeignImport(importRef, importFrom);
}
@Nullable
private static PsiElement resolvePythonImport(final PyReferenceExpression importRef, final PsiElement importFrom,
final String referencedName) {
final PyExpression qualifier = importRef.getQualifier();
if (qualifier instanceof PyReferenceExpression) {
PsiElement qualifierElement = ((PyReferenceExpression) qualifier).resolve();
@@ -71,6 +74,17 @@ public class ResolveImportUtil {
return ModuleRootManager.getInstance(module).processOrder(resolvePolicy, null);
}
@Nullable
private static PsiElement resolveForeignImport(final PyReferenceExpression importRef, final PsiElement importFrom) {
for(PyImportResolver resolver: Extensions.getExtensions(PyImportResolver.EP_NAME)) {
PsiElement result = resolver.resolveImportReference(importRef, importFrom);
if (result != null) {
return result;
}
}
return null;
}
@Nullable
private static PsiElement resolveInRoots(final VirtualFile[] roots, final String referencedName, final PyReferenceExpression importRef) {
for(VirtualFile contentRoot: roots) {
@@ -0,0 +1,2 @@
from java.util import ArrayL<ref>ist
@@ -0,0 +1,28 @@
package com.jetbrains.python;
import com.intellij.openapi.application.PathManager;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.testFramework.ResolveTestCase;
/**
* @author yole
*/
public class PyToJavaResolveTest extends ResolveTestCase {
private PsiElement resolve() throws Exception {
PsiReference ref = configureByFile(getTestName(false) + ".py");
return ref.resolve();
}
public void testSimple() throws Exception {
PsiElement target = resolve();
assertTrue(target instanceof PsiClass);
assertEquals("java.util.ArrayList", ((PsiClass) target).getQualifiedName());
}
@Override
protected String getTestDataPath() {
return PathManager.getHomePath() + "/plugins/python/testData/resolve/pyToJava/";
}
}