Найти ссылку на класс Java в определенных проектах (eclipse) через скрипт

В настоящее время я занимаюсь рефакторингом проекта, используемого двумя прикладными проектами, и столкнулся со следующей проблемой:

Старый проект должен быть разделен на три новых проекта A, B и C, потому что он растёт и становится запутанным.

Таким образом, проект A реализует классы, используемые приложением 1, проект B реализует некоторые другие классы, используемые приложением 2, а остальные классы, которые используются обоими приложениями 1 и 2, должны быть реализованы в проекте C.

http://i.imgur.com/8GvGSJ2.png

Я уже начал рефакторинг, поэтому структура уже существует и работает. Теперь я хочу выяснить, остались ли в проекте 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

Я не выберу это как правильный ответ, потому что я надеюсь, что есть лучшее решение.

Другие вопросы по тегам