@Nullable
    private PyType getImplicitlyResolvedType(@NotNull List<Token<PyElementType>> tokens,
                                             @NotNull TypeEvalContext context,
                                             @NotNull Map<TextRange, PyType> types,
                                             @NotNull Map<PyType, TextRange> fullRanges,
                                             TextRange firstRange) {
      PyType type = null;
      QualifiedName qName = null;
      while (!tokens.isEmpty()) {
        final Token<PyElementType> token = tokens.get(0);
        final String name = token.getText().toString();
        qName = qName != null ? qName.append(name) : QualifiedName.fromComponents(name);
        final List<PsiElement> modules = PyResolveImportUtil.resolveQualifiedName(qName, PyResolveImportUtil.fromFoothold(myAnchor));
        PsiElement module = !modules.isEmpty() ? modules.get(0) : null;
        if (module == null) {
          break;
        }
        if (module instanceof PsiDirectory) {
          module = PyUtil.getPackageElement((PsiDirectory)module, myAnchor);
        }
        if (module instanceof PyTypedElement) {
          final PyType moduleType = context.getType((PyTypedElement)module);
          if (moduleType != null) {
            type = moduleType;
            types.put(token.getRange(), type);
            fullRanges.put(type, TextRange.create(firstRange.getStartOffset(), token.getRange().getEndOffset()));
          }
        }
        tokens.remove(0);
      }
      return type;
    }
@Nullable
    private PyType getImplicitlyResolvedType(@NotNull List<Token<PyElementType>> tokens,
                                             @NotNull TypeEvalContext context,
                                             @NotNull Map<TextRange, PyType> types,
                                             @NotNull Map<PyType, TextRange> fullRanges,
                                             TextRange firstRange)