Implement todos in PyClassTypeImpl and PyJavaClassType which are connected with members and ancestors

This commit is contained in:
Semyon Proshev
2016-03-09 19:06:52 +03:00
parent 8d78d16800
commit ae1b7f7d17
2 changed files with 40 additions and 4 deletions
@@ -151,7 +151,23 @@ public class PyJavaClassType implements PyClassLikeType {
@Override
public void visitMembers(@NotNull final Processor<PsiElement> processor, final boolean inherited, @NotNull TypeEvalContext context) {
// TODO: Implement
for (PsiMethod method : myClass.getAllMethods()) {
processor.process(method);
}
for (PsiField field : myClass.getAllFields()) {
processor.process(field);
}
if (!inherited) {
return;
}
for (PyClassLikeType type : getAncestorTypes(context)) {
if (type != null) {
type.visitMembers(processor, false, context);
}
}
}
@NotNull
@@ -181,8 +197,26 @@ public class PyJavaClassType implements PyClassLikeType {
@NotNull
@Override
public List<PyClassLikeType> getAncestorTypes(@NotNull final TypeEvalContext context) {
// TODO: Implement
return Collections.emptyList();
final List<PyClassLikeType> result = new ArrayList<>();
final Deque<PsiClass> deque = new LinkedList<>();
final Set<PsiClass> visited = new HashSet<>();
deque.addAll(Arrays.asList(myClass.getSupers()));
while (!deque.isEmpty()) {
final PsiClass current = deque.pollFirst();
if (current == null || !visited.add(current)) {
continue;
}
result.add(new PyJavaClassType(current, myDefinition));
deque.addAll(Arrays.asList(current.getSupers()));
}
return result;
}
@Override