Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Separate change propagation from VirtualModel #501

Merged
merged 44 commits into from
Mar 28, 2022
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
bc30ddf
Decouple transitive change propagation determination from domains
HeikoKlare Feb 28, 2022
1c2f4c2
Improve naming of methods for domain retrieval from repository
HeikoKlare Feb 28, 2022
46d4ff2
Make VitruviusChange provide the affected EObjects' metamodel ns URIs
HeikoKlare Feb 28, 2022
32be968
Add functionality to retrieve change propagation specification by NS URI
HeikoKlare Feb 28, 2022
6e1eafb
Make change propagator independent from Vitruv domains
HeikoKlare Feb 28, 2022
028cf4d
Separate model repository required by ChangePropagator from VirtualModel
HeikoKlare Mar 1, 2022
6418798
Refactor ChangePropagator and separate it from VirtualModel
HeikoKlare Mar 1, 2022
51f5048
Make transformations register their metamodels explicitly
HeikoKlare Mar 1, 2022
45b8400
Make change recording independent from Vitruv domains
HeikoKlare Mar 1, 2022
2e60046
Remove necessity of Commonalities tests to register metamodels
HeikoKlare Mar 1, 2022
8687ba8
Make change propagation specifications use NS URIs instead of domains
HeikoKlare Mar 1, 2022
b932756
Fix indentation
HeikoKlare Mar 7, 2022
e70d313
Provide functionality for retrieving domain for NS URI
HeikoKlare Mar 8, 2022
4729579
Simplify domain retrieval for namespace URI
HeikoKlare Mar 10, 2022
1fa68a9
Improve formatting and documentation
HeikoKlare Mar 10, 2022
a54cf9d
Simplify domain retrieval in application tests
HeikoKlare Mar 10, 2022
39a8227
Directly gather namespace URIs of affected packages
HeikoKlare Mar 11, 2022
e0a6192
Add documentation for ChangeInPropagation
HeikoKlare Mar 11, 2022
26ad9c3
Add documentation for ChangePropagationSpecification
HeikoKlare Mar 11, 2022
299e539
fixed typo in documentation
Mar 11, 2022
94d7262
Merge branch 'master' into vsumm-independent-change-propagation
HeikoKlare Mar 18, 2022
e4dbec3
Adapt Commonalities change propagation specification generation to URIs
HeikoKlare Mar 21, 2022
f608453
Merge branch 'master' into vsumm-independent-change-propagation
HeikoKlare Mar 21, 2022
fc936ef
Remove faulty subnamespace URIs in generate Reactions artifacts
HeikoKlare Mar 21, 2022
c90494a
Remove obsolete feature for metamodel initialization in Reactions
HeikoKlare Mar 21, 2022
bd79896
Merge branch 'master' into vsumm-independent-change-propagation
HeikoKlare Mar 21, 2022
87a82c8
Remove obsolete combined change propagation specification
HeikoKlare Mar 23, 2022
261b0ef
Encapsulate namespace URIs for change propagation in explicit metamodel
HeikoKlare Mar 23, 2022
e879f4b
Remove obsolete feature in genmodel
HeikoKlare Mar 23, 2022
4fad0ef
Fix equals comparison in Metamodel class
HeikoKlare Mar 23, 2022
85f03da
Improve initialization of metamodel
HeikoKlare Mar 23, 2022
4b44b39
Make metamodel class final
HeikoKlare Mar 23, 2022
2ddb582
Move metamodel class to change plugin
HeikoKlare Mar 23, 2022
30da620
Make VitruviusChange provide metamodel of affected objects
HeikoKlare Mar 23, 2022
3c99ad0
Correct finding relevant change propagation specifications for metamodel
HeikoKlare Mar 25, 2022
a93a5e5
Rename Metamodel to MetamodelDescriptor
HeikoKlare Mar 25, 2022
9a0e61e
Correct capitalization of URI
HeikoKlare Mar 25, 2022
d186f81
Explicitly generate unique metamodel descriptor for TransactionalChange
HeikoKlare Mar 25, 2022
5478d5b
Improve documentation of changes
HeikoKlare Mar 28, 2022
e767053
Correct documentation
HeikoKlare Mar 28, 2022
91cdb9d
Fix faulty overriden method in CompositeChange
HeikoKlare Mar 28, 2022
35e4b24
Improve documentation
HeikoKlare Mar 28, 2022
853f024
Fix typo in documentation
HeikoKlare Mar 28, 2022
18fdc73
fixed documentation
Mar 28, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import tools.vitruv.dsls.reactions.builder.FluentReactionsSegmentBuilder
import tools.vitruv.framework.domains.VitruvDomainProviderRegistry

import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.*
import static extension tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateModelConstants.*
import tools.vitruv.dsls.commonalities.generator.GenerationContext

/**
Expand All @@ -39,7 +40,7 @@ class ReactionsGenerator implements SubGenerator {
@Inject MatchParticipationReactionsBuilder.Factory matchParticipationReactionsBuilder
@Inject MatchParticipationReferencesReactionsBuilder.Factory matchParticipationReferencesReactionsBuilder
@Inject ParticipationAttributeChangeReactionsBuilder.Factory participationAttributeChangeReactionsBuilder

override beforeGenerate() {
// Prepare the Reactions language:
if (isNewResourceSet) {
Expand Down Expand Up @@ -124,17 +125,19 @@ class ReactionsGenerator implements SubGenerator {
}

private def generateCommonalityFromParticipationSegment(Participation participation) {
val segment = create.reactionsSegment('''«commonality.name»From«participation.name»''')
.inReactionToChangesIn(participation.domain.vitruvDomain)
.executeActionsIn(commonalityFile.concept.name)
val segment = create.reactionsSegment('''«commonality.name»From«participation.name»''') //
.inReactionToChangesIn(participation.domain.vitruvDomain) //
.executeActionsIn(commonalityFile.concept.name) //
.withInitializedMetamodel(commonality.concept.intermediateMetamodelPackageClassName.qualifiedName)
participation.generateParticipationChangeReactions(segment)
return segment
}

private def generateCommonalityToParticipationSegment(Participation participation) {
val segment = create.reactionsSegment('''«commonality.name»To«participation.name»''')
.inReactionToChangesIn(commonalityFile.concept.vitruvDomain)
.executeActionsIn(participation.domain.vitruvDomain)
val segment = create.reactionsSegment('''«commonality.name»To«participation.name»''') //
.inReactionToChangesIn(commonalityFile.concept.vitruvDomain) //
.executeActionsIn(participation.domain.vitruvDomain) //
.withInitializedMetamodel(commonality.concept.intermediateMetamodelPackageClassName.qualifiedName)
JanWittler marked this conversation as resolved.
Show resolved Hide resolved
participation.generateCommonalityChangeReactions(segment)
return segment
}
Expand All @@ -160,8 +163,8 @@ class ReactionsGenerator implements SubGenerator {
private def void generateReactionsForCommonalityAttributeChange(Participation targetParticipation,
FluentReactionsSegmentBuilder segment) {
commonality.attributes.forEach [ attribute |
commonalityAttributeChangeReactionsBuilder.createFor(attribute, targetParticipation)
.generateReactions(segment)
commonalityAttributeChangeReactionsBuilder.createFor(attribute, targetParticipation).
generateReactions(segment)
]
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
eType="#//Reaction" containment="true" eOpposite="#//Reaction/reactionsSegment"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="routines" upperBound="-1"
eType="#//Routine" containment="true" eOpposite="#//Routine/reactionsSegment"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="additionalInitializedMetamodelPackageQualifiedClassNames"
upperBound="-1" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
JanWittler marked this conversation as resolved.
Show resolved Hide resolved
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ReactionsImport">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="routinesOnly" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TopLevelElements.ecore#//ReactionsSegment/reactionsImports"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TopLevelElements.ecore#//ReactionsSegment/reactions"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TopLevelElements.ecore#//ReactionsSegment/routines"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute TopLevelElements.ecore#//ReactionsSegment/additionalInitializedMetamodelPackageQualifiedClassNames"/>
HeikoKlare marked this conversation as resolved.
Show resolved Hide resolved
</genClasses>
<genClasses ecoreClass="TopLevelElements.ecore#//ReactionsImport">
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute TopLevelElements.ecore#//ReactionsImport/routinesOnly"/>
Expand All @@ -34,7 +35,6 @@
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TopLevelElements.ecore#//Reaction/callRoutine"/>
<genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference TopLevelElements.ecore#//Reaction/reactionsSegment"/>
</genClasses>
<genClasses ecoreClass="TopLevelElements.ecore#//ReactionRoutineCall"/>
<genClasses ecoreClass="TopLevelElements.ecore#//Trigger">
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TopLevelElements.ecore#//Trigger/precondition"/>
</genClasses>
Expand Down Expand Up @@ -66,14 +66,12 @@
<genClasses ecoreClass="TopLevelElements.ecore#//CodeBlock">
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TopLevelElements.ecore#//CodeBlock/code"/>
</genClasses>
<genClasses ecoreClass="TopLevelElements.ecore#//RoutineCallBlock"/>
<genClasses ecoreClass="TopLevelElements.ecore#//NamedMetaclassReference">
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute TopLevelElements.ecore#//NamedMetaclassReference/name"/>
</genClasses>
<genClasses ecoreClass="TopLevelElements.ecore#//PreconditionCodeBlock"/>
<genClasses ecoreClass="TopLevelElements.ecore#//NamedJavaElementReference">
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute TopLevelElements.ecore#//NamedJavaElementReference/name"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TopLevelElements.ecore#//NamedJavaElementReference/type"/>
</genClasses>
<genClasses ecoreClass="TopLevelElements.ecore#//RoutineCallBlock"/>
<genClasses ecoreClass="TopLevelElements.ecore#//ReactionRoutineCall"/>
</genPackages>
</genmodel:GenModel>
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder {

override protected attachmentPreparation() {
super.attachmentPreparation()
checkState(segment.routines.size + segment.reactions.size + segment.reactionsImports.size > 0,
'''Neither routines, nor reactions, nor imports were added to the reaction segment «segment.name»!''')
checkState(segment.routines.size + segment.reactions.size + segment.reactionsImports.size >
0, '''Neither routines, nor reactions, nor imports were added to the reaction segment «segment.name»!''')
}

static class ReactionsSegmentSourceBuilder {
Expand Down Expand Up @@ -103,13 +103,18 @@ class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder {
}
}

def withInitializedMetamodel(String metamodelPackageClassQualfiedName) {
segment.additionalInitializedMetamodelPackageQualifiedClassNames += metamodelPackageClassQualfiedName
this
}

def operator_add(FluentReactionBuilder[] reactionBuilders) {
reactionBuilders.forEach [this += it]
reactionBuilders.forEach[this += it]
this
}

def operator_add(FluentRoutineBuilder[] routineBuilders) {
routineBuilders.forEach [this += it]
routineBuilders.forEach[this += it]
this
}

Expand All @@ -124,10 +129,11 @@ class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder {
def operator_add(FluentReactionBuilder reactionBuilder) {
checkNotYetAttached()
if (reactionBuilder.segmentBuilder !== this) {
checkArgument(reactionBuilder.segmentBuilder === null, '''The «reactionBuilder
» has already been added to the «reactionBuilder.segmentBuilder»''')
checkArgument(!segment.reactions.exists[it.name == reactionBuilder.reaction.name],
'''The «this» already contains a reaction with name '«reactionBuilder.reaction.name»'!''')
checkArgument(reactionBuilder.segmentBuilder ===
null, '''The «reactionBuilder» has already been added to the «reactionBuilder.segmentBuilder»''')
checkArgument(
!segment.reactions.
exists[it.name == reactionBuilder.reaction.name], '''The «this» already contains a reaction with name '«reactionBuilder.reaction.name»'!''')
segment.reactions += reactionBuilder.reaction
reactionBuilder.segmentBuilder = this
childBuilders += reactionBuilder
Expand All @@ -138,10 +144,11 @@ class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder {
def operator_add(FluentRoutineBuilder routineBuilder) {
checkNotYetAttached()
if (routineBuilder.segmentBuilder !== this) {
checkArgument(routineBuilder.segmentBuilder === null, '''The «routineBuilder
» has already been added to the «routineBuilder.segmentBuilder»''')
checkArgument(!segment.routines.exists[it.name == routineBuilder.routine.name],
'''The «this» already contains a routine with name '«routineBuilder.routine.name»'!''')
checkArgument(routineBuilder.segmentBuilder ===
null, '''The «routineBuilder» has already been added to the «routineBuilder.segmentBuilder»''')
checkArgument(
!segment.routines.
exists[it.name == routineBuilder.routine.name], '''The «this» already contains a routine with name '«routineBuilder.routine.name»'!''')
segment.routines += routineBuilder.routine
routineBuilder.segmentBuilder = this
childBuilders += routineBuilder
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package tools.vitruv.dsls.reactions.codegen.classgenerators

import java.util.ArrayList
import org.eclipse.emf.ecore.impl.EPackageImpl
import org.eclipse.xtext.common.types.JvmGenericType
import org.eclipse.xtext.common.types.JvmVisibility
import tools.vitruv.dsls.reactions.codegen.typesbuilder.TypesBuilderExtensionProvider
Expand All @@ -14,17 +16,18 @@ import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsElem
class ChangePropagationSpecificationClassGenerator extends ClassGenerator {
final ReactionsSegment reactionsSegment;
var JvmGenericType generatedClass;

new(ReactionsSegment reactionsSegment, TypesBuilderExtensionProvider typesBuilderExtensionProvider) {
super(typesBuilderExtensionProvider)
if (!reactionsSegment.isReferenceable) {
throw new IllegalArgumentException("incomplete");
}
this.reactionsSegment = reactionsSegment;
}

override generateEmptyClass() {
generatedClass = reactionsSegment.toClass(reactionsSegment.changePropagationSpecificationClassNameGenerator.qualifiedName) [
generatedClass = reactionsSegment.toClass(
reactionsSegment.changePropagationSpecificationClassNameGenerator.qualifiedName) [
visibility = JvmVisibility.PUBLIC;
];
}
Expand All @@ -42,10 +45,21 @@ class ChangePropagationSpecificationClassGenerator extends ClassGenerator {
// register executor as change processor:
members += reactionsSegment.toMethod("setup", typeRef(Void.TYPE)) [
visibility = JvmVisibility.PROTECTED;
val metamodelPackageClassQualifiedNames = new ArrayList
metamodelPackageClassQualifiedNames +=
#[reactionsSegment.fromDomain.domainForReference.metamodelRootPackage.class,
reactionsSegment.toDomain.domainForReference.metamodelRootPackage.class].filter [
it !== EPackageImpl
].map[name]
metamodelPackageClassQualifiedNames +=
reactionsSegment.additionalInitializedMetamodelPackageQualifiedClassNames
body = '''
«FOR metamodelPackageClassQualifiedName : metamodelPackageClassQualifiedNames»org.eclipse.emf.ecore.EPackage.Registry.INSTANCE.putIfAbsent(«
metamodelPackageClassQualifiedName».eNS_URI, «metamodelPackageClassQualifiedName».eINSTANCE);
«ENDFOR»
this.addChangeMainprocessor(new «reactionsSegment.executorClassNameGenerator.qualifiedName»());
'''
]
]
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ import tools.vitruv.framework.propagation.impl.CompositeChangePropagationSpecifi
* To add further change processors extend the implementing class and override the setup method.
*/
abstract class AbstractReactionsChangePropagationSpecification extends CompositeChangePropagationSpecification {

new(VitruvDomain sourceDomain, VitruvDomain targetDomain) {
super(sourceDomain, targetDomain);
super(sourceDomain.nsUris, targetDomain.nsUris);
this.setup();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ abstract class AbstractReactionsExecutor extends AbstractChangePropagationSpecif
List<IReactionRealization> reactions;

new(VitruvDomain sourceDomain, VitruvDomain targetDomain) {
super(sourceDomain, targetDomain);
super(sourceDomain.nsUris, targetDomain.nsUris);
this.reactions = newArrayList;
this.routinesFacadesProvider = this.createRoutinesFacadesProvider();
this.setup();
Expand All @@ -37,7 +37,7 @@ abstract class AbstractReactionsExecutor extends AbstractChangePropagationSpecif

override propagateChange(EChange change, CorrespondenceModel correspondenceModel,
ResourceAccess resourceAccess) {
LOGGER.trace("Call relevant reactions from " + sourceDomain.name + " to " + targetDomain.name);
LOGGER.trace("Call relevant reactions from " + sourceMetamodelRootNsUris + " to " + targetMetamodelRootNsUris);
for (reaction : reactions) {
LOGGER.trace("Calling reaction: " + reaction.class.simpleName + " with change: " + change);
val executionState = new ReactionExecutionState(userInteractor, correspondenceModel, resourceAccess, this);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ interface VitruviusChange {
* change or if this change was not resolved yet.
*/
def Set<URI> getChangedURIs()

/**
* Returns the namespace URIs of the metamodel packages of the metamodel elements whose instances have been
* modified in this change. These elements are the {@link EObject}s returned by {@link getAffectedEObjects}.
*/
def Set<String> getAffectedEObjectsMetamodelRootNsUris()
JanWittler marked this conversation as resolved.
Show resolved Hide resolved
JanWittler marked this conversation as resolved.
Show resolved Hide resolved

/**
* Returns all user interactions performed during application of this change and performing consistency preservation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import tools.vitruv.framework.change.description.CompositeChange
import tools.vitruv.framework.change.description.VitruviusChange
import static extension edu.kit.ipd.sdq.commons.util.java.lang.IterableUtil.*
import java.util.LinkedHashSet
import java.util.Set
import java.util.HashSet

abstract class AbstractCompositeChangeImpl<C extends VitruviusChange> implements CompositeChange<C> {
List<C> changes
Expand All @@ -24,6 +26,10 @@ abstract class AbstractCompositeChangeImpl<C extends VitruviusChange> implements
override getChangedURIs() {
changes.flatMapFixedTo(new LinkedHashSet) [changedURIs]
}

override Set<String> getAffectedEObjectsMetamodelRootNsUris() {
changes.flatMapFixedTo(new HashSet) [affectedEObjectsMetamodelRootNsUris]
}

override getEChanges() {
return changes.flatMapFixed [EChanges]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ import tools.vitruv.framework.change.description.TransactionalChange
import java.util.Collections
import org.eclipse.emf.ecore.resource.ResourceSet
import tools.vitruv.framework.change.echange.id.IdResolver
import java.util.HashSet
import static com.google.common.base.Preconditions.checkState

class TransactionalChangeImpl implements TransactionalChange {
var List<? extends EChange> eChanges
Expand Down Expand Up @@ -63,6 +65,21 @@ class TransactionalChangeImpl implements TransactionalChange {
override getChangedURIs() {
eChanges.map[changedURI].filterNull.toSet
}

override Set<String> getAffectedEObjectsMetamodelRootNsUris() {
val namespaceUrisOfChangedPackages = affectedEObjects.fold(new HashSet<String>) [ namespaceUrisOfAffectedPackages, changedObject |
var currentPackage = changedObject.eClass.EPackage
while (currentPackage.ESuperPackage !== null)
currentPackage = currentPackage.ESuperPackage
if (currentPackage !== null) {
namespaceUrisOfAffectedPackages += currentPackage.nsURI
}
namespaceUrisOfAffectedPackages
]
checkState(!namespaceUrisOfChangedPackages.empty, "Cannot identify the packages of this change:%s%s",
System.lineSeparator, this)
return namespaceUrisOfChangedPackages
}

override resolveAndApply(ResourceSet resourceSet) {
val idResolver = IdResolver.create(resourceSet)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import java.lang.annotation.Target
import java.lang.annotation.Retention
import edu.kit.ipd.sdq.activextendannotations.Lazy
import static extension edu.kit.ipd.sdq.commons.util.java.lang.IterableUtil.*
import java.util.Set

/**
* Registry of all {@linkplain VitruvDomainProvider DomainProviders} known to
Expand Down Expand Up @@ -107,6 +108,11 @@ final class VitruvDomainProviderRegistry {
return potentialDomainProviders.get(0);
}


def static Set<VitruvDomain> findDomainsForMetamodelRootNsUri(String nsUri) {
return allDomainProviders.map[domain].filter [it.nsUris.contains(nsUri)].toSet
}

/**
* Retrieves all providers for domain from the extensions registered to the VitruvDomain
* extension point.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,7 @@ public interface VitruvDomainRepository extends Iterable<VitruvDomain> {

VitruvDomain getDomain(EObject object);

VitruvDomain getDomain(String fileExtension);
VitruvDomain getDomainForFileExtension(String fileExtension);

VitruvDomain getDomainForNsUri(String nsUri);
JanWittler marked this conversation as resolved.
Show resolved Hide resolved
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,14 @@ public VitruvDomainRepositoryImpl(Iterable<VitruvDomain> domains) {
}

@Override
public VitruvDomain getDomain(final String fileExtension) {
public VitruvDomain getDomainForFileExtension(final String fileExtension) {
return this.fileExtension2Domain.get(fileExtension);
}

@Override
public VitruvDomain getDomainForNsUri(final String nsUri) {
return this.nsUri2Domain.get(nsUri);
}

@Override
public Iterator<VitruvDomain> iterator() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ Require-Bundle: org.apache.log4j,
tools.vitruv.framework.correspondence;visibility:=reexport,
tools.vitruv.framework.userinteraction;visibility:=reexport,
tools.vitruv.framework.change;visibility:=reexport,
tools.vitruv.framework.domains,
tools.vitruv.framework.util
Export-Package: tools.vitruv.framework.propagation,
tools.vitruv.framework.propagation.impl
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package tools.vitruv.framework.propagation

import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
import tools.vitruv.framework.change.description.TransactionalChange
import org.eclipse.xtend.lib.annotations.Accessors

/**
* Encapsulates a change that emerged from change propagation together
* with the information whether this change shall be further propagated,
* i.e., whether it should be used as an input for further change
* propagation specifications or not.
*/
@FinalFieldsConstructor
class ChangeInPropagation {
@Accessors(PUBLIC_GETTER)
val TransactionalChange change
@Accessors(PUBLIC_GETTER)
val Boolean shouldBeFurtherPropagated
}
JanWittler marked this conversation as resolved.
Show resolved Hide resolved
Loading