Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
c1c9bad
Release 7.8.1 - Timing wird dynamisch bestimmt (#27), update nth stre…
adriancostin-sd Nov 4, 2025
2285737
Backporting typecheck3 to 7.8.x (#40)
justusrm Jan 9, 2026
6fb10d0
Backporting 6 CoCos (#43)
MKZaito Jan 12, 2026
b470d31
add CoCos to Checker (#44)
MKZaito Jan 15, 2026
e84c971
CoCos to default and version bump (#46)
MKZaito Jan 18, 2026
255df7b
Eps added to global scope (#47)
DovydasSkauranskas Jan 22, 2026
12e3e37
CoCo: Erkennung doppelt verwendeter Part-Namen (Backport) (#49)
MKZaito Feb 5, 2026
c590793
7.8.8: Fix for LanguageServer Listing Errors Multiple Times (Backport…
MKZaito Feb 10, 2026
d6ccd2c
7.8.9: Fix for CoCos Assuming Direction In Connection (Backport) (#54)
MKZaito Feb 10, 2026
23e9b26
#119 Added RequirementSubject2Variable symbol adapter (#56)
justusrm Feb 11, 2026
c7767a1
7.8.11: Added Requirements to CC-Language (#57)
justusrm Feb 11, 2026
60e528e
7.8.12: Possibility to configure which CoCos are run
mathias-pfeiffer Feb 11, 2026
f78d922
7.8.13: Added Quickfix for Duplicate Names in Subparts (#59)
MKZaito Feb 13, 2026
dfe9665
MCStructuralTypes wird im Grammar importiert (#62)
DovydasSkauranskas Feb 17, 2026
eb6e6e0
7.8.14: Allow Relativ ModelPaths and take current Workspace as Defaul…
MKZaito Feb 17, 2026
a993b49
7.8.15 Adapting CC-Requirement Adapter to work without sysml-ast refe…
justusrm Feb 24, 2026
1c3f2fc
7.8.16: old type check removed, new type check disabled
mathias-pfeiffer Feb 24, 2026
30b322a
7.8.17: COmplete refinements from Specialization too
mathias-pfeiffer Feb 24, 2026
128a010
7.8.18: Port-CoCos dont behave properly and try to access AST instead…
mathias-pfeiffer Feb 24, 2026
8cefc64
7.8.19: TypeVisitor für ConditionAndExpression2q
mathias-pfeiffer Mar 2, 2026
54e2767
7.8.20: Fixed Resolving for Relative ModelPaths (#27, upate mclsg_ver…
mathias-pfeiffer Mar 6, 2026
209cd00
7.8.21: TypeVisitor für ConditionalOrExpression2 (#70)
mathias-pfeiffer Mar 6, 2026
f601773
7.8.22: CoCo for AcceptAction in Event-Transitions
mathias-pfeiffer Mar 6, 2026
e617df1
In/accept dataport (#71)
JanaNefedova Mar 6, 2026
74c921f
Grammatik angepasst, damit 'metadata def delayed' erlaubt wird (#72)
JanaNefedova Mar 7, 2026
ed060ec
7.8.25: Implemented MildComponentSymbol.isHistoryBased()
mathias-pfeiffer Mar 8, 2026
0e5ed61
7.8.26: TypesCompleter für MCTuples (#73)
DovydasSkauranskas Mar 12, 2026
0a01502
#201 tsyn Flag von dem Part Def ablesen (#74)
DovydasSkauranskas Mar 16, 2026
b8db2b1
Version erhoeht (#76)
DovydasSkauranskas Mar 17, 2026
74293c8
7.8.28: Extending CC-Requirement (#79)
justusrm Mar 18, 2026
2dea298
7.8.29: Added new option for co co checker (#81)
MKZaito Mar 22, 2026
592b664
7.8.30 Extending PortUsageSymbol by hasCardinality flag (#84)
justusrm Mar 25, 2026
ec725b7
7.8.31 Extending CC-Requirement-Symbol by invariant and subject field…
justusrm Apr 1, 2026
bd5827e
7.8.32 Eps als Variable statt als Typ definiert (#88)
DovydasSkauranskas Apr 2, 2026
9606152
removing TC3 CoCos (#90)
MKZaito Apr 3, 2026
36cfc5e
Typ-Ableitung für SysMLSequenceExpression (Tupel) (#92)
DovydasSkauranskas Apr 8, 2026
3c12c20
7.8.34: Make Packages First-class Citizens in Scope Delegation (#97)
MKZaito Apr 16, 2026
84ba9e7
Refinement-Targets korrekt auflösen (#95)
JanaNefedova Apr 16, 2026
065830b
7.8.36: CoCo für Connections von Ports (#236)
marcelgruen7-art Apr 16, 2026
329c4c3
7.8.37 SysMLArtifactsScope is initialized by SysML-Imports (#100)
justusrm Apr 20, 2026
ced1622
Implement Imports for Type Symbols (#107)
justusrm Apr 22, 2026
a02f932
7.8.38 SysMLScopes resolving by imports for Functions and Variables (…
justusrm Apr 22, 2026
3d7ad5d
7.8.39 Corrected adaptedResolve for CC-Requirements in ISysMLScope (#…
justusrm Apr 24, 2026
5d577e4
ScalarValues-Importe werden im Symboltable unterstützt (#110)
JanaNefedova Apr 27, 2026
8c6a83c
Add typecheck test for SysML calc defs as function symbols (#99)
linggd Apr 27, 2026
edf21b9
7.8.39 Only resolve first symbol from enclosing scope, updated docs f…
justusrm Apr 29, 2026
5d21a42
Add CoCo to check number of direct return in CalcUsage (#112)
linggd Apr 29, 2026
f908bb0
treat calc def as function symbol
Apr 29, 2026
02ec57f
formatting
Apr 29, 2026
c493466
formatting again
Apr 29, 2026
812759a
formatting again2
Apr 29, 2026
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
10 changes: 7 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ subprojects {
group = 'de.monticore.lang.sysml_v2'

// Needs to be after java plugin
sourceCompatibility = "11"
sourceCompatibility = JavaVersion.VERSION_11

project.buildDir = "target"

Expand All @@ -19,8 +19,12 @@ subprojects {
}

// Java JDK Warning
if (JavaVersion.current() > sourceCompatibility) {
logger.warn("\u001B[33m Warning: You are currently using JDK Version " + JavaVersion.current() + ". " + "Higher JDK versions may cause compatibility problems. JDK 11 is recommended. \u001B[0m")
if (JavaVersion.current() > sourceCompatibility
&& JavaVersion.current() != JavaVersion.VERSION_17)
{
logger.warn("\u001B[33m Warning: You are currently using JDK Version " +
JavaVersion.current() + ". " + "Higher JDK versions may cause " +
"compatibility problems. JDK 11 or 17 is recommended. \u001B[0m")
}

// Use the same testing framework for all modules
Expand Down
18 changes: 18 additions & 0 deletions cc/src/main/grammars/de/monticore/lang/ComponentConnector.mc4
Original file line number Diff line number Diff line change
Expand Up @@ -156,4 +156,22 @@ component grammar ComponentConnector
transitions: Transition*
;

/**
* Requirements: Wir berücksichtigen primär die Namen der Requirements
*/
interface symbol Requirement =
name:Name
[isStateInvariant:"invariant"]?
subject:MildComponent
assumptions:Expression*
guarantee:Expression
;

symbolrule Requirement =
stateInvariant: boolean
subject:MildComponentSymbol
assumptions:Expression*
guarantee:Expression
;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package de.monticore.lang.componentconnector._symboltable;

import de.monticore.expressions.expressionsbasis._ast.ASTExpression;
import de.monticore.symboltable.serialization.json.JsonObject;

import java.util.List;

public class RequirementSymbolDeSer extends RequirementSymbolDeSerTOP {

@Override
protected void serializeSubject(MildComponentSymbol subject,
ComponentConnectorSymbols2Json s2j) {
// not implemented
}

@Override
protected void serializeAssumptions(List<ASTExpression> assumptions,
ComponentConnectorSymbols2Json s2j) {
// not implemented
}

@Override
protected void serializeGuarantee(ASTExpression guarantee,
ComponentConnectorSymbols2Json s2j) {
// not implemented
}

@Override
protected MildComponentSymbol deserializeSubject(JsonObject symbolJson) {
// not implemented
return null;
}

@Override
protected List<ASTExpression> deserializeAssumptions(JsonObject symbolJson) {
// not implemented
return List.of();
}

@Override
protected ASTExpression deserializeGuarantee(JsonObject symbolJson) {
// not implemented
return null;
}
}
89 changes: 89 additions & 0 deletions doc/ImporteUndResolvingDocs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Dokumentation: Import-Mechanismus und Namensauflösung
In der MontiCore-basierten Implementierung von SysMLv2 ist die effiziente
Auflösung von Symbolen über Modellgrenzen hinweg entscheidend. Da Modelle in der
Regel in Pakete unterteilt sind, benötigt der `SysML-Scope` einen Mechanismus,
um lokale Referenzen auf externe Symbole (Cross-References) auch auf Basis der
im Scope vorhandenen Importen korrekt zuzuordnen.

## 1. SysMLv2 Import-Typen
SysMLv2 definiert verschiedene Strategien, um Elemente aus anderen Namensräumen
verfügbar zu machen. In unserer aktuellen Implementierung werden diese wie folgt
auf die MontiCore-Symboltabelle abgebildet:

### Normaler Import
Ein expliziter Import eines einzelnen Elements.
* **Syntax:** `import MyPackage::MyPart;`
* **Verhalten:** Nur das spezifische Symbol `MyPart` wird im lokalen Scope unter \
seinem einfachen Namen bekannt gemacht.

### Wildcard Import (*)
Importiert alle direkt in einem Paket enthaltenen Elemente.
* **Syntax:** `import MyPackage::*;`
* **Verhalten:** Alle Symbole, die sich unmittelbar in `MyPackage` befinden, \
können ohne Qualifizierung angesprochen werden.

### Rekursiver Import (**)
Importiert die gesamte Hierarchie eines Pakets inklusive aller Unterpakete.
* **Syntax:** `import MyPackage::**;`
* **Aktueller Status:** In der aktuellen Version werden rekursive Imports
* **wie Wildcard-Imports (*) behandelt**. Das bedeutet, dass nur die direkte \
Ebene unterhalb von `MyPackage` aufgelöst wird. Eine tiefe Suche durch alle \
Unterpakete findet derzeit nicht statt, da dies eine Anpassung des globalen \
Resolve-Algorithmus erfordert.

### Wildcard & Rekursiv
Wildcard und Rekursive Imports können ebenfalls gemischt werden. Jedes Sub-Paket
von MyPackage wird hierbei rekursiv importiert.
* **Syntax**: `import MyPackage::*::**`
* **Aktueller Status**: Sie werden wie Wildcard-Imports behandelt

## 2. Visuelle Darstellung der Sichtbarkeiten
Das folgende Diagramm illustriert, welche Elemente je nach Import-Strategie für
den aktuellen Scope "sichtbar" werden:
![SysML-Import-Typen-Visualisiert](sysmlv2-imports.png)

## 3. Technische Umsetzung im SysMLv2-Scope
Die Namensauflösung basiert auf der Delegation eines SysML-Scopes an seinen
umschließenden-Scope. Diese delegation erfolgt innerhalb der Funktion
continueXXXWithEnclosing Scope. Das Import-Unterstützte resolving ist hierbei
für Variablen, Typen und Funktionen implementiert.

### Die Methode `continuePartDefWithEnclosingScope`
Wenn ein Symbol (Variablen, Typen oder Funktionen) lokal nicht gefunden wird,
ruft MontiCore diese Methode auf. Sie berechnet eine Menge von voll-qualifizierten
Namen (FQNs), nach denen im umschließendem Scope gesucht werden. Gesucht wird
hierbei nach dem Namen selbst, dem Namen innerhalb des aktuellen Pakets,
und dem Namen in allen spezifizierten Imports

### Namensqualifizierung mit `calculateQualifiedNames`
Diese Methode nutzt die im `ASTSysMLScope` hinterlegten `SysMLImportStatements`.
Sie prüft für jeden Import:
1. **Bei Wildcards:** Ist der gesuchte Name ein Kind des importierten Pakets? \
(z.B. `ImportPfad + "." + gesuchterName`)
2. **Bei expliziten Importen:** Entspricht der einfache Name des Imports dem \
gesuchten Namen?

```java
// Logik-Ausschnitt aus der Generierung
for (ImportStatement importStatement : imports) {
if (importStatement.isStar()) {
potentialSymbolNames.add(importStatement.getStatement() + "." + name);
} else if (getSimpleName(importStatement.getStatement()).equals(name)) {
potentialSymbolNames.add(importStatement.getStatement());
}
}
```

### SysMLv2ScopesGenitor
Die Symbole der SysML-Scopes werden aktuell nicht mit den Importen initialisiert.

## 4. Einschränkungen und Roadmap
Da `calculateQualifiedNames` in aktuellen MontiCore-Versionen als `@deprecated`
markiert ist, sollte langfristig auf eine explizite Qualifizierung während der
Symbolerstellung im `ScopesGenitor` umgestellt werden.

**Rekursive Imports:** Um `**` korrekt zu unterstützen, muss die Logik so
erweitert werden, dass bei Vorhandensein eines rekursiven Imports der
`GlobalScope` angewiesen wird, eine Präfix-Suche durchzuführen, anstatt nur
nach exakten FQNs zu suchen. Alternativ könnte hierfür auch eine iteration der
Sub-Pakete in calculateQualifiedNames angestrebt werden.
Binary file added doc/sysmlv2-imports.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ sysmlGitlab = https://git.rwth-aachen.de/api/v4/projects/37093/packages/m

# Dependencies
mc_version = 7.8.0
mclsg_version = 7.8.0
mclsg_version = 7.8.5
se_commons_version = 7.8.0
assertj_version = 3.21.0
junit_version = 5.8.2

# Version of published artifacts
version = 7.8.0
version = 7.8.41
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import de.mclsg.lsp.document_management.DocumentManager;
import de.mclsg.lsp.modelpath.multiproject.ProjectLayoutBuilder;
import de.monticore.lang.sysmlv2._lsp.language_access.SysMLv2ScopeManager;
import org.eclipse.lsp4j.InitializedParams;
import org.eclipse.lsp4j.MessageParams;
import org.eclipse.lsp4j.MessageType;
import org.slf4j.Logger;
Expand All @@ -17,6 +18,21 @@ public class SysMLv2LanguageServer extends SysMLv2LanguageServerTOP {

private static final Logger logger = LoggerFactory.getLogger(SysMLv2LanguageServer.class);

@Override
public void initialized(InitializedParams params) {
if (options != null) {
// Re-resolve layout with correct workspace path
ProjectLayout newLayout = new ProjectLayoutBuilder()
.projectpath(options.getWorkspacePath())
.symbolPath(options.getSymbolPaths())
.resources(options.getModelPaths())
.build();

resetContent(newLayout);
}
super.initialized(params);
}

/** Convenience: Wir modifizieren aktuell eigentlich nur den ModelPath */
public SysMLv2LanguageServer(ProjectLayout layout) {
this(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public SysMLv2CodeActionProvider(DocumentManager documentManager,
AstPrettyPrinter<ASTSysMLModel> astSysMLModelAstPrettyPrinter) {
super(documentManager, astSysMLModelAstPrettyPrinter);
coCoCodeActionProviders.add(new UpperCaseBlockName(documentManager));
coCoCodeActionProviders.add(new UniqueSubPartName(documentManager));
coCoCodeActionProviders.add(new MissingRefinement(documentManager));
coCoCodeActionProviders.add(new MissingRefiner(documentManager));
}
Expand Down
Loading
Loading