2017-02-22 5 views
0

Roslynを使用して、何らかの種類のデータアクセス層の言語に依存しないコードジェネレータを作成します。 メタデータを使用して目的のコードを出力します。 コードのC#およびVB.NETバージョンを返すことが期待されています。言語に依存しないコードを生成するときに、Roslynで適切にフォーマットされたnullable型の構文を生成します。

現在の実装では希望の出力が生成されていますが、のnullable型の書式は正しくありません、出力に余分な空白が含まれています。

SyntaxGenerator.NullableTypeExpressionによって生成されるnull可能な型を確実にするオプションがありますか?

コードスニペット

SyntaxGenerator.NullableTypeExpressionは、プロパティタイプに対応SyntaxNodeを返すために使用されているところです。

private SyntaxNode ToTypeExpression(Type type, bool nullable, SyntaxGenerator generator) 
    { 

     SyntaxNode baseType; 
     SyntaxNode propType; 

     SpecialType specialType = ToSpecialType(type); 

     if(specialType == SpecialType.None) 
     { 
      baseType = generator.IdentifierName(type.Name);     
     } 
     else 
     { 
      baseType = generator.TypeExpression(specialType); 
     } 

     if (nullable && type.IsValueType) 
     { 
      propType = generator.NullableTypeExpression(baseType); 
     } 
     else 
     { 
      propType = baseType; 
     } 

     return propType; 

    } 

これで生成されたVB.NETコード:ここで提案するようFormatter.Formatを使用して

public int ? Salary 
    { 
     get 
     { 
      return GetAttributeValue<int ? >("salary").Value; 
     } 

     set 
     { 
      SetPropertyValue("Salary", "salary", value); 
     } 
    } 
+0

お困りですか? –

+0

エコーエド、ここでエラーメッセージ、期待条件などは何ですか? –

+1

あなたは '.AddAnnotat ion(Formatter.Annot ation)'を試みましたか? –

答えて

0

Public Property Salary As Integer? 
     Get 
      Return GetAttributeValue(Of Integer?)("salary").Value 
     End Get 

     Set(value As Integer?) 
      SetPropertyValue("Salary", "salary", value) 
     End Set 
    End Property 

これは、C#のコード、ノート空白があるGenerating well-formatted syntax with Roslyn望ましくない空白を取り除いた。

 string textOutput; 
     var sb = new StringBuilder(); 

     var result = generator.CompilationUnit(declarations); 

     var formattedResult = Formatter.Format(result, workspace); 

     using (StringWriter writer = new StringWriter(sb)) 
     { 
      formattedResult.WriteTo(writer); 
      textOutput = writer.ToString(); 
     } 
関連する問題