Плагин Coderush не генерирует корректную попытку
Мы создали небольшой плагин для добавления блока 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# квадратные скобки расположены правильно.
1 ответ
Я воспроизвел вашу проблему и зарегистрировал ее в Центре поддержки DevExpress. Вы можете отслеживать его статус здесь. После исправления вы можете запросить сборку, содержащую исправление, в группе поддержки по адресу support@devexpress.com. На данный момент, в качестве обходного пути, вы можете заменить эту строку кода:
objThrow.Expression = objNewException
в это:
objThrow.Expression = New SnippetExpression(CodeRush.Language.GenerateExpressionCode(objNewException) + vbCrLf)
Это сгенерирует блок try/catch в Visual Basic правильно.