diff --git a/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java index 71a83806d42b..7d9bc1f74f23 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFileImpl.java @@ -24,7 +24,6 @@ import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.NonPhysicalFileSystem; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -108,7 +107,7 @@ public class PyFileImpl extends PsiFileBase implements PyFile, PyExpression { Map localDeclarations, MultiMap ambiguousDeclarations, List nameDefiners) { - if (child instanceof PsiNamedElement) { + if (child instanceof PyTargetExpression || child instanceof PyFunction || child instanceof PyClass) { final String name = ((PsiNamedElement)child).getName(); localDeclarations.put(name, child); } diff --git a/python/testData/resolve/multiFile/keywordArgument/KeywordArgument.py b/python/testData/resolve/multiFile/keywordArgument/KeywordArgument.py new file mode 100644 index 000000000000..603adb37ff8d --- /dev/null +++ b/python/testData/resolve/multiFile/keywordArgument/KeywordArgument.py @@ -0,0 +1,5 @@ +from a import A + +print(A()) +# + diff --git a/python/testData/resolve/multiFile/keywordArgument/a.py b/python/testData/resolve/multiFile/keywordArgument/a.py new file mode 100644 index 000000000000..55c335cb7261 --- /dev/null +++ b/python/testData/resolve/multiFile/keywordArgument/a.py @@ -0,0 +1,9 @@ + +class A: + pass + +def foo(A=1): + pass + +foo(A=2) + diff --git a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java index 244be9594dd8..d5dbea0a5b30 100644 --- a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java @@ -15,7 +15,9 @@ */ package com.jetbrains.python; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.psi.impl.source.PsiFileImpl; import com.jetbrains.python.fixtures.PyMultiFileResolveTestCase; import com.jetbrains.python.fixtures.PyTestCase; import com.jetbrains.python.psi.*; @@ -383,4 +385,21 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase { } }); } + + public void testKeywordArgument() { + final PsiFile file = prepareFile(); + final PsiManager psiManager = myFixture.getPsiManager(); + final VirtualFile dir = myFixture.findFileInTempDir("a.py"); + final PsiFile psiFile = psiManager.findFile(dir); + //noinspection ConstantConditions we need to unstub a.py here + ((PsiFileImpl)psiFile).calcTreeElement(); + final PsiElement element; + try { + element = doResolve(file); + } + catch (Exception e) { + throw new RuntimeException(e); + } + assertResolveResult(element, PyClass.class, "A"); + } } \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java index 22b4e5483cd5..e3279805a97f 100644 --- a/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java +++ b/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java @@ -60,7 +60,7 @@ public abstract class PyMultiFileResolveTestCase extends PyResolveTestCase { PsiDocumentManager.getInstance(myFixture.getProject()).commitAllDocuments(); } - private PsiFile prepareFile() { + protected PsiFile prepareFile() { prepareTestDirectory(); VirtualFile sourceFile = null; for (String ext : new String[]{".py", ".pyx"}) {