Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
13 changes: 12 additions & 1 deletion cc/src/main/grammars/de/monticore/lang/ComponentConnector.mc4
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,17 @@ component grammar ComponentConnector
/**
* Requirements: Wir berücksichtigen primär die Namen der Requirements
*/
interface symbol Requirement = Name;
interface symbol Requirement =
name:Name
[isStateInvariant:"invariant"]?
subject:MildComponent
assumptions:Expression*
guarantee:Expression
;

symbolrule Requirement =
assumptions:Expression*
guarantee:Expression
;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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 serializeAssumptions(List<ASTExpression> assumptions,
ComponentConnectorSymbols2Json s2j) {
// not implemented
}

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

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

@Override
protected ASTExpression deserializeGuarantee(JsonObject symbolJson) {
// not implemented
return null;
}
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ assertj_version = 3.21.0
junit_version = 5.8.2

# Version of published artifacts
version = 7.8.27
version = 7.8.28
Original file line number Diff line number Diff line change
@@ -1,13 +1,62 @@
/* (c) https://github.com/MontiCore/monticore */
package de.monticore.lang.sysmlv2.symboltable.adapters;

import de.monticore.expressions.expressionsbasis._ast.ASTExpression;
import de.monticore.lang.componentconnector._symboltable.MildComponentSymbol;
import de.monticore.lang.componentconnector._symboltable.RequirementSymbol;
import de.monticore.lang.sysmlconstraints._ast.ASTConstraintUsage;
import de.monticore.lang.sysmlconstraints._ast.ASTRequirementSubject;
import de.monticore.lang.sysmlconstraints._symboltable.RequirementUsageSymbol;
import de.monticore.lang.sysmlv2._symboltable.SysMLv2Scope;

import java.util.List;

public class Requirement2RequirementCCAdapter extends RequirementSymbol {

private RequirementUsageSymbol adaptee;

public Requirement2RequirementCCAdapter(RequirementUsageSymbol requirementUsageSymbol) {
super(requirementUsageSymbol.getFullName());
this.adaptee = requirementUsageSymbol;
}

public MildComponentSymbol getSubject() {
var subject = this.adaptee.getAstNode().getSysMLElementList()
.stream()
.filter(e -> e instanceof ASTRequirementSubject)
.map(e -> (ASTRequirementSubject) e)
.map(s -> s.getSymbol())
.findFirst().orElse(null);

if(subject.getTypesList().size() != 1) {
return null;
}

var subjectTypeName = subject.getTypes(0).printFullName();
return ((SysMLv2Scope) this.adaptee.getEnclosingScope())
.resolveMildComponent(subjectTypeName)
.orElse(null);
}

@Override
public List<ASTExpression> getAssumptionsList() {
return this.adaptee.getAstNode().getSysMLElementList()
.stream()
.filter(e -> e instanceof ASTConstraintUsage)
.map(e -> (ASTConstraintUsage) e)
.filter(usage -> usage.isAssume())
.map(ASTConstraintUsage::getExpression)
.collect(java.util.stream.Collectors.toList());
}

@Override
public ASTExpression getGuarantee() {
return this.adaptee.getAstNode().getSysMLElementList()
.stream()
.filter(e -> e instanceof ASTConstraintUsage)
.map(e -> (ASTConstraintUsage) e)
.filter(usage -> usage.isAssert())
.map(ASTConstraintUsage::getExpression)
.findFirst().orElse(null);
}
}
Loading