@Override
  public @NotNull DfType getInitialDfType(@NotNull DfaVariableValue thisValue,
                                          @Nullable PsiElement context) {
    DfaVariableValue qualifier = thisValue.getQualifier();
    DfType dfType = getDfType(qualifier);
    if (qualifier != null && dfType instanceof DfReferenceType) {
      VariableDescriptor qualDescriptor = qualifier.getDescriptor();
      int depth = 1;
      while (qualDescriptor instanceof ArrayElementDescriptor) {
        depth++;
        qualifier = qualifier.getQualifier();
        if (qualifier == null) break;
        qualDescriptor = qualifier.getDescriptor();
      }
      PsiVarDescriptor descriptor = ObjectUtils.tryCast(qualDescriptor, PsiVarDescriptor.class);
      if (descriptor != null) {
        PsiType psiType = descriptor.getType(qualifier);
        for (int i = 0; i < depth; i++) {
          if (!(psiType instanceof PsiArrayType arrayType)) return dfType;
          psiType = arrayType.getComponentType();
        }
        return dfType.meet(DfaNullability.fromNullability(DfaPsiUtil.getTypeNullability(psiType)).asDfType());
      }
    }
    return dfType;
  }
@Override
  public @NotNull DfType getInitialDfType(@NotNull DfaVariableValue thisValue,
                                          @Nullable PsiElement context)