Удалить IProperty из IClass с помощью плагина Resharper 7.1
Я хочу создать плагин для повышения резкости, который удаляет свойства с возвращаемой строкой типа из класса. Я уже создал IActionHandler
который получает все свойства из выбранного класса, но я не знаю, как я могу изменить структуру кода, чтобы удалить свойства из класса.
Вот метод Execute из 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)
{
var properties = classElement.Properties.Where(p => p.Type.IsString());
foreach (IProperty property in properties)
{
// Remove IProperty from IClass <--
}
}
}
Есть идеи?
1 ответ
Решение
Я нашел ответ:
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");
}
}
}