Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
 }