Рефакторинг модуля в класс: изменение общих полей на поля экземпляра - PullRequest
1 голос
/ 14 ноября 2011

В настоящее время я выполняю рефакторинг старой библиотеки Visual Basic DLL (VB.Net), которая хранит все свои данные в одном модуле под названием Globaldefinitions в качестве открытых полей. Вокруг кода существует около 200 полей, на которые тысячи раз ссылаются:

Public Module Globaldefinitons
     Public a As Short
     ...
     Public zz10 As Double
End Module

В самой DLL после импорта Globaldefinitions эти поля ссылаются на свое имя (без префикса модуля):

a = 5

Мне нужно изменить модуль на класс с неиспользуемыми полями. Это означает, что каждая из этих тысяч ссылок должна ссылаться на экземпляр этого класса:

globalDefinitionsInstance.a = 5

Как мне сделать это эффективно?

Регулярные выражения, работающие с источником, не работают. Инструменты рефакторинга, такие как Re-Sharper или CodeRush, похоже, не предлагают эту функциональность. Visual Studio 2010 также не может сделать это автоматически.

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Вот как я мог бы изменить это. Для каждого поля в GlobalDefinitions выполните следующее

  • Используйте Visual Studio Refactor Rename, чтобы переименовать его в уникальное имя Bad_Name_a. Это превратит все трудно сопоставимые имена в очень легко сопоставляемые имена
  • Выполните глобальный поиск и замените Bad_Name_a на globalDefinitionsInstance.Bad_Name_a. Не нужно даже регулярное выражение здесь. Название и замена уникальны
  • Используйте Visual Studio Refactor Rename, чтобы переименовать его на лучшее имя по вашему выбору.
0 голосов
/ 14 ноября 2011

Сначала я бы использовал встроенную функциональность переименования VS 2010, чтобы переименовать a во что-то настолько уникальное, насколько это возможно, например, ReplaceThisSillyPropertyNameNow.Затем вы можете выполнить глобальный поиск и заменить новое имя желаемой заменой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...