|
|
@ -9,10 +9,10 @@ import ru.ulstu.extractor.heuristic.component.BuildTool;
|
|
|
|
import ru.ulstu.extractor.heuristic.component.ProgrammingLanguage;
|
|
|
|
import ru.ulstu.extractor.heuristic.component.ProgrammingLanguage;
|
|
|
|
import ru.ulstu.extractor.heuristic.model.StructuralUnit;
|
|
|
|
import ru.ulstu.extractor.heuristic.model.StructuralUnit;
|
|
|
|
import ru.ulstu.extractor.heuristic.service.DetectorService;
|
|
|
|
import ru.ulstu.extractor.heuristic.service.DetectorService;
|
|
|
|
|
|
|
|
import ru.ulstu.extractor.heuristic.service.ProgrammingLanguageService;
|
|
|
|
import ru.ulstu.extractor.util.StringUtils;
|
|
|
|
import ru.ulstu.extractor.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.nio.file.Files;
|
|
|
|
import java.nio.file.Files;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.HashMap;
|
|
|
@ -20,15 +20,16 @@ import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Optional;
|
|
|
|
import java.util.Optional;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static ru.ulstu.extractor.heuristic.service.DetectorService.LangDetectScrupulousness.HIGH;
|
|
|
|
|
|
|
|
import static ru.ulstu.extractor.heuristic.service.DetectorService.LangDetectScrupulousness.LOW;
|
|
|
|
|
|
|
|
|
|
|
|
public abstract class StructuralUnitIdentifier {
|
|
|
|
public abstract class StructuralUnitIdentifier {
|
|
|
|
public List<StructuralUnit> getEntityClasses(String projectPath, List<File> projectFiles, List<File> rootProjectFiles) {
|
|
|
|
public List<StructuralUnit> getEntityClasses(String projectPath, List<File> projectFiles, List<File> rootProjectFiles) {
|
|
|
|
String subDirectory = getSourceDirectory(rootProjectFiles);
|
|
|
|
String subDirectory = getSourceDirectory(rootProjectFiles);
|
|
|
|
return getEntityClasses(projectPath, subDirectory, projectFiles);
|
|
|
|
return getEntityClasses(projectPath, subDirectory, projectFiles);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract String getSourceDirectory(List<File> rootProjectFiles);
|
|
|
|
public abstract boolean isEntityClass(File file);
|
|
|
|
|
|
|
|
|
|
|
|
public abstract List<StructuralUnit> getEntityClasses(String projectPath, String subDirectory, List<File> projectFiles);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public abstract List<StructuralUnit> getBusinessLogicClasses();
|
|
|
|
public abstract List<StructuralUnit> getBusinessLogicClasses();
|
|
|
|
|
|
|
|
|
|
|
@ -36,32 +37,33 @@ public abstract class StructuralUnitIdentifier {
|
|
|
|
|
|
|
|
|
|
|
|
public abstract Optional<BuildTool> getBuildTool(List<File> rootDirectoryFiles);
|
|
|
|
public abstract Optional<BuildTool> getBuildTool(List<File> rootDirectoryFiles);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public abstract boolean canAppliedToProject(String projectPath, List<File> projectFiles, List<File> rootProjectFiles);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public abstract boolean canAppliedToFile(File projectFile);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract List<StructuralUnit> getEntityClasses(String projectPath, String subDirectory, List<File> projectFiles);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract String getSourceDirectory(List<File> rootProjectFiles);
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract DetectorService getDetectorService();
|
|
|
|
protected abstract DetectorService getDetectorService();
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract ProgrammingLanguage getProgrammingLanguage();
|
|
|
|
protected abstract ProgrammingLanguageService getProgrammingLanguageService();
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract boolean isEntityClass(File file) throws FileNotFoundException;
|
|
|
|
protected abstract ProgrammingLanguage getProgrammingLanguage();
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract boolean isBusinessLogicClass(File file);
|
|
|
|
protected abstract boolean isBusinessLogicClass(File file);
|
|
|
|
|
|
|
|
|
|
|
|
protected Optional<ProgrammingLanguage> getMainProgrammingLanguage(String projectPath, List<File> projectFiles, List<File> rootProjectFiles) {
|
|
|
|
protected Optional<ProgrammingLanguage> getMainProgrammingLanguage(String projectPath, List<File> projectFiles, List<File> rootProjectFiles) {
|
|
|
|
String subDirectory = getSourceDirectory(rootProjectFiles);
|
|
|
|
String subDirectory = getSourceDirectory(rootProjectFiles);
|
|
|
|
Map<String, Integer> projectFileLanguageFrequency = new HashMap<>();
|
|
|
|
Map<ProgrammingLanguage, Integer> projectFileLanguageFrequency = new HashMap<>();
|
|
|
|
projectFiles.stream()
|
|
|
|
projectFiles.stream()
|
|
|
|
.filter(file -> StringUtils.fileInSubdirectory(file.getPath(), projectPath, subDirectory))
|
|
|
|
.filter(file -> StringUtils.fileInSubdirectory(file.getPath(), projectPath, subDirectory))
|
|
|
|
.forEach(projectFile -> {
|
|
|
|
.forEach(projectFile -> {
|
|
|
|
try {
|
|
|
|
Optional<ProgrammingLanguage> detectedLanguage = getMainProgrammingLanguage(projectFile, LOW);
|
|
|
|
String detectedLanguage = getDetectorService().getDetectedLanguage(
|
|
|
|
detectedLanguage.ifPresent(programmingLanguage -> projectFileLanguageFrequency.put(programmingLanguage, projectFileLanguageFrequency.getOrDefault(programmingLanguage, 0) + 1));
|
|
|
|
projectFile.getName(),
|
|
|
|
|
|
|
|
new String(Files.readAllBytes(projectFile.toPath())),
|
|
|
|
|
|
|
|
DetectorService.LangDetectScrupulousness.LOW);
|
|
|
|
|
|
|
|
projectFileLanguageFrequency.put(detectedLanguage, projectFileLanguageFrequency.getOrDefault(detectedLanguage, 0) + 1);
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
Optional<Map.Entry<String, Integer>> mostFrequentLanguageEntry = projectFileLanguageFrequency
|
|
|
|
Optional<Map.Entry<ProgrammingLanguage, Integer>> mostFrequentLanguageEntry = projectFileLanguageFrequency
|
|
|
|
.entrySet()
|
|
|
|
.entrySet()
|
|
|
|
.stream()
|
|
|
|
.stream()
|
|
|
|
.max(Map.Entry.comparingByValue());
|
|
|
|
.max(Map.Entry.comparingByValue());
|
|
|
@ -69,11 +71,21 @@ public abstract class StructuralUnitIdentifier {
|
|
|
|
return Optional.empty();
|
|
|
|
return Optional.empty();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ProgrammingLanguage programmingLanguage = getProgrammingLanguage();
|
|
|
|
return Optional.of(mostFrequentLanguageEntry.get().getKey());
|
|
|
|
return programmingLanguage.getName().equals(mostFrequentLanguageEntry.get().getKey())
|
|
|
|
|
|
|
|
? Optional.of(programmingLanguage)
|
|
|
|
|
|
|
|
: Optional.empty();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public abstract boolean canAppliedToProject(String projectPath, List<File> projectFiles, List<File> rootProjectFiles);
|
|
|
|
protected Optional<ProgrammingLanguage> getMainProgrammingLanguage(File projectFile, DetectorService.LangDetectScrupulousness scrupulousness) {
|
|
|
|
|
|
|
|
String fileContent = "";
|
|
|
|
|
|
|
|
if (scrupulousness == HIGH) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
fileContent = new String(Files.readAllBytes(projectFile.toPath()));
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return getProgrammingLanguageService().getByName(getDetectorService().getDetectedLanguage(
|
|
|
|
|
|
|
|
projectFile.getName(),
|
|
|
|
|
|
|
|
fileContent,
|
|
|
|
|
|
|
|
scrupulousness));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|