private @Nullable PsiElement parseQualifiedType(@Nullable PsiElement element) {
      element = parseTypeParams(parseModifiers(element));
      PsiJavaToken javaToken = tryCast(element, PsiJavaToken.class);
      while (javaToken != null && javaToken.getTokenType() == JavaTokenType.DOT) {
        element = nextChild();
        element = parseModifiers(element);
        if (!(element instanceof PsiIdentifier)) return null;
        element = nextChild();
        // e.g. Foo.Bar<String>.Baz
        // modifiers actually are not allowed in front of type parameters, but java parser generates empty modifiers list anyway
        element = parseTypeParams(parseModifiers(element));
        javaToken = tryCast(element, PsiJavaToken.class);
      }
      return element;
    }
private @Nullable PsiElement parseQualifiedType(@Nullable PsiElement element)