PsiType (PsiTypeElement deepestChild) { int depth = getArrayDepth(); List<TypeAnnotationContainer> containers = StreamEx.iterate(myAnnotations, TypeAnnotationContainer::forArrayElement).limit(depth).toList(); PsiType type = deepestChild.getType(); for (int i = depth - 1; i >= 0; i--) { if (i == 0 && isVarArgs()) { type = new PsiEllipsisType(type); } else { type = type.createArrayType(); } type = type.annotate(containers.get(i).getProvider(this)); } return type; }