using System;
using AnticipatingMinds.Genesis.CodeDOM;
using System.Collections;
using System.Diagnostics;
namespace AnticipatingMinds.Genesis.CodeDOM.Utilities{
/// <summary>
/// Represents a class for building & manipulating CodeElement trace in CodeDOM.
/// </summary>
/// <remarks>This class is used by routine that finds an element corresponsing to the
/// given one in the different code dom graph of the same or very similar source graph.
/// </remarks>
public sealed class CodeElementTrace
{
#region Instance constructors
/// <summary>
/// Hidden default constructor.
/// </summary>
private CodeElementTrace()
{
}
#endregion Instance constructors
#region Public instance properties
public CodeElement[] Trace
{
get
{
return trace;
}
}
public CodeElement Target
{
get
{
return target;
}
}
#endregion Public instance properties
#region Public shared (static) methods
public static CodeElementTrace GetCodeElementTrace(CodeElement codeElement)
{
CodeElementTrace trace = new CodeElementTrace();
trace.target = codeElement;
int traceSize = 0;
CodeElement traceFrame = codeElement;
while(traceFrame != null)
{
traceFrame = traceFrame.Parent;
traceSize++;
}
trace.trace = new CodeElement[traceSize];
traceFrame = codeElement;
for(int frameIndex = trace.trace.Length-1; frameIndex >= 0; frameIndex--)
{
trace.trace[frameIndex] = traceFrame;
traceFrame = traceFrame.Parent;
}
return trace;
}
#endregion Public shared (static) methods
#region Private instance fields
private CodeElement target;
private CodeElement[] trace;
#endregion Private instance fields
}
}
|