1

xml コメントのブロックを追加し、関数に try-catch を作成する小さなプラグインを作成しました。(これを、作成するすべての関数に追加するだけです)しかし、最新のdevexpressアップデートで、次のコードに問題があります。

Private Sub cpAddComment_Apply(ByVal sender As System.Object, ByVal ea As DevExpress.CodeRush.Core.ApplyContentEventArgs) Handles cpAddXMLCommentAndTryCatch.Apply
    ' create elementbuilder and add current code to it
    Dim objMethod As New Method
    objMethod = objOldMethod.Clone()
    objElementBuilder.AddStatement(Nothing, objMethod)

    ' add try
    Dim objTry As DevExpress.CodeRush.StructuralParser.Try = objElementBuilder.AddTry(objMethod)
    Dim objCatch As DevExpress.CodeRush.StructuralParser.Catch = objElementBuilder.AddCatch(objMethod, "Exception", "ex")

    ' add exception
    Dim strErrorString As String = """Error in " + objMethod.Location + """, ex"
    Dim objThrow As New DevExpress.CodeRush.StructuralParser.Throw

    Dim objException As New DevExpress.CodeRush.StructuralParser.TypeReferenceExpression("Exception")
    Dim objExceptionString As New DevExpress.CodeRush.StructuralParser.PrimitiveExpression(strErrorString)
    Dim objNewException As New DevExpress.CodeRush.StructuralParser.ObjectCreationExpression(objException)
    objNewException.AddArgument(objExceptionString)
    objThrow.Expression = objNewException
    'objThrow.AddFooter(" ") 'This isnt working either
    objElementBuilder.AddThrow(objCatch, objThrow)


    ' substitute code
    Dim newCode As String = objElementBuilder.GenerateCode()
    ea.TextDocument.Replace(objOldMethod.Range, newCode, "Update Method", True)
end sub

正しい Try-catch ブロックを生成する代わりに、次の誤ったコードを生成します。

    Try
    Catch ex As Exception
    Throw New Exception("Error in test", ex)End Try

不思議なことに、次のコードは機能しているようです (ほぼ同じコードですが、イベントハンドラーが例外ではなくメッセージボックスを表示するためです)。

If not CodeRush.Language.ActiveExtension.DotNetLanguageType = DotNetLanguageType.CSharp Then
    Dim objExceptionString As New DevExpress.CodeRush.StructuralParser.PrimitiveExpression("Messagebox.Show(" + strErrorString + ")" + vbCrLf)
    objElementBuilder.AddStatement(objCatch, objExceptionString)
Else

この問題は Vb.Net に存在しますが、C# ではブラケットが正しく配置されています。

4

1 に答える 1

1

問題を再現し、DevExpress サポート センターに登録しました。こちら でステータスを追跡できます。修正が完了したら、サポート チーム (support @ devexpress.com) から修正を含むビルドをリクエストできます。現時点では、回避策として、次のコード行を置き換えることができます。

objThrow.Expression = objNewException

これに:

objThrow.Expression = New SnippetExpression(CodeRush.Language.GenerateExpressionCode(objNewException) + vbCrLf)

これにより、Visual Basic で try/catch ブロックが正しく生成されます。

于 2011-07-08T12:14:23.600 に答える