mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-15603 Clean up in PyQualifiedNameProvider, add tests on class members
GitOrigin-RevId: 8082da991199b19830ff565065ef4d2d9124b37d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
83dc1fbc2d
commit
422c6aa643
@@ -31,7 +31,7 @@ import java.util.Collection;
|
||||
|
||||
public class PyQualifiedNameProvider implements QualifiedNameProvider {
|
||||
|
||||
public static final char SEPARATOR = '.';
|
||||
private static final char CLASS_MEMBER_SEPARATOR = '.';
|
||||
|
||||
@Override
|
||||
public PsiElement adjustElementToCopy(PsiElement element) {
|
||||
@@ -47,7 +47,7 @@ public class PyQualifiedNameProvider implements QualifiedNameProvider {
|
||||
if (element instanceof PyFunction) {
|
||||
final PyClass containingClass = ((PyFunction)element).getContainingClass();
|
||||
if (containingClass != null) {
|
||||
return containingClass.getQualifiedName() + SEPARATOR + ((PyFunction)element).getName();
|
||||
return containingClass.getQualifiedName() + CLASS_MEMBER_SEPARATOR + ((PyFunction)element).getName();
|
||||
}
|
||||
else {
|
||||
return ((PyFunction)element).getQualifiedName();
|
||||
@@ -67,13 +67,12 @@ public class PyQualifiedNameProvider implements QualifiedNameProvider {
|
||||
if (!functions.isEmpty()) {
|
||||
return ContainerUtil.getFirstItem(functions);
|
||||
}
|
||||
final int sharpIdx = fqn.lastIndexOf(SEPARATOR);
|
||||
|
||||
if (sharpIdx > -1) {
|
||||
final String className = StringUtil.getPackageName(fqn, SEPARATOR);
|
||||
if (StringUtil.containsChar(fqn, CLASS_MEMBER_SEPARATOR)) {
|
||||
final String className = StringUtil.getPackageName(fqn, CLASS_MEMBER_SEPARATOR);
|
||||
aClass = PyClassNameIndex.findClass(className, project);
|
||||
if (aClass != null) {
|
||||
final String memberName = StringUtil.getShortName(fqn, SEPARATOR);
|
||||
final String memberName = StringUtil.getShortName(fqn, CLASS_MEMBER_SEPARATOR);
|
||||
final PyClass nestedClass = aClass.findNestedClass(memberName, false);
|
||||
if (nestedClass != null) return nestedClass;
|
||||
final PyFunction methodByName = aClass.findMethodByName(memberName, false, null);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
class MyClass:
|
||||
def met<caret>hod(self):
|
||||
pass
|
||||
@@ -0,0 +1,3 @@
|
||||
class MyClass:
|
||||
class Nes<caret>ted:
|
||||
pass
|
||||
@@ -15,16 +15,16 @@
|
||||
*/
|
||||
package com.jetbrains.python;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.actions.PyQualifiedNameProvider;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Mikhail Golubev
|
||||
*/
|
||||
public class PyQualifiedNameProviderTest extends PyTestCase {
|
||||
@Test
|
||||
public void testTopLevelFunctionReference() {
|
||||
myFixture.copyDirectoryToProject(getTestName(true) + "/a", "a");
|
||||
myFixture.configureByFile("a/b/c/module.py");
|
||||
@@ -36,6 +36,25 @@ public class PyQualifiedNameProviderTest extends PyTestCase {
|
||||
return new PyQualifiedNameProvider().getQualifiedName(myFixture.getElementAtCaret());
|
||||
}
|
||||
|
||||
public void testNestedClassReference() {
|
||||
doDirectoryTest("pkg/subpkg/mod.py", "pkg.subpkg.mod.MyClass.Nested");
|
||||
}
|
||||
|
||||
public void testMethodReference() {
|
||||
doDirectoryTest("pkg/subpkg/mod.py", "pkg.subpkg.mod.MyClass.method");
|
||||
}
|
||||
|
||||
private void doDirectoryTest(@NotNull String targetFile, @NotNull String expectedQualifiedName) {
|
||||
myFixture.copyDirectoryToProject(getTestName(true), "");
|
||||
myFixture.configureByFile(targetFile);
|
||||
final PsiElement target = myFixture.getElementAtCaret();
|
||||
final PyQualifiedNameProvider provider = new PyQualifiedNameProvider();
|
||||
final String actualQualifiedName = provider.getQualifiedName(myFixture.getElementAtCaret());
|
||||
assertEquals(expectedQualifiedName, actualQualifiedName);
|
||||
final PsiElement element = provider.qualifiedNameToElement(expectedQualifiedName, myFixture.getProject());
|
||||
assertEquals(target, element);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestDataPath() {
|
||||
return super.getTestDataPath() + "/qualifiedName";
|
||||
|
||||
Reference in New Issue
Block a user