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

Make DSLs use metamodels instead of VitruvDomains #502

Merged
merged 26 commits into from
Apr 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
7e5f166
Remove domains from the Reactions language
HeikoKlare Mar 7, 2022
2211a1e
Remove domains from the Mappings language
HeikoKlare Mar 7, 2022
17e3653
Adapt Commnonalities language to Reactions not using domains
HeikoKlare Mar 7, 2022
84c84de
Rearrange features to separate changes from V-SUM
HeikoKlare Mar 8, 2022
329d0d1
Merge branch 'vsumm-independent-change-propagation' into remove-domai…
HeikoKlare Mar 23, 2022
4d409ad
Merge branch 'master' into remove-domains-from-dsls
HeikoKlare Mar 28, 2022
352b21d
Remove obsolete DSLs element DomainReference
HeikoKlare Mar 28, 2022
cd77b5d
Improve variable names
HeikoKlare Mar 28, 2022
d462dea
Remove obsolete logic for domain concepts in Commonalities
HeikoKlare Mar 28, 2022
b170699
Completely remove VitruvDomain from Reactions
HeikoKlare Mar 29, 2022
cd4bf26
Remove VitruvDomain from Commonalities language
HeikoKlare Mar 29, 2022
db251c0
Remove VitruvDomain from DSLs common projects
HeikoKlare Mar 29, 2022
93c92e6
Make ClassifierProvider handle non-found classifiers
HeikoKlare Mar 31, 2022
372bc6e
Make Commonalities explicitly reference used metamodels
HeikoKlare Mar 31, 2022
067c73f
Adapt Commonalities tests to explicitly import metamodels
HeikoKlare Mar 31, 2022
9c86b85
Remove obsolete lazy annotation
HeikoKlare Mar 31, 2022
e6cf843
Fix typo
HeikoKlare Mar 31, 2022
c08e38c
Readd validation for metamodel plugins being on classpath
HeikoKlare Apr 1, 2022
69165e3
Initialize metamodels when running Reactions language generator
HeikoKlare Apr 1, 2022
a0d2aaa
Remove outdated comments, unnecessary FQNs and correct formatting
HeikoKlare Apr 1, 2022
2364c15
Improve naming
HeikoKlare Apr 1, 2022
35bd707
Merge branch 'master' into remove-domains-from-dsls
HeikoKlare Apr 1, 2022
de12746
Reenable and reset Reactions test case to original version
HeikoKlare Apr 2, 2022
d97ed6c
Correct formatting
HeikoKlare Apr 11, 2022
4ade237
Remove obsolete null check in equals method
HeikoKlare Apr 11, 2022
1c04fda
Merge branch 'master' into remove-domains-from-dsls
HeikoKlare Apr 11, 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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ import "edu.kit.ipd.sdq.metamodels.persons" as persons
import "edu.kit.ipd.sdq.metamodels.families" as families

reactions: personsToFamilies
in reaction to changes in Persons
execute actions in Families
in reaction to changes in persons
execute actions in families

// =================================
// Creation/ deletion of a registers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import "edu.kit.ipd.sdq.metamodels.persons" as persons
import "edu.kit.ipd.sdq.metamodels.insurance" as insurance

reactions: insuranceToPersons
in reaction to changes in Insurance
execute actions in Persons
in reaction to changes in insurance
execute actions in persons

reaction CreatedInsuranceDatabase {
after element insurance::InsuranceDatabase created and inserted as root
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import "edu.kit.ipd.sdq.metamodels.persons" as persons
import "edu.kit.ipd.sdq.metamodels.insurance" as insurance

reactions: personsToInsurance
in reaction to changes in Persons
execute actions in Insurance
in reaction to changes in persons
execute actions in insurance

reaction CreatedPersonRegister {
after element persons::PersonRegister created and inserted as root
Expand Down
4 changes: 2 additions & 2 deletions bundles/dsls/tools.vitruv.dsls.common.ui/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ Require-Bundle: org.eclipse.xtend.lib,
org.eclipse.ui.ide,
org.eclipse.xtext.common.types,
edu.kit.ipd.sdq.activextendannotations,
tools.vitruv.dsls.common;visibility:=reexport
tools.vitruv.dsls.common;visibility:=reexport,
edu.kit.ipd.sdq.commons.util.eclipse
Export-Package: tools.vitruv.dsls.common.ui,
tools.vitruv.dsls.common.ui.elements,
tools.vitruv.dsls.common.ui.quickfix,
tools.vitruv.dsls.common.ui.validation
Bundle-Vendor: vitruv.tools

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import org.eclipse.xtext.validation.ValidationMessageAcceptor
import static extension tools.vitruv.dsls.common.ui.ProjectAccess.*
import org.eclipse.core.runtime.CoreException
import edu.kit.ipd.sdq.activextendannotations.Utility
import tools.vitruv.framework.domains.VitruvDomainProviderRegistry
import org.osgi.framework.FrameworkUtil
import org.eclipse.xtext.common.types.util.TypeReferences
import org.eclipse.emf.ecore.EPackage

@Utility
class ProjectValidation {
Expand Down Expand Up @@ -51,16 +51,15 @@ class ProjectValidation {
"The runtime bundle is not on the classpath")
}

def static checkDomainProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences,
String requiredDomainName, EObject referenceObject) {
checkDomainProjectIsOnClasspath(acceptor, typeReferences, requiredDomainName, referenceObject, null)
def static checkMetamodelProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences,
EPackage requiredPackage, EObject referenceObject) {
checkMetamodelProjectIsOnClasspath(acceptor, typeReferences, requiredPackage, referenceObject, null)
}

def static checkDomainProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences,
String requiredDomainName, EObject referenceObject, EStructuralFeature messageTargetFeature) {
val domainProviderClass = VitruvDomainProviderRegistry.getDomainProvider(requiredDomainName).class
checkOnClasspath(acceptor, typeReferences, domainProviderClass, referenceObject,
messageTargetFeature, '''«domainProviderClass.simpleName» is not on the classpath''')
def static checkMetamodelProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences,
EPackage requiredPackage, EObject referenceObject, EStructuralFeature messageTargetFeature) {
checkOnClasspath(acceptor, typeReferences, requiredPackage.class, referenceObject,
messageTargetFeature, '''The bundle providing EPackage "«requiredPackage.nsURI»" is not on the classpath''')
}

def private static checkOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences,
Expand Down
3 changes: 1 addition & 2 deletions bundles/dsls/tools.vitruv.dsls.common/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ Require-Bundle: org.eclipse.xtext,
org.eclipse.xtext.xbase,
org.eclipse.core.runtime,
org.eclipse.emf.ecore;visibility:=reexport,
edu.kit.ipd.sdq.activextendannotations,
tools.vitruv.framework.domains;visibility:=reexport
edu.kit.ipd.sdq.activextendannotations
Bundle-ActivationPolicy: lazy
Export-Package: tools.vitruv.dsls.common,
tools.vitruv.dsls.common.elements,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,4 @@
<eClassifiers xsi:type="ecore:EClass" name="MetaclassEReferenceReference" eSuperTypes="#//MetaclassReference">
<eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EReference"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="DomainReference">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="domain" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
</eClassifiers>
</ecore:EPackage>
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute CommonLanguageElements.ecore#//MetamodelImport/name"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute CommonLanguageElements.ecore#//MetamodelImport/useQualifiedNames"/>
</genClasses>
<genClasses ecoreClass="CommonLanguageElements.ecore#//NamedJavaElement">
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference CommonLanguageElements.ecore#//NamedJavaElement/type"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute CommonLanguageElements.ecore#//NamedJavaElement/name"/>
</genClasses>
<genClasses ecoreClass="CommonLanguageElements.ecore#//MetaclassReference">
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference CommonLanguageElements.ecore#//MetaclassReference/metamodel"/>
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference CommonLanguageElements.ecore#//MetaclassReference/metaclass"/>
Expand All @@ -33,14 +29,5 @@
<genClasses ecoreClass="CommonLanguageElements.ecore#//MetaclassEReferenceReference">
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference CommonLanguageElements.ecore#//MetaclassEReferenceReference/feature"/>
</genClasses>
<genClasses ecoreClass="CommonLanguageElements.ecore#//MetamodelReference">
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference CommonLanguageElements.ecore#//MetamodelReference/model"/>
</genClasses>
<genClasses ecoreClass="CommonLanguageElements.ecore#//DomainReference">
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute CommonLanguageElements.ecore#//DomainReference/domain"/>
</genClasses>
<genClasses ecoreClass="CommonLanguageElements.ecore#//MetamodelImportsContainer">
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference CommonLanguageElements.ecore#//MetamodelImportsContainer/metamodelImports"/>
</genClasses>
</genPackages>
</genmodel:GenModel>

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class DomainPrefixProposalFactory extends CommonalitiesLanguageProposalFactory {
@Inject PrefixMatcher.IgnoreCase ignoreCase

override apply(IEObjectDescription description) {
completionProposal(description.name.firstSegment + DOMAIN_METACLASS_SEPARATOR + '(')
completionProposal(description.name.firstSegment + METAMODEL_METACLASS_SEPARATOR + '(')
.appendText(description.name.firstSegment)
.withImageOf(description.EObjectOrProxy)
.usePrefixMatcher(ignoreCase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class QualifiedMetaclassProposalFactory extends CommonalitiesLanguageProposalFac
override apply(IEObjectDescription description) {
completionProposal(description.name)
.appendText(description.name.firstSegment)
.appendText(DOMAIN_METACLASS_SEPARATOR)
.appendText(METAMODEL_METACLASS_SEPARATOR)
.appendText(description.name.getSegment(1))
.withImageOf(description.EObjectOrProxy)
.usePrefixMatcher(metaclassPrefixMatcher)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class UnqualifiedMetaclassProposalFactory extends CommonalitiesLanguageProposalF
override apply(IEObjectDescription description) {
completionProposal(description.name.getSegment(1))
.appendInfoText(description.name.firstSegment)
.appendInfoText(DOMAIN_METACLASS_SEPARATOR)
.appendInfoText(METAMODEL_METACLASS_SEPARATOR)
.appendText(description.name.getSegment(1))
.withImageOf(description.EObjectOrProxy)
.usePrefixMatcher(ignoreCase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@ import tools.vitruv.dsls.commonalities.validation.CommonalitiesLanguageValidator
import org.eclipse.xtext.validation.Check
import tools.vitruv.dsls.commonalities.language.CommonalityFile
import static tools.vitruv.dsls.commonalities.language.LanguagePackage.Literals.*
import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.*
import tools.vitruv.dsls.common.ui.validation.ProjectValidation
import tools.vitruv.dsls.commonalities.language.Participation
import tools.vitruv.extensions.dslruntime.commonalities.marker.RuntimeProjectMarker
import tools.vitruv.dsls.common.elements.MetamodelImport

/**
* Validations that are only applicable when running in Eclipse.
Expand All @@ -19,12 +18,13 @@ class CommonalitiesLanguageEclipseValidator extends CommonalitiesLanguageValidat
ProjectValidation.checkRuntimeProjectIsOnClasspath(this, services.typeReferences, RuntimeProjectMarker,
commonalityFile, COMMONALITY_FILE__CONCEPT)
}

@Check(NORMAL)
def checkParticipationDomainOnClasspath(Participation participation) {
if (participation.domainName !== null && !participation.isCommonalityParticipation) {
ProjectValidation.checkDomainProjectIsOnClasspath(this, services.typeReferences, participation.domainName,
participation)
def checkMetamodelOnClasspath(MetamodelImport metamodelImport) {
if (metamodelImport.package !== null) {
ProjectValidation.checkMetamodelProjectIsOnClasspath(this, services.typeReferences, metamodelImport.package,
metamodelImport)
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ Export-Package: tools.vitruv.dsls.commonalities,
tools.vitruv.dsls.commonalities.conversion,
tools.vitruv.dsls.commonalities.export;x-internal:=true,
tools.vitruv.dsls.commonalities.generator,
tools.vitruv.dsls.commonalities.generator.domain,
tools.vitruv.dsls.commonalities.generator.helper,
tools.vitruv.dsls.commonalities.generator.intermediatemodel,
tools.vitruv.dsls.commonalities.generator.changepropagationspecification,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,11 @@
<eParameters name="eDataType" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EDataType"/>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="VitruviusDomain" eSuperTypes="#//Domain">
<eOperations name="forVitruvDomain" lowerBound="1" eType="#//VitruviusDomain">
<eParameters name="vitruvDomain" eType="#//FrameworkVitruvDomain"/>
<eClassifiers xsi:type="ecore:EClass" name="Metamodel" eSuperTypes="#//Domain">
<eOperations name="forEPackage" lowerBound="1" eType="#//Metamodel">
<eParameters name="ePackage" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EPackage"/>
</eOperations>
<eOperations name="withClassifierProvider" lowerBound="1" eType="#//VitruviusDomain">
<eOperations name="withClassifierProvider" lowerBound="1" eType="#//Metamodel">
<eParameters name="classifierProvider" eType="#//ClassifierProvider"/>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="metaclasses" ordered="false"
Expand All @@ -101,7 +101,6 @@
<eParameters name="metaclass" lowerBound="1" eType="#//Metaclass"/>
</eOperations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EDataType" name="FrameworkVitruvDomain" instanceClassName="tools.vitruv.framework.domains.VitruvDomain"/>
<eClassifiers xsi:type="ecore:EDataType" name="ClassifierProvider" instanceClassName="tools.vitruv.dsls.commonalities.language.elements.ClassifierProvider"/>
<eClassifiers xsi:type="ecore:EClass" name="MostSpecificType" eSuperTypes="#//Classifier"/>
<eClassifiers xsi:type="ecore:EClass" name="LeastSpecificType" eSuperTypes="#//Classifier"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/tools.vitruv.dsls.commonalities/src-gen" modelName="LanguageElements"
rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore"
containmentProxies="true" complianceLevel="8.0" copyrightFields="false" language=""
usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore"
classNamePattern="" operationReflection="true" importOrganizing="true">
usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore" classNamePattern=""
operationReflection="true" importOrganizing="true">
<foreignModel>LanguageElements.ecore</foreignModel>
<genPackages prefix="LanguageElements" basePackage="tools.vitruv.dsls.commonalities.language"
disposableProviderFactory="true" adapterFactory="false" ecorePackage="LanguageElements.ecore#/">
<genDataTypes ecoreDataType="LanguageElements.ecore#//FrameworkVitruvDomain"/>
<genDataTypes ecoreDataType="LanguageElements.ecore#//ClassifierProvider"/>
<genClasses image="false" ecoreClass="LanguageElements.ecore#//PackageLike"/>
<genClasses image="false" ecoreClass="LanguageElements.ecore#//ClassLike">
Expand Down Expand Up @@ -57,13 +56,13 @@
<genParameters ecoreParameter="LanguageElements.ecore#//EDataTypeClassifier/forEDataType/eDataType"/>
</genOperations>
</genClasses>
<genClasses ecoreClass="LanguageElements.ecore#//VitruviusDomain">
<genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference LanguageElements.ecore#//VitruviusDomain/metaclasses"/>
<genOperations ecoreOperation="LanguageElements.ecore#//VitruviusDomain/forVitruvDomain">
<genParameters ecoreParameter="LanguageElements.ecore#//VitruviusDomain/forVitruvDomain/vitruvDomain"/>
<genClasses ecoreClass="LanguageElements.ecore#//Metamodel">
<genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference LanguageElements.ecore#//Metamodel/metaclasses"/>
<genOperations ecoreOperation="LanguageElements.ecore#//Metamodel/forEPackage">
<genParameters ecoreParameter="LanguageElements.ecore#//Metamodel/forEPackage/ePackage"/>
</genOperations>
<genOperations ecoreOperation="LanguageElements.ecore#//VitruviusDomain/withClassifierProvider">
<genParameters ecoreParameter="LanguageElements.ecore#//VitruviusDomain/withClassifierProvider/classifierProvider"/>
<genOperations ecoreOperation="LanguageElements.ecore#//Metamodel/withClassifierProvider">
<genParameters ecoreParameter="LanguageElements.ecore#//Metamodel/withClassifierProvider/classifierProvider"/>
</genOperations>
</genClasses>
<genClasses ecoreClass="LanguageElements.ecore#//ResourceMetaclass">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ grammar tools.vitruv.dsls.commonalities.CommonalitiesLanguage

generate language "http://vitruv.tools/dsls/commonalities/language"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "http://vitruv.tools/dsls/common/elements" as common
import "http://vitruv.tools/dsls/commonalities/elements"
import "http://www.eclipse.org/xtext/common/JavaVMTypes" as jvmTypes

CommonalityFile:
(operatorImports+=OperatorImport)*
(metamodelImports+=MetamodelImport)*
concept=Concept
commonality=Commonality
;
Expand All @@ -17,6 +19,10 @@ OperatorImport:
'import' (importedNamespace=QualifiedOperatorName | importedNamespace=QualifiedOperatorWildCard)
;

MetamodelImport returns common::MetamodelImport:
'import' package=[ecore::EPackage|STRING] 'as' name=ValidID (useQualifiedNames?='using' 'qualified' 'names')?
;

Domain:
Concept
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import org.eclipse.xtext.conversion.IValueConverter
@Singleton
class QualifiedClassValueConverter implements IValueConverter<String> {

static val DELIMITER = QualifiedNameHelper.DOMAIN_METACLASS_SEPARATOR
static val DELIMITER = QualifiedNameHelper.METAMODEL_METACLASS_SEPARATOR
static val DOMAIN_NAME_RULE = 'DomainName'
static val UNQUALIFIED_CLASS_RULE = 'UnqualifiedClass'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.generator.IFileSystemAccess2
import org.eclipse.xtext.generator.IGenerator2
import org.eclipse.xtext.generator.IGeneratorContext
import tools.vitruv.dsls.commonalities.generator.domain.ConceptDomainGenerator
import tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateMetamodelCodeGenerator
import tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateMetamodelGenerator
import tools.vitruv.dsls.commonalities.generator.reactions.ReactionsGenerator
Expand All @@ -22,7 +21,6 @@ class CommonalitiesLanguageGenerator implements IGenerator2 {
@Inject Provider<IntermediateMetamodelGenerator> intermediateMetamodelGenerator
@Inject Provider<IntermediateMetamodelCodeGenerator> intermediateMetamodelCodeGenerator
@Inject Provider<ReactionsGenerator> reactionsGenerator
@Inject Provider<ConceptDomainGenerator> conceptDomainGenerator
@Inject Provider<ChangePropagationSpecificationGenerator> changePropagationSpecificationGenerator

val generationScopes = new HashMap<Resource, GenerationScope>()
Expand All @@ -31,7 +29,6 @@ class CommonalitiesLanguageGenerator implements IGenerator2 {
#[
intermediateMetamodelGenerator.get,
intermediateMetamodelCodeGenerator.get,
conceptDomainGenerator.get,
reactionsGenerator.get,
changePropagationSpecificationGenerator.get
]
Expand Down
Loading