Merge branch 'master' of git.labs.intellij.net:idea/ultimate

This commit is contained in:
Dmitry Cheryasov
2010-05-05 20:00:30 +03:00
6 changed files with 31 additions and 10 deletions

View File

@@ -4,7 +4,6 @@ import com.intellij.codeInsight.completion.InsertHandler;
import com.intellij.codeInsight.completion.InsertionContext;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.codeInsight.lookup.LookupItem;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
@@ -30,7 +29,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.HashSet;
/**
* @author yole
@@ -264,4 +262,27 @@ public class PyImportReferenceImpl extends PyReferenceImpl {
editor.getCaretModel().moveToOffset(tailOffset + IMPORT_KWD.length());
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
PyImportReferenceImpl that = (PyImportReferenceImpl)o;
if (!myElement.equals(that.myElement)) return false;
if (!myContext.equals(that.myContext)) return false;
return true;
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + myElement.hashCode();
result = 31 * result + myContext.hashCode();
return result;
}
}

View File

@@ -567,7 +567,6 @@ public class ResolveImportUtil {
final PsiFile containingFile, boolean fileOnly) {
PsiDirectory dir = null;
PsiElement ret = null;
ResolveProcessor processor = null;
if (parent instanceof PyFile) {
if (parent.getCopyableUserData(PyFile.KEY_IS_DIRECTORY) == Boolean.TRUE) {
// the file was a fake __init__.py covering a reference to dir
@@ -586,13 +585,13 @@ public class ResolveImportUtil {
else if (parent instanceof PsiDirectoryContainer) {
final PsiDirectoryContainer container = (PsiDirectoryContainer)parent;
for(PsiDirectory childDir: container.getDirectories()) {
final PsiElement result = resolveInDirectory(referencedName, containingFile, childDir, processor, fileOnly);
final PsiElement result = resolveInDirectory(referencedName, containingFile, childDir, fileOnly);
//if (fileOnly && ! (result instanceof PsiFile) && ! (result instanceof PsiDirectory)) return null;
if (result != null) return result;
}
}
if (dir != null) {
final PsiElement result = resolveInDirectory(referencedName, containingFile, dir, processor, fileOnly);
final PsiElement result = resolveInDirectory(referencedName, containingFile, dir, fileOnly);
//if (fileOnly && ! (result instanceof PsiFile) && ! (result instanceof PsiDirectory)) return null;
return result;
}
@@ -600,9 +599,8 @@ public class ResolveImportUtil {
}
@Nullable
private static PsiElement resolveInDirectory(
final String referencedName, final PsiFile containingFile, final PsiDirectory dir, ResolveProcessor processor, boolean isFileOnly
) {
private static PsiElement resolveInDirectory(final String referencedName, final PsiFile containingFile,
final PsiDirectory dir, boolean isFileOnly) {
if (referencedName == null) return null;
final PsiFile file = dir.findFile(referencedName + PyNames.DOT_PY);
// findFile() does case-insensitive search, and we need exactly matching case (see PY-381)
@@ -610,7 +608,9 @@ public class ResolveImportUtil {
return file;
}
final PsiDirectory subdir = dir.findSubdirectory(referencedName);
if (subdir != null) return subdir;
if (subdir != null && subdir.findFile(PyNames.INIT_DOT_PY) != null) {
return subdir;
}
else if (! isFileOnly) {
// not a subdir, not a file; could be a name in parent/__init__.py
final PsiFile initPy = dir.findFile(PyNames.INIT_DOT_PY);

View File

View File

@@ -89,7 +89,7 @@ public class PythonCompletionTest extends PyLightFixtureTestCase {
public void testPy255() throws Exception {
final String dirname = "completion/";
final String testName = dirname + "moduleClass";
myFixture.configureByFile(testName + ".py");
myFixture.configureByFiles(testName + ".py", dirname + "__init__.py");
myFixture.copyDirectoryToProject(dirname + "mymodule", dirname + "mymodule");
myFixture.copyDirectoryToProject(dirname + "mymodule/mysubmodule", dirname + "mymodule/mysubmodule");
myFixture.completeBasic();