DfType (@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; }