internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt) { // base traits then add any elevated from attributes then add things exhibited by the att. CdmObjectReference baseClass = this.ExtendsEntityRef; if (baseClass != null) { // merge in all from base class rtsb.MergeTraits((baseClass as CdmObjectReferenceBase).FetchResolvedTraits(resOpt)); } if (this.Attributes != null) { ResolvedTraitSet rtsElevated = new ResolvedTraitSet(resOpt); for (int i = 0; i < this.Attributes.Count; i++) { dynamic att = this.Attributes.AllItems[i]; dynamic rtsAtt = att.FetchResolvedTraits(resOpt); if (rtsAtt?.HasElevated == true) { rtsElevated = rtsElevated.MergeSet(rtsAtt, true); } } rtsb.MergeTraits(rtsElevated); } this.ConstructResolvedTraitsDef(null, rtsb, resOpt); }
/// <summary> /// Get a resolved trait set which contains new resolved traits with placement for wild characters if it's applicable. /// </summary> /// <param name="projCtx">The current projection context.</param> /// <param name="currentPAS">The current attribute state set.</param> /// <returns></returns> private ResolvedTraitSet ResolvedNewTraits(ProjectionContext projCtx, ProjectionAttributeState currentPAS) { ResolvedTraitSet resolvedTraitSet = new ResolvedTraitSet(projCtx.ProjectionDirective.ResOpt); string projectionOwnerName = projCtx.ProjectionDirective.OriginalSourceAttributeName ?? ""; foreach (var traitRef in this.TraitsToAdd) { var traitRefCopy = traitRef.FetchResolvedTraits(projCtx.ProjectionDirective.ResOpt).DeepCopy(); ReplaceWildcardCharacters(projCtx.ProjectionDirective.ResOpt, traitRefCopy, projectionOwnerName, currentPAS); resolvedTraitSet = resolvedTraitSet.MergeSet(traitRefCopy); } return(resolvedTraitSet); }
internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt) { // get only the elevated traits from attribute first, then add in all traits from this definition if (this.Members != null) { ResolvedTraitSet rtsElevated = new ResolvedTraitSet(resOpt); for (int i = 0; i < this.Members.Count; i++) { dynamic att = this.Members.AllItems[i]; ResolvedTraitSet rtsAtt = att.FetchResolvedTraits(resOpt); if (rtsAtt?.HasElevated == true) { rtsElevated = rtsElevated.MergeSet(rtsAtt, true); } } rtsb.MergeTraits(rtsElevated); } this.ConstructResolvedTraitsDef(null, rtsb, resOpt); }