diff --git a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/CodeTraceabilityStateImpl.java b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/CodeTraceabilityStateImpl.java index d1bb698..0bf6d09 100644 --- a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/CodeTraceabilityStateImpl.java +++ b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/CodeTraceabilityStateImpl.java @@ -10,48 +10,50 @@ import org.eclipse.collections.impl.factory.Sets; import edu.kit.kastel.mcse.ardoco.core.api.codetraceability.CodeTraceabilityState; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.SadCodeTraceLink; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.SamCodeTraceLink; +import edu.kit.kastel.mcse.ardoco.core.api.models.ArchitectureEntity; +import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.code.CodeCompilationUnit; +import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.TraceLink; +import edu.kit.kastel.mcse.ardoco.core.api.text.SentenceEntity; import edu.kit.kastel.mcse.ardoco.core.architecture.Deterministic; import edu.kit.kastel.mcse.ardoco.core.data.AbstractState; @Deterministic public class CodeTraceabilityStateImpl extends AbstractState implements CodeTraceabilityState { - private MutableList samCodeTraceLinks = Lists.mutable.empty(); - private MutableList transitiveTraceLinks = Lists.mutable.empty(); + private MutableList> samCodeTraceLinks = Lists.mutable.empty(); + private MutableList> transitiveTraceLinks = Lists.mutable.empty(); public CodeTraceabilityStateImpl() { super(); } @Override - public boolean addSamCodeTraceLink(SamCodeTraceLink traceLink) { + public boolean addSamCodeTraceLink(TraceLink traceLink) { return this.samCodeTraceLinks.add(traceLink); } @Override - public boolean addSamCodeTraceLinks(Collection traceLinks) { + public boolean addSamCodeTraceLinks(Collection> traceLinks) { return this.samCodeTraceLinks.addAll(traceLinks); } @Override - public ImmutableSet getSamCodeTraceLinks() { + public ImmutableSet> getSamCodeTraceLinks() { return Sets.immutable.withAll(new LinkedHashSet<>(this.samCodeTraceLinks)); } @Override - public boolean addSadCodeTraceLink(SadCodeTraceLink traceLink) { + public boolean addSadCodeTraceLink(TraceLink traceLink) { return this.transitiveTraceLinks.add(traceLink); } @Override - public boolean addSadCodeTraceLinks(Collection traceLinks) { + public boolean addSadCodeTraceLinks(Collection> traceLinks) { return this.transitiveTraceLinks.addAll(traceLinks); } @Override - public ImmutableSet getSadCodeTraceLinks() { + public ImmutableSet> getSadCodeTraceLinks() { return this.transitiveTraceLinks.toImmutableSet(); } diff --git a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArCoTLInformant.java b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArCoTLInformant.java index 6ed9946..c204c97 100644 --- a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArCoTLInformant.java +++ b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArCoTLInformant.java @@ -2,17 +2,18 @@ package edu.kit.kastel.mcse.ardoco.tlr.codetraceability.informants; import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.SortedMap; import edu.kit.kastel.mcse.ardoco.core.api.models.ArchitectureModelType; import edu.kit.kastel.mcse.ardoco.core.api.models.CodeModelType; import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.ArchitectureModel; import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.CodeModel; -import edu.kit.kastel.mcse.ardoco.tlr.codetraceability.informants.arcotl.TraceLinkGenerator; -import edu.kit.kastel.mcse.ardoco.tlr.codetraceability.informants.arcotl.computation.computationtree.Node; import edu.kit.kastel.mcse.ardoco.core.common.util.DataRepositoryHelper; import edu.kit.kastel.mcse.ardoco.core.data.DataRepository; import edu.kit.kastel.mcse.ardoco.core.pipeline.agent.Informant; +import edu.kit.kastel.mcse.ardoco.tlr.codetraceability.informants.arcotl.TraceLinkGenerator; +import edu.kit.kastel.mcse.ardoco.tlr.codetraceability.informants.arcotl.computation.computationtree.Node; public class ArCoTLInformant extends Informant { public ArCoTLInformant(DataRepository dataRepository) { @@ -37,7 +38,7 @@ public void process() { Node root = TraceLinkGenerator.getRoot(); //TODO maybe add preprocessing var traceLinks = TraceLinkGenerator.generateTraceLinks(root, architectureModel, codeModel); - samCodeTraceabilityState.addSamCodeTraceLinks(traceLinks); + samCodeTraceabilityState.addSamCodeTraceLinks(new LinkedHashSet<>(traceLinks)); } private static boolean isACodeModel(String modelId) { diff --git a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArchitectureLinkToCodeLinkTransformerInformant.java b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArchitectureLinkToCodeLinkTransformerInformant.java index 51306d8..4fe1acd 100644 --- a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArchitectureLinkToCodeLinkTransformerInformant.java +++ b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/ArchitectureLinkToCodeLinkTransformerInformant.java @@ -14,13 +14,14 @@ import edu.kit.kastel.mcse.ardoco.core.api.models.ModelStates; import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.CodeModel; import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.code.CodeCompilationUnit; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.EndpointTuple; import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.SadCodeTraceLink; +import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.TraceLink; +import edu.kit.kastel.mcse.ardoco.core.api.text.SentenceEntity; import edu.kit.kastel.mcse.ardoco.core.architecture.Deterministic; -import edu.kit.kastel.mcse.ardoco.tlr.codetraceability.CodeTraceabilityStateImpl; import edu.kit.kastel.mcse.ardoco.core.common.util.DataRepositoryHelper; import edu.kit.kastel.mcse.ardoco.core.data.DataRepository; import edu.kit.kastel.mcse.ardoco.core.pipeline.agent.Informant; +import edu.kit.kastel.mcse.ardoco.tlr.codetraceability.CodeTraceabilityStateImpl; @Deterministic public class ArchitectureLinkToCodeLinkTransformerInformant extends Informant { @@ -31,7 +32,7 @@ public ArchitectureLinkToCodeLinkTransformerInformant(DataRepository dataReposit @Override public void process() { - MutableSet sadCodeTracelinks = Sets.mutable.empty(); + MutableSet> sadCodeTracelinks = Sets.mutable.empty(); ModelStates modelStatesData = DataRepositoryHelper.getModelStatesData(getDataRepository()); ConnectionStates connectionStates = DataRepositoryHelper.getConnectionStates(getDataRepository()); @@ -42,10 +43,10 @@ public void process() { CodeModel codeModel = findCodeModel(modelStatesData); for (var traceLink : connectionStates.getConnectionState(Metamodel.CODE).getTraceLinks()) { - var modelElement = traceLink.getModelElementUid(); + var modelElement = traceLink.getSecondEndpoint().getId(); var mentionedCodeModelElements = findMentionedCodeModelElementsById(modelElement, codeModel); for (var mid : mentionedCodeModelElements) { - sadCodeTracelinks.add(new SadCodeTraceLink(new EndpointTuple(traceLink.getEndpointTuple().firstEndpoint(), mid))); + sadCodeTracelinks.add(new SadCodeTraceLink(traceLink.getFirstEndpoint(), mid)); } } diff --git a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/TraceLinkCombiner.java b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/TraceLinkCombiner.java index a9cc097..31757d8 100644 --- a/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/TraceLinkCombiner.java +++ b/stages-tlr/code-traceability/src/main/java/edu/kit/kastel/mcse/ardoco/tlr/codetraceability/informants/TraceLinkCombiner.java @@ -9,11 +9,12 @@ import edu.kit.kastel.mcse.ardoco.core.api.codetraceability.CodeTraceabilityState; import edu.kit.kastel.mcse.ardoco.core.api.connectiongenerator.ConnectionStates; +import edu.kit.kastel.mcse.ardoco.core.api.models.ArchitectureEntity; import edu.kit.kastel.mcse.ardoco.core.api.models.ModelStates; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.SadCodeTraceLink; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.SadSamTraceLink; -import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.SamCodeTraceLink; +import edu.kit.kastel.mcse.ardoco.core.api.models.arcotl.code.CodeCompilationUnit; +import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.TraceLink; import edu.kit.kastel.mcse.ardoco.core.api.models.tracelinks.TransitiveTraceLink; +import edu.kit.kastel.mcse.ardoco.core.api.text.SentenceEntity; import edu.kit.kastel.mcse.ardoco.core.architecture.Deterministic; import edu.kit.kastel.mcse.ardoco.core.common.util.DataRepositoryHelper; import edu.kit.kastel.mcse.ardoco.core.data.DataRepository; @@ -28,7 +29,7 @@ public TraceLinkCombiner(DataRepository dataRepository) { @Override public void process() { - MutableSet transitiveTraceLinks = Sets.mutable.empty(); + MutableSet> transitiveTraceLinks = Sets.mutable.empty(); CodeTraceabilityState codeTraceabilityState = DataRepositoryHelper.getCodeTraceabilityState(getDataRepository()); ModelStates modelStatesData = DataRepositoryHelper.getModelStatesData(getDataRepository()); ConnectionStates connectionStates = DataRepositoryHelper.getConnectionStates(getDataRepository()); @@ -42,18 +43,19 @@ public void process() { var connectionState = connectionStates.getConnectionState(metamodel); var sadSamTraceLinks = connectionState.getTraceLinks(); - var combinedLinks = combineToTransitiveTraceLinks(sadSamTraceLinks, samCodeTraceLinks); + var combinedLinks = combineToTransitiveTraceLinks(Sets.immutable.withAll(sadSamTraceLinks), samCodeTraceLinks); transitiveTraceLinks.addAll(combinedLinks.toList()); } codeTraceabilityState.addSadCodeTraceLinks(transitiveTraceLinks); } - private ImmutableSet combineToTransitiveTraceLinks(ImmutableSet sadSamTraceLinks, - ImmutableSet samCodeTraceLinks) { - MutableSet transitiveTraceLinks = Sets.mutable.empty(); + private ImmutableSet> combineToTransitiveTraceLinks( + ImmutableSet> sadSamTraceLinks, + ImmutableSet> samCodeTraceLinks) { + MutableSet> transitiveTraceLinks = Sets.mutable.empty(); for (var sadSamTraceLink : sadSamTraceLinks) { - String modelElementUid = sadSamTraceLink.getModelElementUid(); + String modelElementUid = sadSamTraceLink.getSecondEndpoint().getId(); for (var samCodeTraceLink : samCodeTraceLinks) { String samCodeTraceLinkModelElementId = samCodeTraceLink.getEndpointTuple().firstEndpoint().getId(); if (modelElementUid.equals(samCodeTraceLinkModelElementId)) { diff --git a/tests/integration-tests/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/eval/baseline/InconsistencyBaselineInformant.java b/tests/integration-tests/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/eval/baseline/InconsistencyBaselineInformant.java index d7080b0..0ea31a9 100644 --- a/tests/integration-tests/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/eval/baseline/InconsistencyBaselineInformant.java +++ b/tests/integration-tests/tests-inconsistency/src/test/java/edu/kit/kastel/mcse/ardoco/id/tests/eval/baseline/InconsistencyBaselineInformant.java @@ -40,7 +40,7 @@ public void process() { var modelState = modelStates.getModelExtractionState(model); Metamodel metamodel = modelState.getMetamodel(); var traceLinks = connectionStates.getConnectionState(metamodel).getTraceLinks(); - var sentencesWithTraceLinks = traceLinks.collect(SadSamTraceLink::getSentenceNumber).toSet(); + var sentencesWithTraceLinks = traceLinks.collect(tl -> tl.getFirstEndpoint().getSentence().getSentenceNumber()).toSet(); MutableSet sentencesWithoutTraceLinks = sentences.withoutAll(sentencesWithTraceLinks); InconsistencyState inconsistencyState = inconsistencyStates.getInconsistencyState(metamodel);