diff --git a/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceCollector.java b/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceCollector.java index 05c9f13..8904cf6 100644 --- a/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceCollector.java +++ b/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceCollector.java @@ -201,19 +201,7 @@ public void onCompletingCompilation() { } if (createDotFile) { - if (!cycles.isEmpty()) { - for (Component.Builder component : builder.getComponents()) { - for (Cycle cycle : cycles) { - if (contains(cycle, component.getName())) { - for (IdentifiableComponent nodeInCycle : cycle.getNodes()) { - if (component.getReads().containsKey(nodeInCycle.getName())) { - component.addRead(nodeInCycle.getName(), ReadKind.CYCLE); - } - } - } - } - } - } + builder.updateFromCycles(cycles); serializer = new DotSerializer(); packageDependencies.serialize(serializer); @@ -231,16 +219,6 @@ public void onCompletingCompilation() { } } - private boolean contains(Cycle cycle, String name) { - for (IdentifiableComponent component : cycle.getNodes()) { - if (component.getName().equals(name)) { - return true; - } - } - - return false; - } - private boolean isWhitelistAllExternal() { return whitelistPatterns.contains(PackagePattern.ALL_EXTERNAL); } diff --git a/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceValidator.java b/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceValidator.java index 5ecf8c9..2383d71 100644 --- a/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceValidator.java +++ b/javac-plugin/src/main/java/org/moditect/deptective/internal/handler/PackageReferenceValidator.java @@ -190,19 +190,7 @@ public void onCompletingCompilation() { return; } - if (!cycles.isEmpty()) { - for (Component.Builder component : actualPackageDependencies.getComponents()) { - for (Cycle cycle : cycles) { - if (contains(cycle, component.getName())) { - for (IdentifiableComponent nodeInCycle : cycle.getNodes()) { - if (component.getReads().containsKey(nodeInCycle.getName())) { - component.addRead(nodeInCycle.getName(), ReadKind.CYCLE); - } - } - } - } - } - } + actualPackageDependencies.updateFromCycles(cycles); DotSerializer serializer = new DotSerializer(); actualPackageDependencies.build().serialize(serializer); @@ -219,16 +207,6 @@ public void onCompletingCompilation() { } } - private boolean contains(Cycle cycle, String name) { - for (IdentifiableComponent component : cycle.getNodes()) { - if (component.getName().equals(name)) { - return true; - } - } - - return false; - } - private boolean isIgnoredDependency(String referencedPackageName) { return "java.lang".equals(referencedPackageName) || allowedPackageDependencies.isWhitelisted(referencedPackageName) || diff --git a/javac-plugin/src/main/java/org/moditect/deptective/internal/model/PackageDependencies.java b/javac-plugin/src/main/java/org/moditect/deptective/internal/model/PackageDependencies.java index 23c3574..bbfb399 100644 --- a/javac-plugin/src/main/java/org/moditect/deptective/internal/model/PackageDependencies.java +++ b/javac-plugin/src/main/java/org/moditect/deptective/internal/model/PackageDependencies.java @@ -19,11 +19,13 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import org.moditect.deptective.internal.export.ModelSerializer; +import org.moditect.deptective.internal.graph.Cycle; public class PackageDependencies { @@ -79,6 +81,24 @@ public void addWhitelistedPackage(PackagePattern pattern) { public Iterable getComponents() { return componentsByName.values(); } + + public void updateFromCycles(List> cycles) { + for (Cycle cycle : cycles) { + for (IdentifiableComponent nodeInCycle : cycle.getNodes()) { + Component.Builder builder = componentsByName.get(nodeInCycle.name); + + if (builder == null) { + continue; + } + + for (IdentifiableComponent otherNodeInCycle : cycle.getNodes()) { + if (builder.getReads().containsKey(otherNodeInCycle.getName())) { + builder.addRead(otherNodeInCycle.getName(), ReadKind.CYCLE); + } + } + } + } + } } private final Components components;