internal ThisExpressionEmitter(ConstructorDeclaration constructorDeclaration, ILGenerator ilGenerator, IOpCodeIndexer instructionsIndexer, IAstVisitor <ILGenerator, AstNode> visitor) : this(constructorDeclaration as AstNode, ilGenerator, instructionsIndexer, visitor) { Type = constructorDeclaration.Annotation <MethodReference>() .GetActualMethod <ConstructorInfo>() .DeclaringType; }
public override TResult VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, object data) { Debug.Assert(context.CurrentMethod == null); try { context.CurrentMethod = constructorDeclaration.Annotation <MethodDef>(); return(base.VisitConstructorDeclaration(constructorDeclaration, data)); } finally { context.CurrentMethod = null; } }
internal static Type GetActualType(this ConstructorDeclaration constructorDeclaration) { if (constructorDeclaration != null) { var methodReference = constructorDeclaration.Annotation <MethodReference>(); if (methodReference != null) { return(methodReference.GetActualMethod().DeclaringType); } } return(TypeSystem.Void); }
public void Run(AstNode compilationUnit) { ConstructorDeclaration ctorDecl = null; foreach (var node in compilationUnit.Children) { ConstructorDeclaration ctor = node as ConstructorDeclaration; if (ctor != null) { if (ctor.Annotation <MethodDefinition>() == ctorDef) { ctorDecl = ctor; } else { // remove other ctors ctor.Remove(); } if (ctor.HasModifier(Modifiers.Static)) { ctor.Remove(); } } // Remove any fields without initializers FieldDeclaration fd = node as FieldDeclaration; if (fd != null && fd.Variables.All(v => v.Initializer.IsNull)) { fd.Remove(); } } if (ctorDecl.Initializer.ConstructorInitializerType == ConstructorInitializerType.This) { // remove all fields foreach (var node in compilationUnit.Children) { if (node is FieldDeclaration) { node.Remove(); } } } }
public virtual void VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration) { StartNode(constructorDeclaration); var builder = constructorDeclaration.Annotation<MethodDebugInfoBuilder>(); if (builder != null) builder.StartPosition = writer.GetLocation(); WriteAttributes(constructorDeclaration.Attributes); WriteModifiers(constructorDeclaration.ModifierTokens); var oldRef = currentMethodReference; currentMethodReference = new object(); TypeDeclaration type = constructorDeclaration.Parent as TypeDeclaration; var method = constructorDeclaration.Annotation<dnlib.DotNet.MethodDef>(); var textToken = method == null ? BoxedTextColor.Type : CSharpMetadataTextColorProvider.Instance.GetColor(method.DeclaringType); if (type != null && type.Name != constructorDeclaration.Name) WriteIdentifier((Identifier)type.NameToken.Clone(), textToken); else WriteIdentifier(constructorDeclaration.NameToken); Space(policy.SpaceBeforeConstructorDeclarationParentheses); WriteCommaSeparatedListInParenthesis(constructorDeclaration.Parameters, policy.SpaceWithinMethodDeclarationParentheses, CodeBracesRangeFlags.Parentheses); if (!constructorDeclaration.Initializer.IsNull) { Space(); constructorDeclaration.Initializer.AcceptVisitor(this); } WriteMethodBody(constructorDeclaration.Body); if (builder != null) builder.EndPosition = writer.GetLocation(); currentMethodReference = oldRef; EndNode(constructorDeclaration); }
public virtual void VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration) { StartNode(constructorDeclaration); WriteAttributes(constructorDeclaration.Attributes); WriteModifiers(constructorDeclaration.ModifierTokens); TypeDeclaration type = constructorDeclaration.Parent as TypeDeclaration; var method = constructorDeclaration.Annotation<dnlib.DotNet.MethodDef>(); var textToken = method == null ? TextTokenType.Type : TextTokenHelper.GetTextTokenType(method.DeclaringType); if (type != null && type.Name != constructorDeclaration.Name) WriteIdentifier((Identifier)type.NameToken.Clone(), textToken); else WriteIdentifier(constructorDeclaration.NameToken); Space(policy.SpaceBeforeConstructorDeclarationParentheses); WriteCommaSeparatedListInParenthesis(constructorDeclaration.Parameters, policy.SpaceWithinMethodDeclarationParentheses); if (!constructorDeclaration.Initializer.IsNull) { Space(); constructorDeclaration.Initializer.AcceptVisitor(this); } WriteMethodBody(constructorDeclaration.Body); EndNode(constructorDeclaration); }