mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix PyCustomMember targeting a class
This commit is contained in:
committed by
Andrey Vlasovskikh
parent
864cd060a6
commit
a82000de58
@@ -203,6 +203,9 @@ public class PyCustomMember extends UserDataHolderBase {
|
||||
return resolveTarget;
|
||||
}
|
||||
if (resolveTarget != null || targetClass != null) {
|
||||
if (targetClass == null && resolveTarget instanceof PyClass) {
|
||||
targetClass = (PyClass)resolveTarget;
|
||||
}
|
||||
return new MyInstanceElement(targetClass, context, resolveTarget);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
class Clazz(object):
|
||||
def member_fun(self):
|
||||
return True
|
||||
@@ -16,27 +16,25 @@
|
||||
package com.jetbrains.python;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.openapi.extensions.ExtensionPoint;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.GeneratedSourcesFilter;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.PsiFileImpl;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.fixtures.PyMultiFileResolveTestCase;
|
||||
import com.jetbrains.python.fixtures.PyResolveTestCase;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.impl.PyImportResolver;
|
||||
import com.jetbrains.python.psi.impl.PyPsiUtils;
|
||||
import com.jetbrains.python.psi.resolve.PyQualifiedNameResolveContext;
|
||||
import com.jetbrains.python.psi.types.PyClassType;
|
||||
import com.jetbrains.python.psi.types.PyType;
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -543,4 +541,15 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase {
|
||||
return fileSystemItems.map(f -> VfsUtilCore.getRelativeLocation(f.getVirtualFile(), root)).collect(Collectors.toList());
|
||||
|
||||
}
|
||||
|
||||
public void testCustomMemberTargetClass(){
|
||||
prepareTestDirectory();
|
||||
PyCustomMember customMember = new PyCustomMember("Clazz").resolvesToClass("pkg.mod1.Clazz");
|
||||
PsiFile context = myFixture.configureByText("a.py", "");
|
||||
PsiElement resolved = customMember.resolve(context);
|
||||
assertInstanceOf(resolved, PyTypedElement.class);
|
||||
PyTypedElement pyTypedElement = (PyTypedElement) resolved;
|
||||
PyType type = TypeEvalContext.codeAnalysis(myFixture.getProject(), context).getType(pyTypedElement);
|
||||
assertInstanceOf(type, PyClassType.class);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user