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 39 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
@@ -1,16 +1,16 @@
package tools.vitruv.dsls.commonalities.generator.changepropagationspecification

import edu.kit.ipd.sdq.activextendannotations.Utility
import tools.vitruv.framework.domains.VitruvDomain
import org.eclipse.emf.ecore.EPackage

@Utility
class ChangePropagationSpecificationConstants {
static val CHANGE_PROPAGATION_PACKAGE_NAME = 'tools.vitruv.commonalities'
static val CHANGE_PROPAGATION_PROVIDER_NAME = "CommonalitiesChangePropagationSpecificationProvider"

@Pure
static def getChangePropagationSpecificationName(VitruvDomain sourceDomain, VitruvDomain targetDomain) {
sourceDomain.name.toFirstUpper + "To" + targetDomain.name.toFirstUpper + "ChangePropagationSpecification"
static def getChangePropagationSpecificationName(EPackage sourceMetamodel, EPackage targetMetamodel) {
sourceMetamodel.name.toFirstUpper + "To" + targetMetamodel.name.toFirstUpper + "ChangePropagationSpecification"
}

@Pure
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.google.inject.Inject
import com.google.inject.Provider
import java.util.Arrays
import java.util.Set
import org.eclipse.emf.ecore.EPackage
import org.eclipse.xtend2.lib.StringConcatenationClient
import org.eclipse.xtext.common.types.JvmDeclaredType
import org.eclipse.xtext.common.types.JvmGenericType
Expand All @@ -20,16 +21,16 @@ import tools.vitruv.framework.propagation.impl.CompositeChangePropagationSpecifi

import static extension tools.vitruv.dsls.commonalities.generator.changepropagationspecification.ChangePropagationSpecificationConstants.*
import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.*
import static extension tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateModelConstants.getIntermediateMetamodelPackageClassName
import tools.vitruv.framework.propagation.ChangePropagationSpecification
import java.util.HashSet
import static extension tools.vitruv.dsls.commonalities.generator.reactions.ReactionsGeneratorConventions.*
import tools.vitruv.dsls.reactions.language.toplevelelements.TopLevelElementsFactory
import tools.vitruv.dsls.reactions.codegen.helper.ClassNamesGenerators
import tools.vitruv.framework.domains.VitruvDomain
import tools.vitruv.framework.domains.VitruvDomainProviderRegistry
import tools.vitruv.framework.domains.VitruvDomainProvider
import static com.google.common.base.Preconditions.checkState
import org.eclipse.emf.common.util.URI
import tools.vitruv.dsls.commonalities.language.Concept
import tools.vitruv.framework.change.MetamodelDescriptor

class ChangePropagationSpecificationGenerator implements SubGenerator {
@Inject extension GenerationContext generationContext
Expand All @@ -39,7 +40,7 @@ class ChangePropagationSpecificationGenerator implements SubGenerator {

override beforeGenerate() {
if (isNewResourceSet) {
resourceSet.resources += domainPairsForChangePropagation.map [
resourceSet.resources += metamodelPairsForChangePropagation.map [
getChangePropagationSpecificationName(key, value).newResource
]
resourceSet.resources += newResource(changePropagationSpecificationProviderName)
Expand All @@ -48,33 +49,36 @@ class ChangePropagationSpecificationGenerator implements SubGenerator {

override generate() {
if (isNewResourceSet) {
val changePropagationSpecifications = domainPairsForChangePropagation.map [ fromToDomain |
generateChangePropagationSpecification(fromToDomain.key, fromToDomain.value)
val changePropagationSpecifications = metamodelPairsForChangePropagation.map [ fromToMetamodel |
generateChangePropagationSpecification(fromToMetamodel.key, fromToMetamodel.value)
]
changePropagationSpecifications.forEach[generateType()]
changePropagationSpecifications.generateChangePropagationSpecificationsProvider().generateType()
}
}

private def JvmGenericType generateChangePropagationSpecification(VitruvDomain fromDomain, VitruvDomain toDomain) {
private def JvmGenericType generateChangePropagationSpecification(EPackage fromNamespace, EPackage toNamespace) {
val extension typeReferenceBuilder = typeReferenceFactory.create(resourceSet)
val dummyReactionsSegments = getReactionsSegmentNames(fromDomain, toDomain).map [ segmentName |
val intermediateMetamodelPackageQualifiedName = getConcept(fromNamespace, toNamespace).
intermediateMetamodelPackageClassName.qualifiedName
val dummyReactionsSegments = getReactionsSegmentNames(fromNamespace, toNamespace).map [ segmentName |
TopLevelElementsFactory.eINSTANCE.createReactionsSegment() => [name = segmentName]
]
TypesFactory.eINSTANCE.createJvmGenericType => [
simpleName = getChangePropagationSpecificationName(fromDomain, toDomain)
simpleName = getChangePropagationSpecificationName(fromNamespace, toNamespace)
packageName = changePropagationSpecificationPackageName
superTypes += CompositeChangePropagationSpecification.typeRef
visibility = JvmVisibility.PUBLIC
members += Arrays.asList(
TypesFactory.eINSTANCE.createJvmConstructor => [
visibility = JvmVisibility.PUBLIC
body = '''
super(new «fromDomain.domainProvider.canonicalNameForReference»().getDomain(),
new «toDomain.domainProvider.canonicalNameForReference»().getDomain());
«FOR reactionsSegment : dummyReactionsSegments»addChangeMainprocessor(new «
super(«MetamodelDescriptor».with("«fromNamespace.nsURI»"),
«MetamodelDescriptor».with("«toNamespace.nsURI»"));
«FOR reactionsSegment : dummyReactionsSegments»addChangeMainprocessor(new «
ClassNamesGenerators.getChangePropagationSpecificationClassNameGenerator(reactionsSegment).qualifiedName»());
«ENDFOR»'''
«ENDFOR»
«EPackage».Registry.INSTANCE.putIfAbsent(«intermediateMetamodelPackageQualifiedName».eNS_URI, «intermediateMetamodelPackageQualifiedName».eINSTANCE);'''
]
)
]
Expand Down Expand Up @@ -119,27 +123,28 @@ class ChangePropagationSpecificationGenerator implements SubGenerator {
delegate.doGenerate(typeResource, fsa)
}

private def Set<Pair<? extends VitruvDomain, ? extends VitruvDomain>> getDomainPairsForChangePropagation() {
private def Set<Pair<EPackage, EPackage>> getMetamodelPairsForChangePropagation() {
commonalityFiles.flatMap [ file |
file.commonality.participations.flatMap [
val firstPackage = domain.vitruvDomain
val secondPackage = file.concept.vitruvDomain
val firstPackage = domain.vitruvDomain.metamodelRootPackage
val secondPackage = file.concept.vitruvDomain.metamodelRootPackage
#[firstPackage -> secondPackage, secondPackage -> firstPackage]
]
].toSet
}

private def Set<String> getReactionsSegmentNames(VitruvDomain fromDomain, VitruvDomain toDomain) {

private def Set<String> getReactionsSegmentNames(EPackage fromMetamodel, EPackage toMetamodel) {
commonalityFiles.filter [ file |
val commonalityDomain = file.concept.vitruvDomain
return fromDomain == commonalityDomain || toDomain == commonalityDomain
val commonalityPackage = file.concept.vitruvDomain.metamodelRootPackage
return fromMetamodel == commonalityPackage || toMetamodel == commonalityPackage
].flatMap [ file |
file.commonality.participations.map [
val participationDomain = domain.vitruvDomain
return switch (participationDomain) {
case fromDomain:
val participationPackage = domain.vitruvDomain.metamodelRootPackage
return switch (participationPackage) {
case fromMetamodel:
getReactionsSegmentFromParticipationToCommonalityName(file.commonality, it)
case toDomain:
case toMetamodel:
getReactionsSegmentFromCommonalityToParticipationName(file.commonality, it)
default:
null
Expand All @@ -148,18 +153,19 @@ class ChangePropagationSpecificationGenerator implements SubGenerator {
].toSet
}

private def Concept getConcept(EPackage fromMetamodel, EPackage toMetamodel) {
for (file : commonalityFiles) {
if (fromMetamodel == file.concept.vitruvDomain.metamodelRootPackage ||
toMetamodel == file.concept.vitruvDomain.metamodelRootPackage) {
return file.concept
}
}
}

private def getCommonalityFiles() {
resourceSet.resources.map[optionalContainedCommonalityFile].filterNull
}

private def VitruvDomainProvider<?> getDomainProvider(VitruvDomain domain) {
if (VitruvDomainProviderRegistry.hasDomainProvider(domain.name)) {
VitruvDomainProviderRegistry.getDomainProvider(domain.name)
} else {
domain.name.vitruvDomain.provider
}
}


private static def setBody(JvmMember member, StringConcatenationClient body) {
member.eAdapters += new CompilationTemplateAdapter() => [compilationTemplate = body]
}
Expand All @@ -183,7 +189,7 @@ class ChangePropagationSpecificationGenerator implements SubGenerator {

private def ensureHasTrailingSlash(URI uri) {
val uriString = uri.toString
if (!uriString.endsWith("/")) {
if (uri.file && !uriString.endsWith("/")) {
URI.createURI(uriString + "/")
} else {
uri
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,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 @@ -34,7 +34,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 +65,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 @@ -104,12 +104,12 @@ class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder {
}

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 +124,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 +139,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,19 @@ 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]
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 @@ -2,15 +2,15 @@ package tools.vitruv.extensions.dslsruntime.reactions

import tools.vitruv.framework.domains.VitruvDomain
import tools.vitruv.framework.propagation.impl.CompositeChangePropagationSpecification
import tools.vitruv.framework.change.MetamodelDescriptor

/**
* A {@link CompositeChangePropagationSpecification} that contains the reactions change processor.
* 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(MetamodelDescriptor.of(sourceDomain.metamodelRootPackage), MetamodelDescriptor.of(targetDomain.metamodelRootPackage));
this.setup();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import tools.vitruv.framework.domains.VitruvDomain
import tools.vitruv.framework.propagation.ResourceAccess
import java.util.List
import tools.vitruv.framework.propagation.impl.AbstractChangePropagationSpecification
import tools.vitruv.framework.change.MetamodelDescriptor

abstract class AbstractReactionsExecutor extends AbstractChangePropagationSpecification {
static val LOGGER = Logger.getLogger(AbstractReactionsExecutor);
Expand All @@ -17,7 +18,7 @@ abstract class AbstractReactionsExecutor extends AbstractChangePropagationSpecif
List<IReactionRealization> reactions;

new(VitruvDomain sourceDomain, VitruvDomain targetDomain) {
super(sourceDomain, targetDomain);
super(MetamodelDescriptor.of(sourceDomain.metamodelRootPackage), MetamodelDescriptor.of(targetDomain.metamodelRootPackage));
this.reactions = newArrayList;
this.routinesFacadesProvider = this.createRoutinesFacadesProvider();
this.setup();
Expand All @@ -37,7 +38,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 " + sourceMetamodelDescriptor + " to " + targetMetamodelDescriptor);
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 @@ -12,7 +12,8 @@ Require-Bundle: org.apache.log4j,
tools.vitruv.framework.change.interaction;visibility:=reexport,
tools.vitruv.framework.util,
edu.kit.ipd.sdq.activextendannotations
Export-Package: tools.vitruv.framework.change.description,
Export-Package: tools.vitruv.framework.change,
tools.vitruv.framework.change.description,
tools.vitruv.framework.change.propagation,
tools.vitruv.framework.change.recording
Bundle-Vendor: vitruv.tools
Loading