@NotNull
    DfaVariableValue createVariableValue(
      @NotNull VariableDescriptor descriptor,
      @Nullable DfaVariableValue qualifier,
      @NotNull BiFunction<? super @NotNull VariableDescriptor, ? super @Nullable DfaVariableValue, ? extends @NotNull DfType> typeSupplier) {
      Pair<VariableDescriptor, DfaVariableValue> key = Pair.create(descriptor, qualifier);
      DfaVariableValue var = myExistingVars.get(key);
      if (var == null) {
        var = new DfaVariableValue(descriptor, myFactory, qualifier, typeSupplier.apply(descriptor, qualifier));
        myExistingVars.put(key, var);
        while (qualifier != null) {
          qualifier.myDependents.add(var);
          qualifier = qualifier.getQualifier();
        }
      }
      return var;
    }
@NotNull
    DfaVariableValue createVariableValue(
      @NotNull VariableDescriptor descriptor,
      @Nullable DfaVariableValue qualifier,
      @NotNull BiFunction<? super @NotNull VariableDescriptor, ? super @Nullable DfaVariableValue, ? extends @NotNull DfType> typeSupplier)