Skip to content

Commit 98813b9

Browse files
committed
ST6RI-926 Extract SysML logic into standalone runtime modules
Split model-independent SysML logic out of org.omg.sysml into the new org.omg.sysml.logic and org.omg.sysml.logic.bundle modules, move the delegate/adapter/expression utility code there, and update bundle/build wiring to use explicit logic dependencies. Add standalone bootstrap support for library resolution and EMF delegate registration without requiring Eclipse/Xtext startup, together with plain-EMF regression coverage and supporting Javadoc updates. Signed-off-by: Axel RICHARD <axel.richard@obeo.fr>
1 parent 4a471d8 commit 98813b9

657 files changed

Lines changed: 1560 additions & 591 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

org.omg.kerml.xpect.tests/.classpath

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
</attributes>
77
</classpathentry>
88
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
9+
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml.model"/>
10+
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml.logic"/>
911
<classpathentry kind="src" path="src">
1012
<attributes>
1113
<attribute name="test" value="true"/>

org.omg.kerml.xpect.tests/META-INF/MANIFEST.MF

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Require-Bundle: org.eclipse.core.runtime,
1212
org.eclipse.xtext.xbase;bundle-version="2.9.2",
1313
org.eclipse.xtext.ui.shared;bundle-version="2.14.0",
1414
org.omg.sysml;bundle-version="0.59.0",
15+
org.omg.sysml.logic.bundle;bundle-version="0.59.0",
1516
org.omg.kerml.xtext;bundle-version="0.59.0",
1617
org.omg.kerml.xtext.ui;bundle-version="0.59.0",
1718
org.aopalliance;bundle-version="1.0.0"

org.omg.kerml.xtext.ui/.classpath

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
</classpathentry>
1111
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
1212
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml.model"/>
13+
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml.logic"/>
1314
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml"/>
1415
<classpathentry kind="output" path="target/classes"/>
1516
</classpath>

org.omg.kerml.xtext.ui/META-INF/MANIFEST.MF

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Require-Bundle: org.omg.kerml.xtext,
2020
org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
2121
org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional,
2222
org.omg.sysml.model.bundle;bundle-version="0.59.0",
23+
org.omg.sysml.logic.bundle;bundle-version="0.59.0",
2324
org.omg.sysml;bundle-version="0.59.0",
2425
org.omg.kerml.expressions.xtext;bundle-version="0.59.0",
2526
org.omg.kerml.expressions.xtext.ide;bundle-version="0.59.0",

org.omg.kerml.xtext/.classpath

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
</classpathentry>
1111
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
1212
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml.model"/>
13+
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml.logic"/>
1314
<classpathentry combineaccessrules="false" kind="src" path="/org.omg.sysml"/>
1415
<classpathentry kind="output" path="target/classes"/>
1516
</classpath>

org.omg.kerml.xtext/META-INF/MANIFEST.MF

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Require-Bundle: org.eclipse.xtext,
1414
org.eclipse.xtend.lib;bundle-version="2.14.0",
1515
org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
1616
org.omg.sysml.model.bundle;bundle-version="0.59.0",
17+
org.omg.sysml.logic.bundle;bundle-version="0.59.0",
1718
org.omg.sysml;bundle-version="0.59.0",
1819
org.eclipse.uml2.uml,
1920
org.eclipse.uml2.uml.resources,

org.omg.kerml.xtext/src/org/omg/kerml/xtext/KerMLRuntimeModule.xtend

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.eclipse.xtext.naming.IQualifiedNameConverter
1010
import org.eclipse.xtext.naming.IQualifiedNameProvider
1111
import org.eclipse.xtext.resource.XtextResource
1212
import org.eclipse.xtext.scoping.IGlobalScopeProvider
13+
import org.eclipse.xtext.resource.IResourceServiceProvider
1314
import org.eclipse.xtext.validation.CompositeEValidator
1415
import org.eclipse.xtext.validation.IResourceValidator
1516
import org.omg.kerml.xtext.library.KerMLLibraryProvider
@@ -20,17 +21,40 @@ import org.omg.kerml.xtext.naming.KerMLQualifiedNameProvider
2021
import org.omg.kerml.xtext.scoping.KerMLGlobalScopeProvider
2122
import org.omg.kerml.xtext.scoping.KerMLLinker
2223
import org.omg.kerml.xtext.validation.KerMLResourceValidator
23-
import org.omg.sysml.lang.sysml.util.IModelLibraryProvider
24+
import org.omg.sysml.logic.api.IModelLibraryProvider
2425
import org.omg.kerml.xtext.library.ILibraryIndexProvider
2526
import org.omg.kerml.xtext.library.PrecalculatedLibraryIndexProvider
2627
import com.google.inject.Provides
2728
import org.eclipse.xtext.conversion.IValueConverterService
2829
import org.omg.kerml.xtext.conversion.KerMLValueConverterService
30+
import org.omg.sysml.util.SysMLLibraryUtil
2931

3032
/**
3133
* Use this class to register components to be used at runtime / without the Equinox extension registry.
3234
*/
3335
class KerMLRuntimeModule extends AbstractKerMLRuntimeModule {
36+
37+
/**
38+
* Installs the library-provider lookup used by {@link SysMLLibraryUtil} for
39+
* the KerML Xtext runtime.
40+
*
41+
* <p>The lookup resolves the {@link IModelLibraryProvider} from the
42+
* {@link IResourceServiceProvider} associated with the current resource URI so
43+
* library element resolution can use the KerML runtime's injector-backed
44+
* services from static utility code.
45+
*/
46+
new() {
47+
SysMLLibraryUtil.setProviderLookup([
48+
resource |
49+
try {
50+
val serviceProvider = IResourceServiceProvider.Registry.INSTANCE.getResourceServiceProvider(resource?.URI)
51+
if (serviceProvider === null) null else serviceProvider.get(IModelLibraryProvider)
52+
} catch (Exception e) {
53+
System.out.println("[SysMLLibraryUtil] Cannot get library provider: " + e)
54+
null
55+
}
56+
])
57+
}
3458

3559
override Class<? extends IValueConverterService> bindIValueConverterService() {
3660
return KerMLValueConverterService;

org.omg.kerml.xtext/src/org/omg/kerml/xtext/KerMLStandaloneSetup.xtend

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@
33
*/
44
package org.omg.kerml.xtext
55

6-
import org.eclipse.emf.ecore.EStructuralFeature
7-
import org.omg.sysml.delegate.setting.DerivedPropertySettingDelegateFactory;
8-
import org.omg.sysml.delegate.invocation.OperationInvocationDelegateFactory;
96
import com.google.inject.Injector
10-
import org.eclipse.emf.ecore.EOperation
7+
import org.omg.sysml.logic.SysMLLogicStandaloneSetup
118

129
/**
1310
* Initialization support for running Xtext languages without Equinox extension registry.
@@ -19,10 +16,7 @@ class KerMLStandaloneSetup extends KerMLStandaloneSetupGenerated {
1916
}
2017

2118
override Injector createInjectorAndDoEMFRegistration() {
22-
EStructuralFeature.Internal.SettingDelegate.Factory.Registry.INSTANCE.
23-
put(DerivedPropertySettingDelegateFactory.SYSML_ANNOTATION, new DerivedPropertySettingDelegateFactory());
24-
EOperation.Internal.InvocationDelegate.Factory.Registry.INSTANCE.
25-
put(OperationInvocationDelegateFactory.SYSML_ANNOTATION, new OperationInvocationDelegateFactory());
19+
SysMLLogicStandaloneSetup.doSetup()
2620
return super.createInjectorAndDoEMFRegistration();
2721
}
2822
}

org.omg.kerml.xtext/src/org/omg/kerml/xtext/library/KerMLLibraryProvider.xtend

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import com.google.inject.Singleton
3030
import org.eclipse.xtext.naming.IQualifiedNameConverter
3131
import org.omg.sysml.lang.sysml.Element
3232
import org.eclipse.emf.ecore.util.EcoreUtil
33-
import org.omg.sysml.lang.sysml.util.IModelLibraryProvider
33+
import org.omg.sysml.logic.api.IModelLibraryProvider
3434
import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider
3535
import org.omg.sysml.lang.sysml.SysMLPackage
3636

@@ -55,4 +55,4 @@ class KerMLLibraryProvider implements IModelLibraryProvider {
5555
}
5656
}
5757

58-
}
58+
}

org.omg.kerml.xtext/src/org/omg/kerml/xtext/scoping/KerMLScope.xtend

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,14 @@ import org.omg.sysml.lang.sysml.OwningMembership
5151
import org.omg.sysml.lang.sysml.NamespaceImport
5252
import org.omg.sysml.lang.sysml.MembershipImport
5353
import org.omg.sysml.lang.sysml.SysMLPackage
54-
import org.omg.sysml.lang.sysml.util.ISysMLScope
5554
import com.google.inject.Inject
5655
import org.eclipse.xtext.naming.IQualifiedNameConverter
5756
import org.eclipse.emf.ecore.util.EcoreUtil
5857
import org.omg.sysml.util.NamespaceUtil
5958
import org.omg.kerml.xtext.naming.QualifiedNameUtil
6059
import org.omg.sysml.lang.sysml.Redefinition
6160

62-
class KerMLScope extends AbstractScope implements ISysMLScope {
61+
class KerMLScope extends AbstractScope {
6362

6463
@Inject
6564
IQualifiedNameConverter qualifiedNameConverter
@@ -163,7 +162,7 @@ class KerMLScope extends AbstractScope implements ISysMLScope {
163162
!resolveInScope(QualifiedName.create(input.name.firstSegment), true).isEmpty()
164163
}
165164

166-
override getElement(String name) {
165+
def getElement(String name) {
167166
var obj = EcoreUtil.resolve(getSingleElement(qualifiedNameConverter.toQualifiedName(name)).EObjectOrProxy, element)
168167
if (obj instanceof Element) obj else null
169168
}

0 commit comments

Comments
 (0)