2014-11-23 2 views
0

매개 변수의 순서를 유지하면서 메서드 매개 변수에 대해 Null 가드 검사를 삽입하는 코드 수정을 작성했습니다.내 코드 수정으로 원하는 결과를 얻을 수 없습니다.

매개 변수 p3에 null 보호 기능을 추가하기 위해 코드 수정을 사용한다고 가정 해 보겠습니다. 이것은 다음 결과 여야합니다.

Public Sub ex(p0 As Example, p1 As Example, p2 As Integer, p3 As Example) ' Comment 1 
    If p0 Is Nothing Then Throw New System.ArgumentNullException("p0") 'comment 
    If p3 Is Nothing Then Throw New System.ArgumentNullException("p3") 

    Dim a = 0 
End Sub 

하지만 실제로 얻을 것은

Public Sub ex(p0 As Example, p1 As Example, p2 As Integer, p3 As Example) ' Comment 1 
    If p0 Is Nothing Then Throw New System.ArgumentNullException("p0") If p3 Is Nothing Then Throw New System.ArgumentNullException("p3")   'comment 

    Dim a = 0 
End Sub 

또는

Public Sub ex(p0 As Example, p1 As Example, p2 As Integer, p3 As Example) ' Comment 1 
    If p0 Is Nothing Then Throw New System.ArgumentNullException("p0") 
    If p3 Is Nothing Then Throw New System.ArgumentNullException("p3")   'comment 

    Dim a = 0 
End Sub 

입니다

GitHub의에서 찾을 수 있습니다 사용되는 코드 (repo) *이 사용되는 알고리즘 가능성이 쓰레기는하지만, 그것은 작동 . *

아무리 노력해도 올바른 결과를 얻지 못하는 것 같습니다.

  • 모든 경비는
  • 모든 경비는 별도의 줄에 결국하지만 댓글이 삭제 같은 줄에 끝/지난 가드의 끝으로 이동.

원하는 결과를 얻지 못한 사람이 있습니까?


나는 퀴즈는 각 문에 보존 할 수 있지만, 그렇지 않은 기대

Dim ifStatements = method.Statements.Where(Function(s) (TypeOf s Is MultiLineIfBlockSyntax) 
        OrElse (TypeOf s Is SingleLineIfStatementSyntax)) 
    Dim ExistingGuards = ifStatements.Where(Function(s) 
    If TypeOf s Is SingleLineIfStatementSyntax Then 
     Dim singleIF = DirectCast(s, SingleLineIfStatementSyntax) 
     Dim isExpr = TryCast(singleIF.Condition, BinaryExpressionSyntax) 
     Return CheckIfCondition(isExpr) 
    ElseIf TypeOf s Is MultiLineIfBlockSyntax Then 
     Dim multiIF = DirectCast(s, MultiLineIfBlockSyntax) 
     Dim isExpr = TryCast(multiIF.IfStatement.Condition, BinaryExpressionSyntax) 
     Return CheckIfCondition(isExpr) 
    Else 
     Return False 
    End If 
    End Function).ToList() 

추가.

답변

0

아담,

포맷터 주석을 사용해 보셨습니까?

  replacement = ifStatement.WithStatement(
       SyntaxFactory.Block(ifStatement.Statement) 
        .WithAdditionalAnnotations(Formatter.Annotation)); 

어떻게 모두 같은 줄에 고정 시켰습니까?

줄의 마지막 토큰에 주석이 후행이어야합니다 (괄호는

+0

). 추가 정보를보십시오. –

+0

LINQ 쿼리의 결과를 살펴보면 .Node.Green을 찾을 수 있으며 코멘트 트리 비어가 있습니다. –

관련 문제