public override IAnalysisSet GetDescriptor(Node node, AnalysisValue instance, AnalysisValue context, AnalysisUnit unit) { if (_original == null) { return(base.GetDescriptor(node, instance, context, unit)); } if (_descriptor == null) { var res = _original.GetDescriptor(node, instance, context, unit); // TODO: This kinda sucks... if (Object.ReferenceEquals(res, _original)) { _descriptor = SelfSet; } else if (res.Count >= 1) { // TODO: Dictionary per-instance _descriptor = Clone(res.First(), instance); } else { _descriptor = Clone(_original, instance); } } return(_descriptor); }