Плагин Coderush не генерирует корректную попытку - PullRequest
1 голос
/ 07 июля 2011

Мы создали небольшой плагин для добавления блока комментариев 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 Ответ

1 голос
/ 08 июля 2011

Я воспроизвел вашу проблему и зарегистрировал ее в Центре поддержки DevExpress.Вы можете отслеживать его статус здесь .После исправления вы можете запросить сборку, содержащую исправление, в группе поддержки по адресу support@devexpress.com.На данный момент, в качестве обходного пути, вы можете заменить эту строку кода:

objThrow.Expression = objNewException

на эту:

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

Это будет правильно генерировать блок try / catch в Visual Basic.

...