Skip to content

Commit

Permalink
Initial version of type safe TLs (WIP)
Browse files Browse the repository at this point in the history
  • Loading branch information
dfuchss committed Mar 26, 2024
1 parent a35ccfb commit 244b783
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<SamCodeTraceLink> samCodeTraceLinks = Lists.mutable.empty();
private MutableList<SadCodeTraceLink> transitiveTraceLinks = Lists.mutable.empty();
private MutableList<TraceLink<ArchitectureEntity, CodeCompilationUnit>> samCodeTraceLinks = Lists.mutable.empty();
private MutableList<TraceLink<SentenceEntity, CodeCompilationUnit>> transitiveTraceLinks = Lists.mutable.empty();

public CodeTraceabilityStateImpl() {
super();
}

@Override
public boolean addSamCodeTraceLink(SamCodeTraceLink traceLink) {
public boolean addSamCodeTraceLink(TraceLink<ArchitectureEntity, CodeCompilationUnit> traceLink) {
return this.samCodeTraceLinks.add(traceLink);
}

@Override
public boolean addSamCodeTraceLinks(Collection<SamCodeTraceLink> traceLinks) {
public boolean addSamCodeTraceLinks(Collection<TraceLink<ArchitectureEntity, CodeCompilationUnit>> traceLinks) {
return this.samCodeTraceLinks.addAll(traceLinks);
}

@Override
public ImmutableSet<SamCodeTraceLink> getSamCodeTraceLinks() {
public ImmutableSet<TraceLink<ArchitectureEntity, CodeCompilationUnit>> getSamCodeTraceLinks() {
return Sets.immutable.withAll(new LinkedHashSet<>(this.samCodeTraceLinks));
}

@Override
public boolean addSadCodeTraceLink(SadCodeTraceLink traceLink) {
public boolean addSadCodeTraceLink(TraceLink<SentenceEntity, CodeCompilationUnit> traceLink) {
return this.transitiveTraceLinks.add(traceLink);
}

@Override
public boolean addSadCodeTraceLinks(Collection<SadCodeTraceLink> traceLinks) {
public boolean addSadCodeTraceLinks(Collection<TraceLink<SentenceEntity, CodeCompilationUnit>> traceLinks) {
return this.transitiveTraceLinks.addAll(traceLinks);
}

@Override
public ImmutableSet<SadCodeTraceLink> getSadCodeTraceLinks() {
public ImmutableSet<TraceLink<SentenceEntity, CodeCompilationUnit>> getSadCodeTraceLinks() {
return this.transitiveTraceLinks.toImmutableSet();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -31,7 +32,7 @@ public ArchitectureLinkToCodeLinkTransformerInformant(DataRepository dataReposit

@Override
public void process() {
MutableSet<SadCodeTraceLink> sadCodeTracelinks = Sets.mutable.empty();
MutableSet<TraceLink<SentenceEntity, CodeCompilationUnit>> sadCodeTracelinks = Sets.mutable.empty();

ModelStates modelStatesData = DataRepositoryHelper.getModelStatesData(getDataRepository());
ConnectionStates connectionStates = DataRepositoryHelper.getConnectionStates(getDataRepository());
Expand All @@ -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));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,7 +29,7 @@ public TraceLinkCombiner(DataRepository dataRepository) {

@Override
public void process() {
MutableSet<SadCodeTraceLink> transitiveTraceLinks = Sets.mutable.empty();
MutableSet<TraceLink<SentenceEntity, CodeCompilationUnit>> transitiveTraceLinks = Sets.mutable.empty();
CodeTraceabilityState codeTraceabilityState = DataRepositoryHelper.getCodeTraceabilityState(getDataRepository());
ModelStates modelStatesData = DataRepositoryHelper.getModelStatesData(getDataRepository());
ConnectionStates connectionStates = DataRepositoryHelper.getConnectionStates(getDataRepository());
Expand All @@ -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<SadCodeTraceLink> combineToTransitiveTraceLinks(ImmutableSet<SadSamTraceLink> sadSamTraceLinks,
ImmutableSet<SamCodeTraceLink> samCodeTraceLinks) {
MutableSet<SadCodeTraceLink> transitiveTraceLinks = Sets.mutable.empty();
private ImmutableSet<TraceLink<SentenceEntity, CodeCompilationUnit>> combineToTransitiveTraceLinks(
ImmutableSet<TraceLink<SentenceEntity, ArchitectureEntity>> sadSamTraceLinks,
ImmutableSet<TraceLink<ArchitectureEntity, CodeCompilationUnit>> samCodeTraceLinks) {
MutableSet<TraceLink<SentenceEntity, CodeCompilationUnit>> 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)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Integer> sentencesWithoutTraceLinks = sentences.withoutAll(sentencesWithTraceLinks);

InconsistencyState inconsistencyState = inconsistencyStates.getInconsistencyState(metamodel);
Expand Down

0 comments on commit 244b783

Please sign in to comment.