diff --git a/pom.xml b/pom.xml
index 7b07f17de240dbea060ec3adf0c6df1824cfc076..d1926b8f05b5d688af14d1e689b92cfbf3fcbb7e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
de.monticore.lang.monticar
embedded-montiarc
- 0.1.1-SNAPSHOT
+ 0.1.2-SNAPSHOT
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorBuilder.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorBuilder.java
index 38da356aa3cf85c841b19f9715c15903a9cd6837..738f09fea4c1e7636efc91b5f17b1d678e30ac79 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorBuilder.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorBuilder.java
@@ -31,7 +31,7 @@ import java.util.Optional;
public class EMAConnectorBuilder {
protected Optional source = Optional.empty();
protected Optional target = Optional.empty();
- protected Optional portSymbol = Optional.empty();
+ protected Optional portSymbol = Optional.empty();
public static EMAConnectorSymbol clone(EMAConnectorSymbol con) {
return new EMAConnectorBuilder().setSource(con.getSource()).
@@ -48,7 +48,7 @@ public class EMAConnectorBuilder {
return this;
}
- public EMAConnectorBuilder setConstantPortSymbol(EMAConstantPortSymbol portSymbol) {
+ public EMAConnectorBuilder setConstantPortSymbol(EMAPortSymbol portSymbol) {
this.portSymbol = Optional.of(portSymbol);
return this;
}
@@ -59,7 +59,7 @@ public class EMAConnectorBuilder {
con.setSource(this.source.get());
con.setTarget(this.target.get());
if(portSymbol.orElse(null) != null) {
- con.setEMAConstantPortSymbol(portSymbol.get());
+ con.setConstantEMAPortSymbol(portSymbol.get());
}
return con;
}
@@ -72,7 +72,7 @@ public class EMAConnectorBuilder {
connectorInstance.setSource(connector.getSource());
connectorInstance.setTarget(connector.getTarget());
connectorInstance.setIsConstantConnector(connector.isConstant);
- connectorInstance.setEMAConstantPortSymbol(connector.emaConstantPortSymbol);
+ connectorInstance.setConstantEMAPortSymbol(connector.constantEmaPortSymbol);
connectorInstance.setPackageName(packageName);
connectorInstance.setFullName(packageName + "." + connectorInstance.getName());
return connectorInstance;
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorSymbol.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorSymbol.java
index e79190afbee441c1f1204bdd4526a151e77fff7e..41c41ca2128b1843dc56ba66cb3c159dbe58e6a4 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorSymbol.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConnectorSymbol.java
@@ -58,7 +58,7 @@ public class EMAConnectorSymbol extends CommonSymbol implements EMAElementSymbol
/**
* is null if not a constantConnector
*/
- protected EMAConstantPortSymbol emaConstantPortSymbol = null;
+ protected EMAPortSymbol constantEmaPortSymbol = null;
/**
* use {@link #builder()}
@@ -83,9 +83,9 @@ public class EMAConnectorSymbol extends CommonSymbol implements EMAElementSymbol
return isConstant;
}
- public void setEMAConstantPortSymbol(EMAConstantPortSymbol portSymbol) {
- this.emaConstantPortSymbol = portSymbol;
- setIsConstantConnector(true);
+ public void setConstantEMAPortSymbol(EMAPortSymbol portSymbol) {
+ this.constantEmaPortSymbol = portSymbol;
+ setIsConstantConnector(portSymbol != null && portSymbol.isConstant());
}
/**
@@ -164,7 +164,7 @@ public class EMAConnectorSymbol extends CommonSymbol implements EMAElementSymbol
*/
public EMAPortSymbol getSourcePort() {
if (isConstant())
- return emaConstantPortSymbol;
+ return constantEmaPortSymbol;
return getPort(this.getSource());
}
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConstantPortSymbol.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConstantPortSymbol.java
deleted file mode 100644
index d8a706381c7b5f68973483a8db4657a95ff15886..0000000000000000000000000000000000000000
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAConstantPortSymbol.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- *
- * ******************************************************************************
- * MontiCAR Modeling Family, www.se-rwth.de
- * Copyright (c) 2017, Software Engineering Group at RWTH Aachen,
- * All rights reserved.
- *
- * This project is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this project. If not, see .
- * *******************************************************************************
- */
-package de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel;
-
-
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.EmbeddedMontiArcSymbolTableCreator;
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc.unit.constant.EMAConstantBoolean;
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc.unit.constant.EMAConstantSIUnit;
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc.unit.constant.EMAConstantValue;
-import de.monticore.literals.literals._ast.ASTBooleanLiteral;
-import de.monticore.numberunit._ast.ASTNumberWithUnit;
-import de.se_rwth.commons.logging.Log;
-import org.jscience.mathematics.number.Rational;
-
-import javax.measure.unit.Unit;
-
-import static de.monticore.lang.embeddedmontiarc.helper.EMATypeHelper.initTypeRefGeneralType;
-import static de.monticore.numberunit.Rationals.doubleToRational;
-
-//import de.monticore.literals.literals._ast.*;
-
-/**
- * The EMAConstantPortSymbol is a port which has a constant value assigned and is used
- * by a ConstantConnector to connect this value to other ports.
- *
- * @author Sascha Schneiders
- */
-public class EMAConstantPortSymbol extends EMAPortSymbol {
- EMAConstantValue constantValue;
-
- /**
- * use this constructor for automatic naming of constant ports
- */
- public EMAConstantPortSymbol() {
- super(EMAConstantPortSymbol.getNextConstantPortName());
- setDirection(true);
- }
-
- public EMAConstantPortSymbol(String name) {
- super(name);
- setDirection(true);
- }
-
-
- public EMAConstantValue getConstantValue() {
- return constantValue;
- }
-
-
- public void setConstantValue(EMAConstantValue value) {
- Log.debug("" + value.getValue().toString(), "value setting");
- this.constantValue = value;
- }
-
-
- /**
- * initializes ConstantPort from a UnitNumberLiteral
- */
- public void initConstantPortSymbol(ASTNumberWithUnit si_unit) {
- Unit unit = si_unit.getUnit();
- Rational rational = doubleToRational(si_unit.getNumber().get());
-
- setConstantValue(new EMAConstantSIUnit(rational, unit));
- }
-
- /**
- * initializes ConstantPort from a BooleanLiteral
- */
- public void initConstantPortSymbol(ASTBooleanLiteral astBooleanLiteral) {
- setConstantValue(new EMAConstantBoolean(astBooleanLiteral.getSource() == 1));
- }
-
- private static int lastID = 1;
-
- public static String getNextConstantPortName() {
- return "CONSTANTPORT" + lastID++;
- }
-
- public static void resetLastID() {
- lastID = 1;
- }
-
- @Override
- public boolean isConstant() {
- return true;
- }
-
- public static EMAConstantPortSymbol createConstantPortSymbol(de.monticore.lang.embeddedmontiarc.embeddedmontiarc._ast.ASTConnector node, EmbeddedMontiArcSymbolTableCreator symbolTableCreator) {
- EMAConstantPortSymbol emaConstantPortSymbol = new EMAConstantPortSymbol();
-
- if (node.getUnitNumberResolutionOpt().isPresent()) {
- emaConstantPortSymbol.initConstantPortSymbol(node.getUnitNumberResolution().getNumberWithUnit());
- String typeName;
- typeName = "UnitNumberResolution";
- emaConstantPortSymbol.setTypeReference(initTypeRefGeneralType(typeName, symbolTableCreator));
- } else if (node.getBoolLiteralOpt().isPresent()) {
- emaConstantPortSymbol.initConstantPortSymbol(node.getBoolLiteral());
- String typeName;
- typeName = "B";
- emaConstantPortSymbol.setTypeReference(initTypeRefGeneralType(typeName, symbolTableCreator));
- } else {
- Log.info("Case not handled", "ConstantPortInit");
- }
-
- return emaConstantPortSymbol;
- }
-}
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortArraySymbol.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortArraySymbol.java
index f13fb32d7e93b4264ecf3bc7f287fe6cb9a93a49..c4d80df3bbf10466a0605441d21fa119e5392f1a 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortArraySymbol.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortArraySymbol.java
@@ -122,20 +122,13 @@ public class EMAPortArraySymbol extends EMAPortSymbol {
}
private void createPortSymbolForArrayIndex(EMAComponentSymbolReference emaComponentSymbolReference, ASTPort node, String name, MCTypeReference extends MCTypeSymbol> typeRef) {
- EMAPortSymbol ps;
- if (name.startsWith("CONSTANTPORT")) {
- ps = new EMAConstantPortSymbol(name);
- } else {
- ps = new EMAPortSymbol(name);
- }
+ EMAPortSymbol ps = new EMAPortSymbol(name);
ps.setNameDependsOn(nameSizeDependsOn);
ps.setTypeReference(typeRef);
ps.setDirection(node.isIncoming());
getEnclosingScope().getAsMutableScope().add(ps);
- //emastc.addToScopeAndLinkWithNode(ps, node);
-
Log.debug(name + " " + emaComponentSymbolReference.getAllIncomingPorts().size(), "Added EMAPortSymbol From PortArray:");
}
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortBuilder.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortBuilder.java
index 95a4509b68a9b5c589283213cbaa45262de45491..24ba844bfa849817d2c55548120df0f2f10e6707 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortBuilder.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortBuilder.java
@@ -40,14 +40,15 @@ public class EMAPortBuilder {
protected Optional middlewareSymbol = Optional.empty();
public static EMAPortSymbol clone(EMAPortSymbol port) {
- if (port.isConstant())
- return new EMAPortBuilder().setName(port.getName()).setDirection(port.isIncoming()).
- setTypeReference(port.getTypeReference()).setConstantValue(((EMAConstantPortSymbol) port).getConstantValue()).setASTNode(port.getAstNode())
- .buildConstantPort();
- else {
- return new EMAPortBuilder().setName(port.getName()).setDirection(port.isIncoming())
- .setTypeReference(port.getTypeReference()).setASTNode(port.getAstNode()).setConfig(port.isConfig()).setMiddlewareSymbol(port.getMiddlewareSymbol()).build();
- }
+ return new EMAPortBuilder()
+ .setName(port.getName())
+ .setDirection(port.isIncoming())
+ .setTypeReference(port.getTypeReference())
+ .setConstantValue(port.getConstantValue().orElse(null))
+ .setMiddlewareSymbol(port.getMiddlewareSymbol().orElse(null))
+ .setASTNode(port.getAstNode())
+ .setConfig(port.isConfig())
+ .build();
}
public EMAPortBuilder setDirection(boolean incoming) {
@@ -61,7 +62,7 @@ public class EMAPortBuilder {
}
public EMAPortBuilder setConstantValue(EMAConstantValue constantValue) {
- this.constantValue = Optional.of(constantValue);
+ this.constantValue = Optional.ofNullable(constantValue);
return this;
}
@@ -74,8 +75,8 @@ public class EMAPortBuilder {
this.astNode = astNode;
return this;
}
- public EMAPortBuilder setMiddlewareSymbol(Optional middlewareSymbol){
- this.middlewareSymbol = middlewareSymbol;
+ public EMAPortBuilder setMiddlewareSymbol(MiddlewareSymbol middlewareSymbol){
+ this.middlewareSymbol = Optional.ofNullable(middlewareSymbol);
return this;
}
@@ -90,6 +91,8 @@ public class EMAPortBuilder {
EMAPortSymbol p = new EMAPortSymbol(this.name.get());
p.setDirection(this.incoming.get());
p.setTypeReference(this.typeReference.get());
+ if(constantValue.isPresent())
+ p.setConstantValue(constantValue.get());
if (astNode.isPresent())
p.setAstNode(astNode.get());
if (config.isPresent())
@@ -102,25 +105,6 @@ public class EMAPortBuilder {
throw new Error("not all parameters have been set before to build the port symbol");
}
- public EMAConstantPortSymbol buildConstantPort() {
- if (typeReference == null) {
- Log.error("not all parameters have been set before to build the port symbol");
- throw new Error("not all parameters have been set before to build the port symbol");
- }
- EMAConstantPortSymbol p = new EMAConstantPortSymbol(name.get());
- p.setDirection(this.incoming.get());
- p.setTypeReference(typeReference.get());
- p.setConstantValue(constantValue.get());
- if (astNode.isPresent())
- p.setAstNode(astNode.get());
- if (config.isPresent())
- p.setConfig(config.get());
- if(middlewareSymbol.isPresent())
- p.setMiddlewareSymbol(middlewareSymbol.get());
- return p;
- }
-
-
public static EMAPortInstanceSymbol instantiate(EMAPortSymbol port, String packageName) {
EMAPortInstanceSymbol portInstance = new EMAPortInstanceSymbol(port.getName());
portInstance.setDirection(port.isIncoming());
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortHelper.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortHelper.java
index a793896648fd5ec0603cd54636266366cb5ed779..aad37031dbd27e1d004fc4252c12a3b70d3953f5 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortHelper.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortHelper.java
@@ -23,6 +23,7 @@ package de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncMode
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._ast.ASTConnector;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._ast.ASTPort;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._ast.ASTSubComponent;
+import de.monticore.lang.embeddedmontiarc.helper.ConstantPortHelper;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.EmbeddedMontiArcSymbolTableCreator;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure.EMAComponentInstantiationSymbol;
import de.monticore.lang.monticar.common2._ast.ASTArrayAccess;
@@ -340,7 +341,7 @@ public class EMAPortHelper {
de.monticore.lang.embeddedmontiarc.embeddedmontiarc._ast.ASTConnector node,
EmbeddedMontiArcSymbolTableCreator symbolTableCreator) {
int counter = 0, targetnum = 0;
- EMAConstantPortSymbol emaConstantPortSymbol = EMAConstantPortSymbol.createConstantPortSymbol(node,
+ EMAPortSymbol emaConstantPortSymbol = ConstantPortHelper.createConstantPortSymbol(node,
symbolTableCreator);
symbolTableCreator.addToScope(emaConstantPortSymbol);
for (ASTQualifiedNameWithArray target : node.getTargets().getQualifiedNameWithArrayList()) {
@@ -352,7 +353,7 @@ public class EMAPortHelper {
Log.debug("" + targetName, "target");
EMAConnectorSymbol sym = new EMAConnectorSymbol(targetName);
- sym.setEMAConstantPortSymbol(emaConstantPortSymbol);
+ sym.setConstantEMAPortSymbol(emaConstantPortSymbol);
sym.setSource(emaConstantPortSymbol.getName());
sym.setTarget(targetName);
Log.debug(sym.getTarget(), "TARGETNAME SET TO");
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortSymbol.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortSymbol.java
index f6b143c158f1b881bc34ac76b4f3ce845b0c390a..4c6dc7f4260c6745fd6aa1af807c01625ad8183f 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortSymbol.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/cncModel/EMAPortSymbol.java
@@ -21,6 +21,7 @@
package de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure.EMAComponentInstanceSymbol;
+import de.monticore.lang.embeddedmontiarc.embeddedmontiarc.unit.constant.EMAConstantValue;
import de.monticore.lang.embeddedmontiarc.helper.SymbolPrinter;
import de.monticore.lang.embeddedmontiarc.tagging.middleware.MiddlewareSymbol;
import de.monticore.lang.embeddedmontiarc.tagging.middleware.ros.RosConnectionSymbol;
@@ -66,6 +67,8 @@ public class EMAPortSymbol extends CommonSymbol implements EMAElementSymbol {
private Optional middlewareSymbol = Optional.empty();
+ private Optional constantValue = Optional.empty();
+
/**
* use {@link #builder()}
*/
@@ -186,9 +189,17 @@ public class EMAPortSymbol extends CommonSymbol implements EMAElementSymbol {
public String toString() {
return SymbolPrinter.printPort(this);
}
-
+
+ public void setConstantValue(EMAConstantValue constantValue){
+ this.constantValue = Optional.ofNullable(constantValue);
+ }
+
+ public Optional getConstantValue(){
+ return constantValue;
+ }
+
public boolean isConstant() {
- return false;
+ return constantValue.isPresent();
}
public String getNameWithoutArrayBracketPart() {
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/instanceStructure/EMAConnectorInstanceSymbol.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/instanceStructure/EMAConnectorInstanceSymbol.java
index d0d3814d404a45c86755429e7e81f975a27b3356..a5bc801782948bda986bd039613fe16a0f35ba11 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/instanceStructure/EMAConnectorInstanceSymbol.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/_symboltable/instanceStructure/EMAConnectorInstanceSymbol.java
@@ -20,10 +20,7 @@
*/
package de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure;
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel.EMAComponentSymbol;
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel.EMAConnectorBuilder;
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel.EMAConnectorSymbol;
-import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel.EMAConstantPortSymbol;
+import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel.*;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc.types.TypesPrinter;
import de.monticore.lang.embeddedmontiarc.helper.SymbolPrinter;
import de.se_rwth.commons.Joiners;
@@ -59,7 +56,7 @@ public class EMAConnectorInstanceSymbol extends EMAConnectorSymbol implements EM
/**
* is null if not a constantConnector
*/
- protected EMAConstantPortSymbol emaConstantPortSymbol = null;
+ protected EMAPortSymbol constantEmaPortSymbol = null;
/**
* use {@link #builder()}
@@ -80,9 +77,9 @@ public class EMAConnectorInstanceSymbol extends EMAConnectorSymbol implements EM
return isConstant;
}
- public void setEMAConstantPortSymbol(EMAConstantPortSymbol portSymbol) {
- this.emaConstantPortSymbol = portSymbol;
- setIsConstantConnector(true);
+ public void setConstantEMAPortSymbol(EMAPortSymbol portSymbol) {
+ this.constantEmaPortSymbol = portSymbol;
+ setIsConstantConnector(portSymbol != null && portSymbol.isConstant());
}
/**
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/unit/constant/EMAConstantValue.java b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/unit/constant/EMAConstantValue.java
index 3284e6c6b1b32b5627b5ebec4b59e45cca3e91be..b97a885f5fcf67fb8ea2199e760479741fd5b7e9 100644
--- a/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/unit/constant/EMAConstantValue.java
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/embeddedmontiarc/unit/constant/EMAConstantValue.java
@@ -21,8 +21,8 @@
package de.monticore.lang.embeddedmontiarc.embeddedmontiarc.unit.constant;
/**
- * The base type of every constant that can be stored by a EMAConstantPortSymbol
- * which is used by a ConstantConnector
+ * The base type of every constant that can be stored by a constant EMAPortSymbol
+ * which is used by a constant Connector
*/
public abstract class EMAConstantValue {
protected T value;
diff --git a/src/main/java/de/monticore/lang/embeddedmontiarc/helper/ConstantPortHelper.java b/src/main/java/de/monticore/lang/embeddedmontiarc/helper/ConstantPortHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..b9054a635cf154213b9170199460ee003eb5c1a0
--- /dev/null
+++ b/src/main/java/de/monticore/lang/embeddedmontiarc/helper/ConstantPortHelper.java
@@ -0,0 +1,92 @@
+/**
+ *
+ * ******************************************************************************
+ * MontiCAR Modeling Family, www.se-rwth.de
+ * Copyright (c) 2017, Software Engineering Group at RWTH Aachen,
+ * All rights reserved.
+ *
+ * This project is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3.0 of the License, or (at your option) any later version.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this project. If not, see .
+ * *******************************************************************************
+ */
+package de.monticore.lang.embeddedmontiarc.helper;
+
+
+import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.EmbeddedMontiArcSymbolTableCreator;
+import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel.EMAPortBuilder;
+import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel.EMAPortSymbol;
+import de.monticore.lang.embeddedmontiarc.embeddedmontiarc.unit.constant.EMAConstantBoolean;
+import de.monticore.lang.embeddedmontiarc.embeddedmontiarc.unit.constant.EMAConstantSIUnit;
+import de.monticore.literals.literals._ast.ASTBooleanLiteral;
+import de.monticore.numberunit._ast.ASTNumberWithUnit;
+import de.se_rwth.commons.logging.Log;
+import org.jscience.mathematics.number.Rational;
+
+import javax.measure.unit.Unit;
+
+import static de.monticore.lang.embeddedmontiarc.helper.EMATypeHelper.initTypeRefGeneralType;
+import static de.monticore.numberunit.Rationals.doubleToRational;
+
+/**
+ * The ConstantPortHelper manages constant Port names and sets the constantValue from the AST elements. Constant Ports are used
+ * by constant Connectors to connect their value to other ports.
+ *
+ * @author Sascha Schneiders, Alexander Hellwig
+ */
+public class ConstantPortHelper {
+ private static int lastID = 1;
+
+ public static String getNextConstantPortName() {
+ return "CONSTANTPORT" + lastID++;
+ }
+
+ public static void resetLastID() {
+ lastID = 1;
+ }
+
+ /**
+ * converts a UnitNumberLiteral to EMAConstantValue for a constant Port
+ */
+ public static EMAConstantSIUnit getConstantValue(ASTNumberWithUnit si_unit) {
+ Unit unit = si_unit.getUnit();
+ Rational rational = doubleToRational(si_unit.getNumber().get());
+
+ return new EMAConstantSIUnit(rational, unit);
+ }
+
+ /**
+ * converts a BooleanLiteral to EMAConstantValue for a constant Port
+ */
+ public static EMAConstantBoolean getConstantValue(ASTBooleanLiteral astBooleanLiteral) {
+ return new EMAConstantBoolean(astBooleanLiteral.getSource() == 1);
+ }
+
+ public static EMAPortSymbol createConstantPortSymbol(de.monticore.lang.embeddedmontiarc.embeddedmontiarc._ast.ASTConnector node, EmbeddedMontiArcSymbolTableCreator symbolTableCreator) {
+ EMAPortBuilder builder = EMAPortSymbol.builder();
+ builder.setName(getNextConstantPortName());
+ builder.setDirection(EMAPortSymbol.INCOMING);
+
+ if (node.getUnitNumberResolutionOpt().isPresent()) {
+ builder.setConstantValue(getConstantValue(node.getUnitNumberResolution().getNumberWithUnit()));
+ String typeName = "UnitNumberResolution";
+ builder.setTypeReference(initTypeRefGeneralType(typeName, symbolTableCreator));
+ } else if (node.getBoolLiteralOpt().isPresent()) {
+ builder.setConstantValue(getConstantValue(node.getBoolLiteral()));
+ String typeName = "B";
+ builder.setTypeReference(initTypeRefGeneralType(typeName, symbolTableCreator));
+ } else {
+ Log.info("Case not handled", "ConstantPortInit");
+ }
+
+ return builder.build();
+ }
+}
diff --git a/src/test/java/de/monticore/lang/embeddedmontiarc/ExpandedComponentInstanceTest.java b/src/test/java/de/monticore/lang/embeddedmontiarc/ExpandedComponentInstanceTest.java
index d71acc6bbc588cad982810143dd0149a0b638c8d..25a5c558d981b2a4571bd5150deb357d4ed0a4ef 100644
--- a/src/test/java/de/monticore/lang/embeddedmontiarc/ExpandedComponentInstanceTest.java
+++ b/src/test/java/de/monticore/lang/embeddedmontiarc/ExpandedComponentInstanceTest.java
@@ -26,6 +26,7 @@ import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.cncModel
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure.EMAComponentInstanceSymbol;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure.EMAConnectorInstanceSymbol;
import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.instanceStructure.InstanceInformation;
+import de.monticore.lang.embeddedmontiarc.helper.ConstantPortHelper;
import de.monticore.lang.monticar.si._symboltable.ResolutionDeclarationSymbol;
import de.monticore.symboltable.Scope;
import de.se_rwth.commons.logging.Log;
@@ -126,7 +127,7 @@ public class ExpandedComponentInstanceTest extends AbstractSymtabTest {
@Test
public void testConnectorInstancing() {
- EMAConstantPortSymbol.resetLastID();
+ ConstantPortHelper.resetLastID();
Scope symTab = createSymTab("src/test/resources");
EMAComponentInstanceSymbol inst = symTab.resolve(
"testing.connectorInstancing", EMAComponentInstanceSymbol.KIND).orElse(null);
@@ -136,7 +137,7 @@ public class ExpandedComponentInstanceTest extends AbstractSymtabTest {
assertEquals(3, inst.getConnectorInstances().size());
// Todo: make ConstantPorts Instances
- //EMAConstantPortSymbol portSymbol = (EMAConstantPortSymbol) inst.getPortInstance("CONSTANTPORT1").get();
+ //ConstantPortHelper portSymbol = (ConstantPortHelper) inst.getPortInstance("CONSTANTPORT1").get();
}
@Test
diff --git a/src/test/java/de/monticore/lang/embeddedmontiarc/SymtabTest.java b/src/test/java/de/monticore/lang/embeddedmontiarc/SymtabTest.java
index 10403b14cfb4eb7ee45e0576a848e06c2f6a81c4..65a7f848d18bc123248dfd22a03eb56498fd3eba 100644
--- a/src/test/java/de/monticore/lang/embeddedmontiarc/SymtabTest.java
+++ b/src/test/java/de/monticore/lang/embeddedmontiarc/SymtabTest.java
@@ -264,10 +264,10 @@ public class SymtabTest extends AbstractSymtabTest {
EMAConnectorSymbol emaConnectorSymbol = cs.getConnector("steering").get();
assertTrue(emaConnectorSymbol.getSourcePort().isConstant());
- EMAConstantPortSymbol cps = (EMAConstantPortSymbol) emaConnectorSymbol.getSourcePort();
- assertTrue(cps.getConstantValue().isSIUnit());
+ EMAPortSymbol cps = emaConnectorSymbol.getSourcePort();
+ assertTrue(cps.getConstantValue().get().isSIUnit());
- EMAConstantSIUnit constantSIUnit = (EMAConstantSIUnit) cps.getConstantValue();
+ EMAConstantSIUnit constantSIUnit = (EMAConstantSIUnit) cps.getConstantValue().get();
assertEquals(0.1, constantSIUnit.getRational().doubleValue(), 0.0000000001);
assertEquals("cm", constantSIUnit.getUnit().toString());
@@ -301,12 +301,12 @@ public class SymtabTest extends AbstractSymtabTest {
//check that this is a constant connector
assertTrue(emaConnectorSymbol.isConstant());
assertTrue(emaConnectorSymbol.getSourcePort().isConstant());
- EMAConstantPortSymbol cps = ((EMAConstantPortSymbol) emaConnectorSymbol.getSourcePort());
+ EMAPortSymbol cps = emaConnectorSymbol.getSourcePort();
- assertTrue(cps.getConstantValue().isBoolean());
+ assertTrue(cps.getConstantValue().get().isBoolean());
- assertTrue((Boolean) cps.getConstantValue().getValue() == false);
+ assertEquals(false, cps.getConstantValue().get().getValue());
}