/// <summary> /// Dump Invokation Tree /// </summary> /// <param name="behavior">Behavior</param> /// <param name="depth">Depth</param> private void DumpInvokationTree(BehaviorInfo behavior, int depth = 1) { foreach (var invokation in behavior.Invokations) { var indent = new string(' ', depth * 2); var indent2 = new string(' ', (depth + 1) * 2); this.SendMessage($"{indent}{invokation.Definition} @ {invokation.Location}"); if (behavior.ID == invokation.ID) { this.SendMessage($"{indent2} <Recursive Call...>"); } else { if (this.BehaviorDefinitionMap.ContainsKey(invokation.ID)) { var child_behavior = this.BehaviorDefinitionMap[invokation.ID]; this.DumpInvokationTree(child_behavior, depth + 1); } else { this.SendMessage($"{indent2} <Behavior Definition Not Found...>"); } } } }
/// <summary> /// Constructor /// </summary> /// <param name="info">Behavior Info</param> public BehaviorCrossReferenceInfo(BehaviorInfo info) { this.ID = info.ID; this.Type = info.Type; this.Definition = info.Definition; this.Location = info.Location; }
/// <summary> /// Constructor /// </summary> /// <param name="cursor">Clang Cursor</param> public InvokationInfo(ClangCursor cursor) : base(cursor) { this.Name = cursor.Spelling; if (cursor.Referenced != null) { this.Declaration = BehaviorInfoFactory.Create(cursor.Referenced); this.ID = this.Declaration.ID; this.Definition = this.Declaration.Definition; } else { throw new FieldAccessException($"Behavior Declaration Not Found : {this.Name}"); } }
/// <summary> /// Add Behavior Info /// </summary> /// <param name="behavior">Behavior Info</param> public void AddBehavior(BehaviorInfo behavior) { this.BehaviorMap.Add(behavior); }