fix PyCustomMember targeting a class

This commit is contained in:
Kiryl Chetyrbak
2017-07-03 19:47:08 +03:00
committed by Andrey Vlasovskikh
parent 864cd060a6
commit a82000de58
5 changed files with 21 additions and 6 deletions
@@ -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);
}
}