Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Haug2019-01-12 11:29:57 +0000
committerJuergen Haug2019-01-12 11:30:29 +0000
commit8d023fb6af978b7da56d7f39376699d417279e9e (patch)
tree887f0c30577b1c260254b492becf59cde3de7ee6 /plugins/org.eclipse.etrice.generator
parent322931d01d3fdf0411b2756f5aad5f582eddeed0 (diff)
downloadorg.eclipse.etrice-8d023fb6af978b7da56d7f39376699d417279e9e.tar.gz
org.eclipse.etrice-8d023fb6af978b7da56d7f39376699d417279e9e.tar.xz
org.eclipse.etrice-8d023fb6af978b7da56d7f39376699d417279e9e.zip
Bug 540562 - Support var args for operations
Diffstat (limited to 'plugins/org.eclipse.etrice.generator')
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ILanguageExtension.java23
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ProcedureHelpers.xtend21
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/TypeHelpers.xtend18
3 files changed, 32 insertions, 30 deletions
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ILanguageExtension.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ILanguageExtension.java
index 153f38902..9db4d0f36 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ILanguageExtension.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ILanguageExtension.java
@@ -18,6 +18,8 @@ import org.eclipse.etrice.core.room.DataType;
import org.eclipse.etrice.core.room.EnumLiteral;
import org.eclipse.etrice.core.room.EnumerationType;
import org.eclipse.etrice.core.room.PrimitiveType;
+import org.eclipse.etrice.core.room.RefableType;
+import org.eclipse.etrice.core.room.VarDecl;
import org.eclipse.etrice.generator.fsm.generic.ILanguageExtensionBase;
@@ -86,4 +88,25 @@ public interface ILanguageExtension extends ILanguageExtensionBase {
* @return the cast type of an enumeration type
*/
String getCastType(EnumerationType type);
+
+ /**
+ * returns type signature of refable type based on data type and ref options
+ * @param refable type
+ * @result target signature as string
+ */
+ String getTypeSignature(RefableType type);
+
+ /**
+ * returns target type name
+ * @param data type
+ * @result target name as string
+ */
+ String getDataTypeName(DataType type);
+
+ /**
+ * returns paramater signature for var decl of an operation
+ * @param vardecl
+ * @result target signature of parameter as string
+ */
+ String toParameterDecl(VarDecl decl);
}
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ProcedureHelpers.xtend b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ProcedureHelpers.xtend
index 35a8d2993..e60a074e8 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ProcedureHelpers.xtend
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/ProcedureHelpers.xtend
@@ -25,7 +25,6 @@ import org.eclipse.etrice.core.room.Attribute
import org.eclipse.etrice.core.room.DataClass
import org.eclipse.etrice.core.room.Operation
import org.eclipse.etrice.core.room.ProtocolClass
-import org.eclipse.etrice.core.room.RefableType
import org.eclipse.etrice.core.room.RoomClass
import org.eclipse.etrice.core.room.util.RoomHelpers
import org.eclipse.etrice.generator.base.logging.ILogger
@@ -384,27 +383,15 @@ class ProcedureHelpers {
* constructor and destructor
*/
def protected operationSignature(Operation operation, String classname, boolean isDeclaration) {
- val arguments = '''«FOR argument : operation.arguments SEPARATOR ", "»«argument.refType.signatureString» «argument.name»«ENDFOR»'''
- val returnType = operation.returnType.signatureString
+ val arguments = operation.arguments.map[arg | languageExt.toParameterDecl(arg)].join(', ')
+ val returnType = languageExt.getTypeSignature(operation.returnType)
functionSignature(classname, languageExt.operationScope(classname, isDeclaration)+operation.name, returnType, arguments)
}
- /**
- * @param type a {@link RefableType}
- * @return a string for the type (also for pointers)
- */
- def String signatureString(RefableType type) {
- switch it : type {
- case null: 'void'
- case isRef: type.type.typeName + languageExt.pointerLiteral
- default: type.type.typeName
- }
- }
-
def String signatureString(Attribute attribute){
switch it : attribute {
case size > 0: languageExt.arrayType(type.type.typeName, size, type.ref)
- default: type.signatureString
+ default: languageExt.getTypeSignature(type)
}
}
@@ -415,7 +402,7 @@ class ProcedureHelpers {
def String declarationString(Attribute attribute){
switch it : attribute {
case size > 0: languageExt.arrayDeclaration(type.type.typeName, size, type.isRef, name)
- default: type.signatureString + ' ' + name
+ default: languageExt.getTypeSignature(type) + ' ' + name
}
}
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/TypeHelpers.xtend b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/TypeHelpers.xtend
index 8a7e5d429..f40f09cdb 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/TypeHelpers.xtend
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/TypeHelpers.xtend
@@ -22,6 +22,7 @@ package org.eclipse.etrice.generator.generic
import com.google.inject.Inject
import com.google.inject.Singleton
import java.util.List
+import org.eclipse.etrice.core.common.base.LiteralType
import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance
import org.eclipse.etrice.core.genmodel.etricegen.InstanceBase
import org.eclipse.etrice.core.genmodel.etricegen.InterfaceItemInstance
@@ -29,16 +30,14 @@ import org.eclipse.etrice.core.room.ActorClass
import org.eclipse.etrice.core.room.Attribute
import org.eclipse.etrice.core.room.DataClass
import org.eclipse.etrice.core.room.DataType
-import org.eclipse.etrice.core.room.ExternalType
-import org.eclipse.etrice.core.common.base.LiteralType
+import org.eclipse.etrice.core.room.EnumerationType
+import org.eclipse.etrice.core.room.Message
import org.eclipse.etrice.core.room.PortClass
import org.eclipse.etrice.core.room.PrimitiveType
+import org.eclipse.etrice.core.room.RefableType
import org.eclipse.etrice.core.room.VarDecl
import org.eclipse.etrice.core.room.util.RoomHelpers
import org.eclipse.etrice.generator.base.IDataConfiguration
-import org.eclipse.etrice.core.room.RefableType
-import org.eclipse.etrice.core.room.Message
-import org.eclipse.etrice.core.room.EnumerationType
@Singleton
class TypeHelpers {
@@ -48,14 +47,7 @@ class TypeHelpers {
@Inject IDataConfiguration dataConfigExt
def String typeName(DataType type) {
- if (type instanceof PrimitiveType)
- return (type as PrimitiveType).targetName
- else if (type instanceof EnumerationType)
- return languageExt.getTargetType(type as EnumerationType)
- else if (type instanceof ExternalType)
- return (type as ExternalType).targetName
- else
- return type.name
+ languageExt.getDataTypeName(type)
}
//
// def String getTypeName(DataType t) {

Back to the top