diff options
author | Juergen Haug | 2019-01-12 11:29:57 +0000 |
---|---|---|
committer | Juergen Haug | 2019-01-12 11:30:29 +0000 |
commit | 8d023fb6af978b7da56d7f39376699d417279e9e (patch) | |
tree | 887f0c30577b1c260254b492becf59cde3de7ee6 /plugins/org.eclipse.etrice.generator | |
parent | 322931d01d3fdf0411b2756f5aad5f582eddeed0 (diff) | |
download | org.eclipse.etrice-8d023fb6af978b7da56d7f39376699d417279e9e.tar.gz org.eclipse.etrice-8d023fb6af978b7da56d7f39376699d417279e9e.tar.xz org.eclipse.etrice-8d023fb6af978b7da56d7f39376699d417279e9e.zip |
Bug 540562 - Support var args for operations
Change-Id: Iac41237fa9ff9bd614aa33b051635c18f1674dd7
Diffstat (limited to 'plugins/org.eclipse.etrice.generator')
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) { |