Найти ссылку на класс Java в определенных проектах (eclipse) через скрипт
В настоящее время я занимаюсь рефакторингом проекта, используемого двумя прикладными проектами, и столкнулся со следующей проблемой:
Старый проект должен быть разделен на три новых проекта A, B и C, потому что он растёт и становится запутанным.
Таким образом, проект A реализует классы, используемые приложением 1, проект B реализует некоторые другие классы, используемые приложением 2, а остальные классы, которые используются обоими приложениями 1 и 2, должны быть реализованы в проекте C.
Я уже начал рефакторинг, поэтому структура уже существует и работает. Теперь я хочу выяснить, остались ли в проекте C какие-либо классы, которые используются только приложением 1 или приложением 2
Поскольку существует около 500 классов Java, я хотел бы использовать сценарий, чтобы увидеть, реализован ли класс Java проектом A, B или и тем, и другим. В Eclipse вручную я могу выбрать имя класса для каждого java-класса и перейти к пункту "ссылки -> рабочая область" и проверить результаты, но я надеюсь, что у кого-то есть идея получше:-)
Заранее спасибо!
1 ответ
Теперь я написал сценарий powershellscript, который находит любые java-файлы в проекте c. Затем он ищет в каждом java-файле проекта a и b имя java-классов проекта c и сортирует их, которые не были найдены в каждом проекте.
Я должен сказать, что это не распространяется на любое наследование... так что это просто подсказка классов для поиска.
Странное решение, но я думаю, что оно работает, вот код:
# all classes used in the project C
$classNames = New-Object System.Collections.ArrayList
Get-ChildItem "path-to-project-C" -Recurse -Filter *.java | `
Sort-Object -Descending | `
Foreach-Object {
$className = $_.name.Split(".")
#[void] to prevent .add-function to pass the added index into console
[void]$classNames.add($className[0])
}
# all classes of project C used in project A
$projectA_classes = New-Object System.Collections.ArrayList
Get-ChildItem "path-to-project-A" -Recurse -Filter *.java | `
Foreach-Object {
$path = $_.FullName
foreach ($class in $classNames){
if(Select-String -Path $path -pattern $class -quiet) {
[void]$projectA_classes.add($class)
}
}
}
write-host $projectA_classes.count classes used by project A
# all classes of project C used in project B
$projectB_classes = New-Object System.Collections.ArrayList
Get-ChildItem "path-to-project-B" -Recurse -Filter *.java | `
Foreach-Object {
$path = $_.FullName
foreach ($class in $classNames){
if(Select-String -Path $path -pattern $class -quiet) {
[void]$projectB_classes.add($class)
}
}
}
write-host $projectB_classes.count classes used by daemon project
#find classes not used by porject A
$projectB_classesNotUsedByProjectA = New-Object System.Collections.ArrayList
foreach ($class in $projectB_classes) {
if(!($projectA_classes.contains($class))) {
if(!($projectB_classesNotUsedByProjectA.contains($class))) {
[void]$projectB_classesNotUsedByProjectA.add($class);
}
}
}
#find classes not used by porject B
$projectA_classesNotUsedByProjectB = New-Object System.Collections.ArrayList
foreach ($class in $projectA_classes) {
if(!($projectB_classes.contains($class))) {
if(!($projectA_classesNotUsedByProjectB.contains($class))) {
[void]$projectA_classesNotUsedByProjectB.add($class);
}
}
}
write-host $projectB_classesNotUsedByProjectA.count classes not used by project A
write-host $projectA_classesNotUsedByProjectB.count classes not used by project B
write-host Classes not used by project A: $projectB_classesNotUsedByProjectA
write-host Classes not used by project B: $projectA_classesNotUsedByProjectB
Я не выберу это как правильный ответ, потому что я надеюсь, что есть лучшее решение.