コード例 #1
0
        public override AstNode VisitParameterDeclaration(ParameterDeclaration parameterDeclaration, ICecilArgumentsResolver argumentsResolver)
        {
            parameterDeclaration.Type.AcceptVisitor(this, argumentsResolver);
            var parameterReference = parameterDeclaration.Annotation <ParameterReference>();

            if (parameterReference != null)
            {
                var parameterType     = parameterReference.ParameterType;
                var genericTypeOrSelf = parameterType.GetGenericTypeOrSelfReference();

                if (genericTypeOrSelf.IsGeneric())
                {
                    if (genericTypeOrSelf.IsGenericInstance)
                    {
                        ResolveGenericInstance(genericTypeOrSelf, argumentsResolver);
                        return(parameterDeclaration);
                    }

                    var           pair          = argumentsResolver.ResolvePair(genericTypeOrSelf.ToString());
                    TypeReference typeReference = pair.TypeReference;

                    if (parameterType.IsByReference)
                    {
                        Type type = pair.Type.MakeByRefType();
                        typeReference = new TypeReference(string.Empty, type.FullName, typeReference.Module, typeReference.Scope);
                    }

                    parameterReference.ParameterType = typeReference;
                }
            }

            return(parameterDeclaration);
        }
コード例 #2
0
ファイル: TsOutputVisitor.cs プロジェクト: cbsistem/Netjs
		public void VisitParameterDeclaration(ParameterDeclaration parameterDeclaration)
		{
			StartNode(parameterDeclaration);
			WriteAttributes(parameterDeclaration.Attributes);

			if (!string.IsNullOrEmpty(parameterDeclaration.Name)) {
				parameterDeclaration.NameToken.AcceptVisitor(this);
			}
			if (parameterDeclaration.Annotation<OptionalParameterNote> () != null) {
				WriteToken ("?", Roles.Attribute);
			}
			if (!parameterDeclaration.Type.IsNull) {
				WriteToken (Roles.Colon);
				Space();
				parameterDeclaration.Type.AcceptVisitor(this);
			}
			if (!parameterDeclaration.DefaultExpression.IsNull) {
				Space(policy.SpaceAroundAssignment);
				WriteToken(Roles.Assign);
				Space(policy.SpaceAroundAssignment);
				parameterDeclaration.DefaultExpression.AcceptVisitor(this);
			}
			EndNode(parameterDeclaration);
		}
コード例 #3
0
ファイル: TSOutputVisitor.cs プロジェクト: phiresky/Netjs
 public void VisitParameterDeclaration(ParameterDeclaration parameterDeclaration)
 {
     StartNode(parameterDeclaration);
     WriteAttributes(parameterDeclaration.Attributes);
     /* switch (parameterDeclaration.ParameterModifier)
      {
          case ParameterModifier.Ref:
              WriteKeyword(ParameterDeclaration.RefModifierRole);
              break;
          case ParameterModifier.Out:
              WriteKeyword(ParameterDeclaration.OutModifierRole);
              break;
          case ParameterModifier.Params:
              WriteKeyword(ParameterDeclaration.ParamsModifierRole);
              break;
          case ParameterModifier.This:
              WriteKeyword(ParameterDeclaration.ThisModifierRole);
              break;
      }*/
     if (!string.IsNullOrEmpty(parameterDeclaration.Name))
     {
         WriteIdentifier(parameterDeclaration.NameToken);
     }
     if (parameterDeclaration.Annotation<OptionalParameterNote>() != null)
     {
         WriteToken("?", Roles.Attribute);
     }
     if (!parameterDeclaration.Type.IsNull)
     {
         WriteToken(Roles.Colon);
         Space();
         parameterDeclaration.Type.AcceptVisitor(this);
     }
     if (!parameterDeclaration.DefaultExpression.IsNull)
     {
         Space(policy.SpaceAroundAssignment);
         WriteToken(Roles.Assign);
         Space(policy.SpaceAroundAssignment);
         parameterDeclaration.DefaultExpression.AcceptVisitor(this);
     }
     EndNode(parameterDeclaration);
 }
コード例 #4
0
        internal static Type GetActualType(this ParameterDeclaration paremeterDefinition)
        {
            var paremeterReference = paremeterDefinition.Annotation <ParameterReference>();

            return(paremeterReference.ParameterType.GetActualType());
        }