本文整理汇总了C#中ICSharpCode.NRefactory.Ast.CompilationUnit.AddChild方法的典型用法代码示例。如果您正苦于以下问题:C# CompilationUnit.AddChild方法的具体用法?C# CompilationUnit.AddChild怎么用?C# CompilationUnit.AddChild使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ICSharpCode.NRefactory.Ast.CompilationUnit
的用法示例。
在下文中一共展示了CompilationUnit.AddChild方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GenerateText
public static string GenerateText(TypeDeclaration type, OrderedPartCollection<AbstractDynamicCompilationExtension> extensions)
{
var unit = new CompilationUnit();
var namespaces = new HashSet<string>
{
typeof (SystemTime).Namespace,
typeof (AbstractViewGenerator).Namespace,
typeof (Enumerable).Namespace,
typeof (IEnumerable<>).Namespace,
typeof (IEnumerable).Namespace,
typeof (int).Namespace,
typeof (LinqOnDynamic).Namespace,
typeof(Field).Namespace,
};
foreach (var extension in extensions)
{
foreach (var ns in extension.Value.GetNamespacesToImport())
{
namespaces.Add(ns);
}
}
foreach (var ns in namespaces)
{
unit.AddChild(new Using(ns));
}
unit.AddChild(type);
var output = new CSharpOutputVisitor();
unit.AcceptVisitor(output, null);
return output.Text;
}
示例2: GenerateText
public static string GenerateText(TypeDeclaration type)
{
var unit = new CompilationUnit();
unit.AddChild(new Using(typeof (AbstractViewGenerator).Namespace));
unit.AddChild(new Using(typeof (Enumerable).Namespace));
unit.AddChild(new Using(typeof (int).Namespace));
unit.AddChild(new Using(typeof (LinqOnDynamic).Namespace));
unit.AddChild(type);
var output = new CSharpOutputVisitor();
unit.AcceptVisitor(output, null);
return output.Text;
}
示例3: LinqQueryToImplicitClass
private string LinqQueryToImplicitClass()
{
var parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(source));
var block = parser.ParseBlock();
var visitor = new TransformVisitor();
block.AcceptVisitor(visitor, null);
VariableDeclaration variable = GetVariableDeclaration(block);
Name = variable.Name;
var type = new TypeDeclaration(Modifiers.Public, new List<AttributeSection>())
{
BaseTypes =
{
new TypeReference("AbstractViewGenerator")
},
Name = Name,
Type = ClassType.Class
};
var ctor = new ConstructorDeclaration(Name,
Modifiers.Public,
new List<ParameterDeclarationExpression>(), null);
type.Children.Add(ctor);
ctor.Body = new BlockStatement();
ctor.Body.AddChild(new ExpressionStatement(
new AssignmentExpression(
new MemberReferenceExpression(new ThisReferenceExpression(), "ViewText"),
AssignmentOperatorType.Assign,
new PrimitiveExpression(source, source))));
ctor.Body.AddChild(new ExpressionStatement(
new AssignmentExpression(
new MemberReferenceExpression(new ThisReferenceExpression(), "ViewDefinition"),
AssignmentOperatorType.Assign,
new LambdaExpression
{
Parameters =
{
new ParameterDeclarationExpression(new TypeReference("System.Collections.Generic.IEnumerable<"+rootQueryType+">"), rootQueryName)
},
ExpressionBody = variable.Initializer
})));
var unit = new CompilationUnit();
unit.AddChild(new Using(typeof(AbstractViewGenerator).Namespace));
unit.AddChild(new Using(typeof(System.Linq.Enumerable).Namespace));
unit.AddChild(type);
var output = new CSharpOutputVisitor();
unit.AcceptVisitor(output, null);
return output.Text;
}
示例4: ComplexExample
public void ComplexExample()
{
string code = @"class A {
Button closeButton;
void M() {
System.Windows.Forms.Panel panel1;
closeButton = new System.Windows.Forms.Button();
panel1 = new System.Windows.Forms.Panel();
panel1.SuspendLayout();
panel1.Controls.Add(this.closeButton);
closeButton.BackColor = System.Drawing.Color.FromArgb();
panel1.BackColor = System.Drawing.SystemColors.Info;
}
}";
TypeDeclaration decl = Ast.ParseUtilCSharp.ParseGlobal<TypeDeclaration>(code);
CompilationUnit cu = new CompilationUnit();
cu.AddChild(decl);
CodeNamespace ns = (CodeNamespace)cu.AcceptVisitor(new CodeDomVisitor(), null);
Assert.AreEqual("A", ns.Types[0].Name);
Assert.AreEqual("closeButton", ns.Types[0].Members[0].Name);
Assert.AreEqual("M", ns.Types[0].Members[1].Name);
CodeMemberMethod m = (CodeMemberMethod)ns.Types[0].Members[1];
CodeVariableDeclarationStatement s0 = (CodeVariableDeclarationStatement)m.Statements[0];
Assert.AreEqual("panel1", s0.Name);
Assert.AreEqual("System.Windows.Forms.Panel", s0.Type.BaseType);
CodeAssignStatement cas = (CodeAssignStatement)m.Statements[1];
Assert.AreEqual("closeButton", ((CodeFieldReferenceExpression)cas.Left).FieldName);
cas = (CodeAssignStatement)m.Statements[2];
Assert.AreEqual("panel1", ((CodeVariableReferenceExpression)cas.Left).VariableName);
CodeExpressionStatement ces = (CodeExpressionStatement)m.Statements[3];
CodeMethodInvokeExpression mie = (CodeMethodInvokeExpression)ces.Expression;
Assert.AreEqual("SuspendLayout", mie.Method.MethodName);
Assert.AreEqual("panel1", ((CodeVariableReferenceExpression)mie.Method.TargetObject).VariableName);
ces = (CodeExpressionStatement)m.Statements[4];
mie = (CodeMethodInvokeExpression)ces.Expression;
Assert.AreEqual("Add", mie.Method.MethodName);
CodePropertyReferenceExpression pre = (CodePropertyReferenceExpression)mie.Method.TargetObject;
Assert.AreEqual("Controls", pre.PropertyName);
Assert.AreEqual("panel1", ((CodeVariableReferenceExpression)pre.TargetObject).VariableName);
cas = (CodeAssignStatement)m.Statements[5];
pre = (CodePropertyReferenceExpression)cas.Left;
Assert.AreEqual("BackColor", pre.PropertyName);
Assert.AreEqual("closeButton", ((CodeFieldReferenceExpression)pre.TargetObject).FieldName);
mie = (CodeMethodInvokeExpression)cas.Right;
Assert.AreEqual("FromArgb", mie.Method.MethodName);
Assert.IsTrue(mie.Method.TargetObject is CodeTypeReferenceExpression);
Assert.AreEqual("System.Drawing.Color", (mie.Method.TargetObject as CodeTypeReferenceExpression).Type.BaseType);
cas = (CodeAssignStatement)m.Statements[6];
pre = (CodePropertyReferenceExpression)cas.Left;
Assert.AreEqual("BackColor", pre.PropertyName);
Assert.AreEqual("panel1", ((CodeVariableReferenceExpression)pre.TargetObject).VariableName);
pre = (CodePropertyReferenceExpression)cas.Right;
Assert.AreEqual("Info", pre.PropertyName);
Assert.IsTrue(pre.TargetObject is CodeTypeReferenceExpression);
Assert.AreEqual("System.Drawing.SystemColors", (pre.TargetObject as CodeTypeReferenceExpression).Type.BaseType);
}
示例5: Parse
// Steps to load the designer:
// - Parse main file
// - Find other files containing parts of the form
// - Parse all files and look for fields (for controls) and InitializeComponents method
// - Create CodeDom objects for fields and InitializeComponents statements
// - If debug build and Ctrl pressed, output CodeDom to console
// - Return CodeDom objects to the .NET designer
protected override CodeCompileUnit Parse()
{
LoggingService.Debug("NRefactoryDesignerLoader.Parse()");
lastTextContent = this.Generator.ViewContent.DesignerCodeFileContent;
ParseInformation parseInfo = ParserService.GetParseInformation(this.Generator.ViewContent.DesignerCodeFile.FileName);
IClass formClass;
bool isFirstClassInFile;
IList<IClass> parts = FindFormClassParts(parseInfo, out formClass, out isFirstClassInFile);
const string missingReferenceMessage = "Your project is missing a reference to '${Name}' - please add it using 'Project > Add Reference'.";
if (formClass.ProjectContent.GetClass("System.Drawing.Point", 0) == null) {
throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name", "System.Drawing")));
}
if (formClass.ProjectContent.GetClass("System.Windows.Forms.Form", 0) == null) {
throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name" , "System.Windows.Forms")));
}
List<KeyValuePair<string, CompilationUnit>> compilationUnits = new List<KeyValuePair<string, CompilationUnit>>();
bool foundInitMethod = false;
foreach (IClass part in parts) {
string fileName = part.CompilationUnit.FileName;
if (fileName == null) continue;
bool found = false;
foreach (KeyValuePair<string, CompilationUnit> entry in compilationUnits) {
if (FileUtility.IsEqualFileName(fileName, entry.Key)) {
found = true;
break;
}
}
if (found) continue;
ITextBuffer fileContent;
if (FileUtility.IsEqualFileName(fileName, this.Generator.ViewContent.PrimaryFileName)) {
fileContent = this.Generator.ViewContent.PrimaryFileContent;
} else if (FileUtility.IsEqualFileName(fileName, this.Generator.ViewContent.DesignerCodeFile.FileName)) {
fileContent = new StringTextBuffer(this.Generator.ViewContent.DesignerCodeFileContent);
} else {
fileContent = ParserService.GetParseableFileContent(fileName);
}
ICSharpCode.NRefactory.IParser p = ICSharpCode.NRefactory.ParserFactory.CreateParser(language, fileContent.CreateReader());
p.Parse();
if (p.Errors.Count > 0) {
throw new FormsDesignerLoadException("Syntax errors in " + fileName + ":\r\n" + p.Errors.ErrorOutput);
}
// Try to fix the type names to fully qualified ones
FixTypeNames(p.CompilationUnit, part.CompilationUnit, ref foundInitMethod);
compilationUnits.Add(new KeyValuePair<string, CompilationUnit>(fileName, p.CompilationUnit));
}
if (!foundInitMethod)
throw new FormsDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded.");
CompilationUnit combinedCu = new CompilationUnit();
NamespaceDeclaration nsDecl = new NamespaceDeclaration(formClass.Namespace);
combinedCu.AddChild(nsDecl);
TypeDeclaration formDecl = new TypeDeclaration(Modifiers.Public, null);
nsDecl.AddChild(formDecl);
formDecl.Name = formClass.Name;
foreach (KeyValuePair<string, CompilationUnit> entry in compilationUnits) {
foreach (object o in entry.Value.Children) {
TypeDeclaration td = o as TypeDeclaration;
if (td != null && td.Name == formDecl.Name) {
foreach (INode node in td.Children)
formDecl.AddChild(node);
formDecl.BaseTypes.AddRange(td.BaseTypes);
}
if (o is NamespaceDeclaration) {
foreach (object o2 in ((NamespaceDeclaration)o).Children) {
td = o2 as TypeDeclaration;
if (td != null && td.Name == formDecl.Name) {
foreach (INode node in td.Children)
formDecl.AddChild(node);
formDecl.BaseTypes.AddRange(td.BaseTypes);
}
}
}
}
}
CodeDomVisitor visitor = new CodeDomVisitor();
visitor.EnvironmentInformationProvider = new ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryInformationProvider(formClass.ProjectContent);
visitor.VisitCompilationUnit(combinedCu, null);
// output generated CodeDOM to the console :
#if DEBUG
if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator();
//.........这里部分代码省略.........