Exemple #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);
        }
Exemple #2
0
        internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
        {
            // // get from datatype
            if (this.DataType != null)
            {
                rtsb.TakeReference(this.DataType.FetchResolvedTraits(resOpt));
            }
            // // get from purpose
            if (this.Purpose != null)
            {
                rtsb.MergeTraits(this.Purpose.FetchResolvedTraits(resOpt));
            }

            this.AddResolvedTraitsApplied(rtsb, resOpt);

            // special case for attributes, replace a default "this.attribute" with this attribute on traits that elevate attribute
            if (rtsb.ResolvedTraitSet?.HasElevated == true)
            {
                CdmAttributeReference replacement = new CdmAttributeReference(this.Ctx, this.Name, true)
                {
                    Ctx = this.Ctx,
                    ExplicitReference = this,
                    InDocument        = this.InDocument,
                    Owner             = this,
                };
                rtsb.ReplaceTraitParameterValue(resOpt, "does.elevateAttribute", "attribute", "this.attribute", replacement);
            }
            //rtsb.CleanUp();
        }
Exemple #3
0
        internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
        {
            CdmObjectDefinition objDef = this.FetchObjectDefinition <CdmObjectDefinition>(resOpt);

            if (objDef != null)
            {
                ResolvedTraitSet rtsInh = (objDef as CdmObjectDefinitionBase).FetchResolvedTraits(resOpt);
                if (rtsInh != null)
                {
                    rtsInh = rtsInh.DeepCopy();
                }
                rtsb.TakeReference(rtsInh);
            }
            else
            {
                string defName = this.FetchObjectDefinitionName();
                Logger.Warning(defName, this.Ctx, $"unable to resolve an object from the reference '{defName}'");
            }

            if (this.AppliedTraits != null)
            {
                foreach (CdmTraitReference at in this.AppliedTraits)
                {
                    rtsb.MergeTraits(at.FetchResolvedTraits(resOpt));
                }
            }
        }
Exemple #4
0
        internal ResolvedTraitSet AddResolvedTraitsApplied(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
        {
            AppliedTraits.AllItems.ForEach(item => rtsb.MergeTraits(item.FetchResolvedTraits(resOpt)));

            // dynamic applied on use
            return(rtsb.ResolvedTraitSet);
        }
        internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
        {
            // // get from purpose 
            if (this.Purpose != null)
                rtsb.TakeReference(this.Purpose.FetchResolvedTraits(resOpt));

            this.AddResolvedTraitsApplied(rtsb, resOpt);
            //rtsb.CleanUp();
        }
Exemple #6
0
        internal ResolvedTraitSet AddResolvedTraitsApplied(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
        {
            int l = this.AppliedTraits.Count;

            for (int i = 0; i < l; i++)
            {
                rtsb.MergeTraits(this.AppliedTraits[i].FetchResolvedTraits(resOpt));
            }

            // dynamic applied on use
            return(rtsb.ResolvedTraitSet);
        }
Exemple #7
0
        internal ResolvedTraitSet AddResolvedTraitsApplied(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
        {
            Action <CdmTraitCollection> addAppliedTraits = (ats) =>
            {
                if (ats != null)
                {
                    int l = ats.Count;
                    for (int i = 0; i < l; i++)
                    {
                        rtsb.MergeTraits(ats.AllItems[i].FetchResolvedTraits(resOpt));
                    }
                }
            };

            addAppliedTraits(this.AppliedTraits);
            // dynamic applied on use
            return(rtsb.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);
 }
Exemple #9
0
 internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
 {
     return;
 }
 internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
 {
     this.ConstructResolvedTraitsDef(this.ExtendsDataTypeRef, rtsb, resOpt);
     //rtsb.CleanUp();
 }
 /// <inheritdoc />
 internal override void ConstructResolvedTraits(ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
 {
     this.ConstructResolvedTraitsDef(null, rtsb, resOpt);
 }
        internal virtual ResolvedTraitSet FetchResolvedTraits(ResolveOptions resOpt = null)
        {
            bool wasPreviouslyResolving = this.Ctx.Corpus.isCurrentlyResolving;

            this.Ctx.Corpus.isCurrentlyResolving = true;
            if (resOpt == null)
            {
                resOpt = new ResolveOptions(this, this.Ctx.Corpus.DefaultResolutionDirectives);
            }

            const string            kind      = "rtsb";
            ResolveContext          ctx       = this.Ctx as ResolveContext;
            string                  cacheTagA = ctx.Corpus.CreateDefinitionCacheTag(resOpt, this, kind);
            ResolvedTraitSetBuilder rtsbAll   = null;

            if (this.TraitCache == null)
            {
                this.TraitCache = new Dictionary <string, ResolvedTraitSetBuilder>();
            }
            else if (!string.IsNullOrWhiteSpace(cacheTagA))
            {
                this.TraitCache.TryGetValue(cacheTagA, out rtsbAll);
            }

            // store the previous document set, we will need to add it with
            // children found from the constructResolvedTraits call
            SymbolSet currDocRefSet = resOpt.SymbolRefSet;

            if (currDocRefSet == null)
            {
                currDocRefSet = new SymbolSet();
            }
            resOpt.SymbolRefSet = new SymbolSet();

            if (rtsbAll == null)
            {
                rtsbAll = new ResolvedTraitSetBuilder();

                if (!resolvingTraits)
                {
                    resolvingTraits = true;
                    this.ConstructResolvedTraits(rtsbAll, resOpt);
                    resolvingTraits = false;
                }

                CdmObjectDefinitionBase objDef = this.FetchObjectDefinition <CdmObjectDefinitionBase>(resOpt);
                if (objDef != null)
                {
                    // register set of possible docs
                    ctx.Corpus.RegisterDefinitionReferenceSymbols(objDef, kind, resOpt.SymbolRefSet);

                    if (rtsbAll.ResolvedTraitSet == null)
                    {
                        // nothing came back, but others will assume there is a set in this builder
                        rtsbAll.ResolvedTraitSet = new ResolvedTraitSet(resOpt);
                    }
                    // get the new cache tag now that we have the list of docs
                    cacheTagA = ctx.Corpus.CreateDefinitionCacheTag(resOpt, this, kind);
                    if (!string.IsNullOrWhiteSpace(cacheTagA))
                    {
                        this.TraitCache[cacheTagA] = rtsbAll;
                    }
                }
            }
            else
            {
                // cache was found
                // get the SymbolSet for this cached object
                string key = CdmCorpusDefinition.CreateCacheKeyFromObject(this, kind);
                ((CdmCorpusDefinition)ctx.Corpus).DefinitionReferenceSymbols.TryGetValue(key, out SymbolSet tempDocRefSet);
                resOpt.SymbolRefSet = tempDocRefSet;
            }

            // merge child document set with current
            currDocRefSet.Merge(resOpt.SymbolRefSet);
            resOpt.SymbolRefSet = currDocRefSet;

            this.Ctx.Corpus.isCurrentlyResolving = wasPreviouslyResolving;
            return(rtsbAll.ResolvedTraitSet);
        }
Exemple #13
0
 internal void ConstructResolvedTraitsDef(CdmObjectReference baseCdmObjectRef, ResolvedTraitSetBuilder rtsb, ResolveOptions resOpt)
 {
     // get from base public class first, then see if some are applied to base public class on ref then add dynamic traits exhibited by this def
     if (baseCdmObjectRef != null)
     {
         // merge in all from base class
         rtsb.MergeTraits((baseCdmObjectRef as CdmObjectReferenceBase).FetchResolvedTraits(resOpt));
     }
     // merge in dynamic that are exhibited by this class
     if (this.ExhibitsTraits != null)
     {
         foreach (CdmTraitReference exhibitsTrait in this.ExhibitsTraits)
         {
             rtsb.MergeTraits(exhibitsTrait.FetchResolvedTraits(resOpt));
         }
     }
 }