From 2072c80a34b4bfc86c8476539760ba2534f479e1 Mon Sep 17 00:00:00 2001 From: fitermay Date: Sun, 26 Mar 2017 07:07:52 +0300 Subject: [PATCH] PY-23150: Numpy custom members take significant time to resolve since they are looking up DTYPE each time for each member. Instead resolve it once. (cherry picked from commit 5702120) --- .../NumpyModuleMembersProvider.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/python/src/com/jetbrains/numpy/codeInsight/NumpyModuleMembersProvider.java b/python/src/com/jetbrains/numpy/codeInsight/NumpyModuleMembersProvider.java index 181fd8dab336..1a5fd769df6a 100644 --- a/python/src/com/jetbrains/numpy/codeInsight/NumpyModuleMembersProvider.java +++ b/python/src/com/jetbrains/numpy/codeInsight/NumpyModuleMembersProvider.java @@ -18,6 +18,7 @@ package com.jetbrains.numpy.codeInsight; import com.intellij.psi.PsiElement; import com.intellij.psi.util.QualifiedName; import com.jetbrains.python.codeInsight.PyCustomMember; +import com.jetbrains.python.codeInsight.PyPsiPath; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyUtil; import com.jetbrains.python.psi.resolve.PyQualifiedNameResolveContext; @@ -54,15 +55,18 @@ public class NumpyModuleMembersProvider extends PyModuleMembersProvider { @Override protected Collection getMembersByQName(PyFile module, String qName) { if ("numpy".equals(qName)) { - final List members = new ArrayList<>(); - for (String type : NUMERIC_TYPES) { - members.add(new PyCustomMember(type, DTYPE, false)); + PsiElement clazz = new PyPsiPath.ToClassQName(DTYPE).resolve(module); + if (clazz != null) { + final List members = new ArrayList<>(); + for (String type : NUMERIC_TYPES) { + members.add(new PyCustomMember(type, clazz, DTYPE)); + } + for (String type : PYTHON_TYPES) { + members.add(new PyCustomMember(type, clazz, DTYPE)); + } + addTestingModule(module, members); + return members; } - for (String type : PYTHON_TYPES) { - members.add(new PyCustomMember(type, DTYPE, false)); - } - addTestingModule(module, members); - return members; } return Collections.emptyList(); }