PY-18096 Fixed: False positive "Type doesn't have expected attributes" for namedtuple

Introduce PyClassLikeType.getMemberNames(boolean, TypeEvalContext). This method returns all members including dynamically ones (e.g. fields of namedtuple)
This commit is contained in:
Semyon Proshev
2016-03-09 19:06:52 +03:00
parent 646e78521d
commit 8d78d16800
9 changed files with 156 additions and 82 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
/**
* @author vlan
@@ -42,8 +43,10 @@ public interface PyClassLikeType extends PyCallableType, PyWithAncestors {
List<PyClassLikeType> getSuperClassTypes(@NotNull TypeEvalContext context);
@Nullable
List<? extends RatedResolveResult> resolveMember(@NotNull final String name, @Nullable PyExpression location,
@NotNull AccessDirection direction, @NotNull PyResolveContext resolveContext,
List<? extends RatedResolveResult> resolveMember(@NotNull final String name,
@Nullable PyExpression location,
@NotNull AccessDirection direction,
@NotNull PyResolveContext resolveContext,
boolean inherited);
// TODO: Pull to PyType at next iteration
@@ -58,6 +61,9 @@ public interface PyClassLikeType extends PyCallableType, PyWithAncestors {
*/
void visitMembers(@NotNull Processor<PsiElement> processor, boolean inherited, @NotNull TypeEvalContext context);
@NotNull
Set<String> getMemberNames(boolean inherited, @NotNull TypeEvalContext context);
boolean isValid();
@Nullable