Refactoring algorithm

I want known how PhpStorm do rename refactoring. Sorry, but i can't describe my full question in English. Ony Russian.

Скажите, где найти описание алгоритма работы рефакторинга "rename" (и других)? В документации не нашёл.
Из того, что пришло сейчас в голову, касательно рефакторинга "rename" интсресует следующее:

1. Находятся ли  имена функций и методов, вызываемых через call_user_func() и т.п. ф-и, через нотацию $func_name(), а так же через передачу имени ф-и в качестве callback ф-и функциям array_map() и т.п.?
2. Находятся ли функции и классы, для которых созданны отражения (new ReflectionClass(''), new ReflectionFunction('') и т.п.)?
3. Вычисляются ли значения переменных, участвующих в образовании имён классов и функций и разыменовываются ли переменные $$var_name?
4. Вычисляются ли (и как вычисляются) значение переменных при вызове методов и свойств объекта класса. Переименуются ли нижеследующие вызовы методов и свойств?
    $obj = new ClassName;
    
    //методы
    $obj->test();
    
    $func_name = 'test';
    $obj->$func_name();
    
    $func_name = 'static_func';
    ClassName::$func_name();    
    
    //свойства
    $obj->width;
    
    $var_name = 'width';
    $obj->$var_name;
    
    $var_name = 'static_var';
    ClassName::$$var_name;

5. Где и как ищется упоминание имени файла в проекте при рефакторинге "rename" для файлов?
6. Вычисляются ли значения переменных, учавствующих образовании имён файлов? Например:
    $file_postfix = 'qwe.php';
    include ($i + $file_postfix);
    
    //значение переменной другом файле
    include ($config['controller']);



Очень хочется досканально знать (а не изучать методом тыка) поведение "rename", чтобы знать о возможных ограничениях и заниматься рефакторингом в ручную только там где это необходимо (т.е. где автоматический рефакторинг не возможен).

P.S.: вообще хотелось бы почитать в целом о анализе кода в PhpStorm и о его ограничениях.

3 comments
Comment actions Permalink

Насколько я знаю, 1-3 еще не реализованы, но запрос в багтрекере висит: http://youtrack.jetbrains.net/issue/WI-899. По поводу остальных вариантов - не думаю, что они могут быть вообще реализованы полностью корректно.

0
Comment actions Permalink

По поводу остальных вариантов - не думаю, что они могут быть вообще реализованы полностью корректно.


Вот по этому я и хочу, чтобы был какой-нибудь подробный мануал по использованию рефакторинга с описанием принципов его работы. Иначе как можно использовать инструмент, у которого есть ограничения, о которых не известно (пользователю естественно)?

0
Comment actions Permalink

Basically, all suitable references that are found by Search | Find Usages will be involved in refactoring.
Learn by example current state of things in refactoring support: use Preview button on rename dialog.
Each build/release will also contain description of added features.
BTW, "search for text occurrences" can help handle call_user_func().
All other dynamic calls are not yet supported.

0

Please sign in to leave a comment.