2013-08-08 8 views
3

클래스의 반환 유형 문자열을 사용하여 속성을 제거하는 resharper 플러그인을 만들고 싶습니다. 이미 선택된 클래스에서 모든 속성을 가져 오는 IActionHandler을 만들었지 만 코드 구조를 수정하여 클래스에서 속성을 제거 할 수있는 방법을 모르겠습니다.Resharper 7.1 플러그인을 사용하여 IClass에서 IProperty 삭제

public void Execute(IDataContext context, DelegateExecute nextExecute) 
{ 
    // Fetch active solution from context. 
    ISolution solution = context.GetData(JetBrains.ProjectModel.DataContext.DataConstants.SOLUTION); 
    if (solution == null) 
     return; 

    var declaredElements = context.GetData(DataConstants.DECLARED_ELEMENTS); 
    if (declaredElements == null || declaredElements.IsEmpty()) 
     return; 

    IDeclaredElement declaredElement = declaredElements.First(); 

    var classElement = declaredElement as IClass; 
    if (classElement != null) 
    { 
     var properties = classElement.Properties.Where(p => p.Type.IsString()); 

     foreach (IProperty property in properties) 
     { 
      // Remove IProperty from IClass <-- 
     } 
    } 
} 

어떤 아이디어 : 여기

IActionHandler의 실행 방법?

public void Execute(IDataContext context, DelegateExecute nextExecute) 
{ 
    // Fetch active solution from context. 
    ISolution solution = context.GetData(JetBrains.ProjectModel.DataContext.DataConstants.SOLUTION); 
    if (solution == null) 
     return; 

    var declaredElements = context.GetData(DataConstants.DECLARED_ELEMENTS); 
    if (declaredElements == null || declaredElements.IsEmpty()) 
     return; 

    IDeclaredElement declaredElement = declaredElements.First(); 

    var classElement = declaredElement as IClass; 
    if (classElement != null) 
    { 
     // As a class can be declared in multiple files (partial classes) we enumerate all 
     // declarations and choose the first one 
     var declarations = classElement.GetDeclarations(); 
     var classDeclaration = declarations.First() as IClassDeclaration; 

     var properties = classDeclaration.PropertyDeclarations.Where(p => p.Type.IsString()); 

     foreach (var propertyDeclaration in properties) 
     {  
      PsiManager.GetInstance(solution).DoTransaction(() => 
      { 
       classDeclaration.RemoveClassMemberDeclaration(propertyDeclaration); 
      }, 
      "PsiTransactionCommand"); 
     } 
    } 
} 
:

답변