diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index afc63edb..15b0023d 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -24,8 +24,7 @@ jobs: - name: Build With Maven env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar + run: mvn -B verify # Comment "Build With Maven" and uncomment the below when you want a snapshot build to be deployed diff --git a/change-proneness-ranker/src/main/java/org/hjug/git/ChangePronenessRanker.java b/change-proneness-ranker/src/main/java/org/hjug/git/ChangePronenessRanker.java index 91c7ebb1..298f30d7 100644 --- a/change-proneness-ranker/src/main/java/org/hjug/git/ChangePronenessRanker.java +++ b/change-proneness-ranker/src/main/java/org/hjug/git/ChangePronenessRanker.java @@ -1,9 +1,7 @@ package org.hjug.git; import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.TreeMap; +import java.util.*; import lombok.extern.slf4j.Slf4j; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Repository; @@ -11,31 +9,32 @@ @Slf4j public class ChangePronenessRanker { - private Repository repository; - private RepositoryLogReader repositoryLogReader; - - public ChangePronenessRanker(Repository repository, RepositoryLogReader repositoryLogReader) { - this.repositoryLogReader = repositoryLogReader; - this.repository = repository; - } - - public void rankChangeProneness(List scmLogInfos) { - TreeMap changeCountsByTimeStamps = new TreeMap<>(); + private final TreeMap changeCountsByTimeStamps = new TreeMap<>(); + private final Map cachedScmLogInfos = new HashMap<>(); + public ChangePronenessRanker(Repository repository, GitLogReader repositoryLogReader) { try { log.info("Capturing change count based on commit timestamps"); changeCountsByTimeStamps.putAll(repositoryLogReader.captureChangeCountByCommitTimestamp(repository)); } catch (IOException | GitAPIException e) { log.error("Error reading from repository: {}", e.getMessage()); } + } + public void rankChangeProneness(List scmLogInfos) { for (ScmLogInfo scmLogInfo : scmLogInfos) { - int commitsInRepositorySinceCreation = - changeCountsByTimeStamps.tailMap(scmLogInfo.getEarliestCommit()).values().stream() - .mapToInt(i -> i) - .sum(); - - scmLogInfo.setChangeProneness((float) scmLogInfo.getCommitCount() / commitsInRepositorySinceCreation); + if (!cachedScmLogInfos.containsKey(scmLogInfo.getPath())) { + int commitsInRepositorySinceCreation = + changeCountsByTimeStamps.tailMap(scmLogInfo.getEarliestCommit()).values().stream() + .mapToInt(i -> i) + .sum(); + + scmLogInfo.setChangeProneness((float) scmLogInfo.getCommitCount() / commitsInRepositorySinceCreation); + cachedScmLogInfos.put(scmLogInfo.getPath(), scmLogInfo); + } else { + scmLogInfo.setChangeProneness( + cachedScmLogInfos.get(scmLogInfo.getPath()).getChangeProneness()); + } } scmLogInfos.sort(Comparator.comparing(ScmLogInfo::getChangeProneness)); diff --git a/change-proneness-ranker/src/main/java/org/hjug/git/GitLogReader.java b/change-proneness-ranker/src/main/java/org/hjug/git/GitLogReader.java index f4bda871..c684850c 100644 --- a/change-proneness-ranker/src/main/java/org/hjug/git/GitLogReader.java +++ b/change-proneness-ranker/src/main/java/org/hjug/git/GitLogReader.java @@ -15,7 +15,7 @@ import org.eclipse.jgit.util.io.NullOutputStream; @Slf4j -public class GitLogReader implements RepositoryLogReader { +public class GitLogReader { static final String JAVA_FILE_TYPE = ".java"; @@ -23,7 +23,6 @@ public class GitLogReader implements RepositoryLogReader { // https://github.com/Cosium/git-code-format-maven-plugin/blob/master/src/main/java/com/cosium/code/format/AbstractMavenGitCodeFormatMojo.java // MIT License // Move to a provider? - @Override public Repository gitRepository(File basedir) throws IOException { Repository gitRepository; FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder().findGitDir(basedir); @@ -46,7 +45,6 @@ public File getGitDir(File basedir) { // https://stackoverflow.com/a/19950970/346247 // and // https://github.com/centic9/jgit-cookbook/blob/master/src/main/java/org/dstadler/jgit/api/ReadFileFromCommit.java - @Override public Map listRepositoryContentsAtHEAD(Repository repository) throws IOException { Ref head = repository.exactRef("HEAD"); // a RevWalk allows us to walk over commits based on some filtering that is defined @@ -88,7 +86,6 @@ public Map listRepositoryContentsAtHEAD(Repositor * @return a LogInfo object * @throws GitAPIException */ - @Override public ScmLogInfo fileLog(Repository repository, String path) throws GitAPIException, IOException { Git git = new Git(repository); ObjectId branchId = repository.resolve("HEAD"); @@ -118,7 +115,6 @@ public ScmLogInfo fileLog(Repository repository, String path) throws GitAPIExcep } // based on https://stackoverflow.com/questions/27361538/how-to-show-changes-between-commits-with-jgit - @Override public TreeMap captureChangeCountByCommitTimestamp(Repository repository) throws IOException, GitAPIException { diff --git a/change-proneness-ranker/src/main/java/org/hjug/git/RepositoryLogReader.java b/change-proneness-ranker/src/main/java/org/hjug/git/RepositoryLogReader.java deleted file mode 100644 index d6f264ed..00000000 --- a/change-proneness-ranker/src/main/java/org/hjug/git/RepositoryLogReader.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.hjug.git; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.util.Map; -import java.util.TreeMap; -import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.lib.Repository; - -public interface RepositoryLogReader { - - Repository gitRepository(File basedir) throws IOException; - - Map listRepositoryContentsAtHEAD(Repository repository) throws IOException; - - ScmLogInfo fileLog(Repository repository, String path) throws GitAPIException, IOException; - - TreeMap captureChangeCountByCommitTimestamp(Repository repository) - throws IOException, GitAPIException; -} diff --git a/change-proneness-ranker/src/test/java/org/hjug/git/ChangePronenessRankerTest.java b/change-proneness-ranker/src/test/java/org/hjug/git/ChangePronenessRankerTest.java index 66a1b7fa..daad2c61 100644 --- a/change-proneness-ranker/src/test/java/org/hjug/git/ChangePronenessRankerTest.java +++ b/change-proneness-ranker/src/test/java/org/hjug/git/ChangePronenessRankerTest.java @@ -11,15 +11,14 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class ChangePronenessRankerTest { +class ChangePronenessRankerTest { private ChangePronenessRanker changePronenessRanker; - private RepositoryLogReader repositoryLogReader; + private GitLogReader repositoryLogReader; @BeforeEach public void setUp() { - repositoryLogReader = mock(RepositoryLogReader.class); - changePronenessRanker = new ChangePronenessRanker(null, repositoryLogReader); + repositoryLogReader = mock(GitLogReader.class); } // TODO: this should probably be a cucumber test @@ -34,6 +33,7 @@ void testChangePronenessCalculation() throws IOException, GitAPIException { when(repositoryLogReader.captureChangeCountByCommitTimestamp(any())).thenReturn(commitsWithChangeCounts); + changePronenessRanker = new ChangePronenessRanker(null, repositoryLogReader); List scmLogInfos = new ArrayList<>(); scmLogInfos.add(scmLogInfo); changePronenessRanker.rankChangeProneness(scmLogInfos); @@ -58,6 +58,7 @@ void testRankChangeProneness() throws IOException, GitAPIException { commitsWithChangeCounts.put(scmLogInfo2.getEarliestCommit() + 10 * 60, 5); when(repositoryLogReader.captureChangeCountByCommitTimestamp(any())).thenReturn(commitsWithChangeCounts); + changePronenessRanker = new ChangePronenessRanker(null, repositoryLogReader); List scmLogInfos = new ArrayList<>(); scmLogInfos.add(scmLogInfo); diff --git a/cli/pom.xml b/cli/pom.xml index 3afaaa99..c6a0d58a 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -60,6 +60,16 @@ org.hjug.refactorfirst.Main + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + diff --git a/cli/src/main/java/org/hjug/refactorfirst/ReportCommand.java b/cli/src/main/java/org/hjug/refactorfirst/ReportCommand.java index 219c06b0..ec448110 100644 --- a/cli/src/main/java/org/hjug/refactorfirst/ReportCommand.java +++ b/cli/src/main/java/org/hjug/refactorfirst/ReportCommand.java @@ -11,6 +11,7 @@ import org.apache.maven.project.MavenProject; import org.hjug.refactorfirst.report.CsvReport; import org.hjug.refactorfirst.report.HtmlReport; +import org.hjug.refactorfirst.report.SimpleHtmlReport; import org.hjug.refactorfirst.report.json.JsonReportExecutor; import picocli.CommandLine.Command; @@ -58,6 +59,10 @@ public Integer call() { inferArgumentsFromMavenProject(); populateDefaultArguments(); switch (reportType) { + case SIMPLE_HTML: + SimpleHtmlReport simpleHtmlReport = new SimpleHtmlReport(); + simpleHtmlReport.execute(showDetails, projectName, projectVersion, outputDirectory, baseDir); + return 0; case HTML: HtmlReport htmlReport = new HtmlReport(); htmlReport.execute(showDetails, projectName, projectVersion, outputDirectory, baseDir); diff --git a/cli/src/main/java/org/hjug/refactorfirst/ReportType.java b/cli/src/main/java/org/hjug/refactorfirst/ReportType.java index 563e0f70..e7076c59 100644 --- a/cli/src/main/java/org/hjug/refactorfirst/ReportType.java +++ b/cli/src/main/java/org/hjug/refactorfirst/ReportType.java @@ -1,6 +1,7 @@ package org.hjug.refactorfirst; public enum ReportType { + SIMPLE_HTML, HTML, JSON, CSV; diff --git a/cost-benefit-calculator/src/main/java/org/hjug/cbc/CostBenefitCalculator.java b/cost-benefit-calculator/src/main/java/org/hjug/cbc/CostBenefitCalculator.java index 895b860b..0654fb29 100644 --- a/cost-benefit-calculator/src/main/java/org/hjug/cbc/CostBenefitCalculator.java +++ b/cost-benefit-calculator/src/main/java/org/hjug/cbc/CostBenefitCalculator.java @@ -18,7 +18,6 @@ import org.eclipse.jgit.lib.Repository; import org.hjug.git.ChangePronenessRanker; import org.hjug.git.GitLogReader; -import org.hjug.git.RepositoryLogReader; import org.hjug.git.ScmLogInfo; import org.hjug.metrics.*; import org.hjug.metrics.rules.CBORule; @@ -27,11 +26,30 @@ public class CostBenefitCalculator { private Report report; - private String projBaseDir = null; + private String repositoryPath; + private final GitLogReader gitLogReader = new GitLogReader(); + private Repository repository = null; + private final ChangePronenessRanker changePronenessRanker; + + public CostBenefitCalculator(String repositoryPath) { + this.repositoryPath = repositoryPath; + + log.info("Initiating Cost Benefit calculation"); + try { + repository = gitLogReader.gitRepository(new File(repositoryPath)); + for (String file : + gitLogReader.listRepositoryContentsAtHEAD(repository).keySet()) { + log.info("Files at HEAD: {}", file); + } + } catch (IOException e) { + log.error("Failure to access Git repository", e); + } + + changePronenessRanker = new ChangePronenessRanker(repository, gitLogReader); + } // copied from PMD's PmdTaskImpl.java and modified - public void runPmdAnalysis(String projectBaseDir) throws IOException { - projBaseDir = projectBaseDir; + public void runPmdAnalysis() throws IOException { PMDConfiguration configuration = new PMDConfiguration(); try (PmdAnalysis pmd = PmdAnalysis.create(configuration)) { @@ -42,9 +60,9 @@ public void runPmdAnalysis(String projectBaseDir) throws IOException { cboClassRule.setLanguage(LanguageRegistry.PMD.getLanguageByFullName("Java")); pmd.addRuleSet(RuleSet.forSingleRule(cboClassRule)); - log.info("files to be scanned: " + Paths.get(projectBaseDir)); + log.info("files to be scanned: " + Paths.get(repositoryPath)); - try (Stream files = Files.walk(Paths.get(projectBaseDir))) { + try (Stream files = Files.walk(Paths.get(repositoryPath))) { files.forEach(file -> pmd.files().addFile(file)); } @@ -52,25 +70,10 @@ public void runPmdAnalysis(String projectBaseDir) throws IOException { } } - public List calculateGodClassCostBenefitValues(String repositoryPath) { - - RepositoryLogReader repositoryLogReader = new GitLogReader(); - Repository repository = null; - log.info("Initiating Cost Benefit calculation"); - try { - repository = repositoryLogReader.gitRepository(new File(repositoryPath)); - for (String file : - repositoryLogReader.listRepositoryContentsAtHEAD(repository).keySet()) { - log.info("Files at HEAD: {}", file); - } - } catch (IOException e) { - log.error("Failure to access Git repository", e); - } - - // pass repo path here, not ByteArrayOutputStream + public List calculateGodClassCostBenefitValues() { List godClasses = getGodClasses(); - List scmLogInfos = getRankedChangeProneness(repositoryLogReader, repository, godClasses); + List scmLogInfos = getRankedChangeProneness(godClasses); Map rankedLogInfosByPath = scmLogInfos.stream().collect(Collectors.toMap(ScmLogInfo::getPath, logInfo -> logInfo, (a, b) -> b)); @@ -114,15 +117,14 @@ private List getGodClasses() { return godClasses; } - List getRankedChangeProneness( - RepositoryLogReader repositoryLogReader, Repository repository, List disharmonies) { + List getRankedChangeProneness(List disharmonies) { List scmLogInfos = new ArrayList<>(); log.info("Calculating Change Proneness"); for (Disharmony disharmony : disharmonies) { String path = disharmony.getFileName(); ScmLogInfo scmLogInfo = null; try { - scmLogInfo = repositoryLogReader.fileLog(repository, path); + scmLogInfo = gitLogReader.fileLog(repository, path); log.info("Successfully fetched scmLogInfo for {}", scmLogInfo.getPath()); } catch (GitAPIException | IOException e) { log.error("Error reading Git repository contents.", e); @@ -136,25 +138,14 @@ List getRankedChangeProneness( } } - ChangePronenessRanker changePronenessRanker = new ChangePronenessRanker(repository, repositoryLogReader); changePronenessRanker.rankChangeProneness(scmLogInfos); return scmLogInfos; } - public List calculateCBOCostBenefitValues(String repositoryPath) { - - RepositoryLogReader repositoryLogReader = new GitLogReader(); - Repository repository = null; - log.info("Initiating Cost Benefit calculation"); - try { - repository = repositoryLogReader.gitRepository(new File(repositoryPath)); - } catch (IOException e) { - log.error("Failure to access Git repository", e); - } - + public List calculateCBOCostBenefitValues() { List cboClasses = getCBOClasses(); - List scmLogInfos = getRankedChangeProneness(repositoryLogReader, repository, cboClasses); + List scmLogInfos = getRankedChangeProneness(cboClasses); Map rankedLogInfosByPath = scmLogInfos.stream().collect(Collectors.toMap(ScmLogInfo::getPath, logInfo -> logInfo, (a, b) -> b)); @@ -193,6 +184,6 @@ private List getCBOClasses() { } private String getFileName(RuleViolation violation) { - return violation.getFileId().getUriString().replace("file:///" + projBaseDir.replace("\\", "/") + "/", ""); + return violation.getFileId().getUriString().replace("file:///" + repositoryPath.replace("\\", "/") + "/", ""); } } diff --git a/cost-benefit-calculator/src/test/java/org/hjug/cbc/CostBenefitCalculatorTest.java b/cost-benefit-calculator/src/test/java/org/hjug/cbc/CostBenefitCalculatorTest.java index 246d24c6..954d61b9 100644 --- a/cost-benefit-calculator/src/test/java/org/hjug/cbc/CostBenefitCalculatorTest.java +++ b/cost-benefit-calculator/src/test/java/org/hjug/cbc/CostBenefitCalculatorTest.java @@ -47,10 +47,10 @@ void testCBOViolation() throws IOException, GitAPIException, InterruptedExceptio git.add().addFilepattern(".").call(); RevCommit firstCommit = git.commit().setMessage("message").call(); - CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(); - costBenefitCalculator.runPmdAnalysis(git.getRepository().getDirectory().getParent()); - List disharmonies = costBenefitCalculator.calculateCBOCostBenefitValues( - git.getRepository().getDirectory().getPath()); + CostBenefitCalculator costBenefitCalculator = + new CostBenefitCalculator(git.getRepository().getDirectory().getParent()); + costBenefitCalculator.runPmdAnalysis(); + List disharmonies = costBenefitCalculator.calculateCBOCostBenefitValues(); Assertions.assertFalse(disharmonies.isEmpty()); } @@ -80,10 +80,10 @@ void testCostBenefitCalculation() throws IOException, GitAPIException, Interrupt git.add().addFilepattern(".").call(); RevCommit secondCommit = git.commit().setMessage("message").call(); - CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(); - costBenefitCalculator.runPmdAnalysis(git.getRepository().getDirectory().getParent()); - List disharmonies = costBenefitCalculator.calculateGodClassCostBenefitValues( - git.getRepository().getDirectory().getPath()); + CostBenefitCalculator costBenefitCalculator = + new CostBenefitCalculator(git.getRepository().getDirectory().getParent()); + costBenefitCalculator.runPmdAnalysis(); + List disharmonies = costBenefitCalculator.calculateGodClassCostBenefitValues(); Assertions.assertEquals(1, disharmonies.get(0).getRawPriority().intValue()); Assertions.assertEquals(1, disharmonies.get(1).getRawPriority().intValue()); diff --git a/refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstRealMavenReport.java b/refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstMavenReport.java similarity index 98% rename from refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstRealMavenReport.java rename to refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstMavenReport.java index 077bfec6..60f596d8 100644 --- a/refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstRealMavenReport.java +++ b/refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstMavenReport.java @@ -34,7 +34,7 @@ requiresProject = false, threadSafe = true, inheritByDefault = false) -public class RefactorFirstRealMavenReport extends AbstractMavenReport { +public class RefactorFirstMavenReport extends AbstractMavenReport { @Parameter(property = "showDetails") private boolean showDetails = false; @@ -209,18 +209,16 @@ public void executeReport(Locale locale) throws MavenReportException { return; } - CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(); + CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(projectBaseDir); try { - costBenefitCalculator.runPmdAnalysis(projectBaseDir); + costBenefitCalculator.runPmdAnalysis(); } catch (IOException e) { log.error("Error running PMD analysis."); throw new RuntimeException(e); } - List rankedGodClassDisharmonies = - costBenefitCalculator.calculateGodClassCostBenefitValues(projectBaseDir); + List rankedGodClassDisharmonies = costBenefitCalculator.calculateGodClassCostBenefitValues(); - List rankedCBODisharmonies = - costBenefitCalculator.calculateCBOCostBenefitValues(projectBaseDir); + List rankedCBODisharmonies = costBenefitCalculator.calculateCBOCostBenefitValues(); if (rankedGodClassDisharmonies.isEmpty() && rankedCBODisharmonies.isEmpty()) { mainSink.text("Contratulations! " + projectName + " " + projectVersion diff --git a/report/src/main/java/org/hjug/refactorfirst/report/CsvReport.java b/report/src/main/java/org/hjug/refactorfirst/report/CsvReport.java index 756bcb2f..29320725 100644 --- a/report/src/main/java/org/hjug/refactorfirst/report/CsvReport.java +++ b/report/src/main/java/org/hjug/refactorfirst/report/CsvReport.java @@ -83,15 +83,14 @@ public void execute( } // actual calcualte - CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(); + CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(projectBaseDir); try { - costBenefitCalculator.runPmdAnalysis(projectBaseDir); + costBenefitCalculator.runPmdAnalysis(); } catch (IOException e) { log.error("Error running PMD analysis."); throw new RuntimeException(e); } - List rankedDisharmonies = - costBenefitCalculator.calculateGodClassCostBenefitValues(projectBaseDir); + List rankedDisharmonies = costBenefitCalculator.calculateGodClassCostBenefitValues(); rankedDisharmonies.sort(Comparator.comparing(RankedDisharmony::getPriority)); diff --git a/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java b/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java index 76a2ece7..3bdd5742 100644 --- a/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java +++ b/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java @@ -98,7 +98,7 @@ public void execute( printTitle(projectName, projectVersion, stringBuilder); printHead(stringBuilder); printBreadcrumbs(stringBuilder); - printProjectHeader(projectName, projectVersion, stringBuilder, formatter); + printProjectHeader(projectName, projectVersion, stringBuilder); GitLogReader gitLogReader = new GitLogReader(); String projectBaseDir; @@ -142,18 +142,16 @@ public void execute( return; } - CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(); + CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(projectBaseDir); try { - costBenefitCalculator.runPmdAnalysis(projectBaseDir); + costBenefitCalculator.runPmdAnalysis(); } catch (IOException e) { log.error("Error running PMD analysis."); throw new RuntimeException(e); } - List rankedGodClassDisharmonies = - costBenefitCalculator.calculateGodClassCostBenefitValues(projectBaseDir); + List rankedGodClassDisharmonies = costBenefitCalculator.calculateGodClassCostBenefitValues(); - List rankedCBODisharmonies = - costBenefitCalculator.calculateCBOCostBenefitValues(projectBaseDir); + List rankedCBODisharmonies = costBenefitCalculator.calculateCBOCostBenefitValues(); if (rankedGodClassDisharmonies.isEmpty() && rankedCBODisharmonies.isEmpty()) { stringBuilder @@ -288,6 +286,7 @@ public void execute( } stringBuilder.append(""); + printProjectFooter(stringBuilder, formatter); stringBuilder.append(THE_END); log.debug(stringBuilder.toString()); @@ -323,29 +322,20 @@ public void printHead(StringBuilder stringBuilder) { public void printBreadcrumbs(StringBuilder stringBuilder) { stringBuilder.append(" \n" + "
\n" - + "
\n" + /*+ "
\n" + "
\n" - + "
\n" + + "
\n"*/ + "
\n" + "
\n" + "
"); } - public void printProjectHeader( - String projectName, String projectVersion, StringBuilder stringBuilder, DateTimeFormatter formatter) { - stringBuilder - .append("Last Published: ") - .append(formatter.format(Instant.now())) - .append(""); - stringBuilder - .append(" Version: ") - .append(projectVersion) - .append(""); + public void printProjectHeader(String projectName, String projectVersion, StringBuilder stringBuilder) { stringBuilder.append("
\n" + "
\n" - + "
\n" + /* + "
\n" + "
\n" - + "
\n" + + "
\n"*/ + "
\n" + "
\n" + "
"); @@ -360,6 +350,15 @@ public void printProjectHeader( .append("\n"); } + public void printProjectFooter(StringBuilder stringBuilder, DateTimeFormatter formatter) { + stringBuilder + .append("
\n" + "
\n" + "
\n") + .append("Last Published: ") + .append(formatter.format(Instant.now())) + .append("
\n" + "
\n" + "
\n") + .append("
"); + } + void renderGithubButtons(StringBuilder stringBuilder) { // empty on purpose } diff --git a/report/src/main/java/org/hjug/refactorfirst/report/json/JsonReportExecutor.java b/report/src/main/java/org/hjug/refactorfirst/report/json/JsonReportExecutor.java index e9a0cea0..cf552fc8 100644 --- a/report/src/main/java/org/hjug/refactorfirst/report/json/JsonReportExecutor.java +++ b/report/src/main/java/org/hjug/refactorfirst/report/json/JsonReportExecutor.java @@ -31,15 +31,14 @@ public void execute(File baseDir, String outputDirectory) { projectBaseDir = Paths.get("").toAbsolutePath().toString(); } - final CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(); + final CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator(projectBaseDir); try { - costBenefitCalculator.runPmdAnalysis(projectBaseDir); + costBenefitCalculator.runPmdAnalysis(); } catch (IOException e) { log.error("Error running PMD analysis."); throw new RuntimeException(e); } - final List rankedDisharmonies = - costBenefitCalculator.calculateGodClassCostBenefitValues(projectBaseDir); + final List rankedDisharmonies = costBenefitCalculator.calculateGodClassCostBenefitValues(); final List disharmonyEntries = rankedDisharmonies.stream() .map(JsonReportDisharmonyEntry::fromRankedDisharmony) .collect(Collectors.toList());