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;
 }
示例#2
0
 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;
     }
 }
示例#3
0
        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);
        }
示例#4
0
            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();
                        }
                    }
                }
            }
示例#5
0
		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);
		}