protected virtual IEnumerable <Syntax> TranslateFieldDeclaration(FieldDeclaration fieldDeclaration, ILTranslationContext data) { foreach (var v in fieldDeclaration.Variables) { var fd = new D.FieldDeclaration(); fd.Accessibility = GetAccessibility(fieldDeclaration.Modifiers); fd.IsStatic = fieldDeclaration.HasModifier(Modifiers.Static); fd.FieldName = v.Name; fd.FieldType = ResolveType(fieldDeclaration, fieldDeclaration.ReturnType); // TODO: initializer yield return(fd); } }
private void Translator_VisitingEventDeclaration(object sender, VisitingEventArgs <EventDeclaration> e) { if (e.Handled) { return; } var translator = (ILTranslator)sender; var ed = e.Node.Annotation <EventDefinition>(); if (ed == null) { return; } var delType = translator.ResolveType(e.Node, e.Node.ReturnType); var arrayType = delType as D.ArrayType; if (arrayType == null) { arrayType = (delType as D.UnionType)?.ElementTypes.OfType <D.ArrayType>().FirstOrDefault(); if (arrayType == null) { arrayType = delType.MakeArrayType(); } } var n = e.Node.Variables.Single().Name; var fn = FIELD_PREFIX + n; var fd = new D.FieldDeclaration() { FieldName = fn, FieldType = arrayType }; var ad = CreateAddAccessor(translator, e, arrayType, ed); var rd = CreateRemoveAccessor(translator, e, arrayType, ed); e.Results = new Syntax[] { fd, ad, rd }; }
protected virtual IEnumerable <Syntax> TranslatePropertyDeclaration(PropertyDeclaration propertyDeclaration, ILTranslationContext data) { var acc = GetAccessibility(propertyDeclaration.Modifiers); var tr = ResolveType(propertyDeclaration, propertyDeclaration.ReturnType); // TODO: デコレーター // TODO: virtualの場合メソッドを生成する //if (propertyDeclaration.HasModifier(Modifiers.Abstract) || propertyDeclaration.HasModifier(Modifiers.Virtual)) //{ //} //else if (propertyDeclaration.Getter.IsNull || propertyDeclaration.Getter.HasChildren || propertyDeclaration.Setter.IsNull || propertyDeclaration.Setter.HasChildren) { if (propertyDeclaration.Getter.Body.IsNull && propertyDeclaration.Setter.Body.IsNull) { var pd = new D.FieldDeclaration(); pd.Accessibility = D.AccessibilityModifier.Private; pd.FieldName = "__" + propertyDeclaration.Name; pd.FieldType = tr; yield return(pd); } if (!propertyDeclaration.Getter.IsNull) { var getter = new D.GetAccessorDeclaration(); getter.Accessibility = propertyDeclaration.Getter.Modifiers != Modifiers.None ? GetAccessibility(propertyDeclaration.Getter.Modifiers) : acc; getter.PropertyName = propertyDeclaration.Name; getter.PropertyType = tr; if (propertyDeclaration.Getter.Body.IsNull) { getter.Statements.Add(new S.ReturnStatement() { Value = new E.PropertyExpression() { Object = new E.ThisExpression(), Property = "__" + propertyDeclaration.Name } }); } else { getter.Statements = GetStatements(propertyDeclaration.Getter.Body, data); } yield return(getter); } if (!propertyDeclaration.Setter.IsNull) { var setter = new D.SetAccessorDeclaration(); setter.Accessibility = propertyDeclaration.Setter.Modifiers != Modifiers.None ? GetAccessibility(propertyDeclaration.Setter.Modifiers) : acc; setter.PropertyName = propertyDeclaration.Name; setter.PropertyType = tr; setter.ParameterName = "value"; if (propertyDeclaration.Setter.Body.IsNull) { setter.Statements.Add(new S.ExpressionStatement() { Expression = new E.AssignmentExpression() { Target = new E.PropertyExpression() { Object = new E.ThisExpression(), Property = "__" + propertyDeclaration.Name }, Value = new E.IdentifierExpression() { Name = "value" } } }); } else { setter.Statements = GetStatements(propertyDeclaration.Setter.Body, data); } yield return(setter); } } else { var pd = new D.FieldDeclaration(); pd.Accessibility = acc; pd.FieldName = propertyDeclaration.Name; pd.FieldType = tr; yield return(pd); } }