summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schanda <schanda@itestra.de>2013-06-17 11:41:37 +0200
committerJohannes Schanda <schanda@itestra.de>2013-06-17 11:41:37 +0200
commitce606d9e649aa7b04e400d7f89e48034da51d31d (patch)
tree48648b69ebede00713047dffb5d015bdae466e21
parent773c5104ede00dddb2b9dd69ad30743518de184f (diff)
downloadgenivi-common-api-runtime-ce606d9e649aa7b04e400d7f89e48034da51d31d.tar.gz
Set macro for compile guard
- Adds macro defenition for inclusion of commonapi headers - Rework heder path generation to make distinction between library and generated headers for correct macro placement
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceGenerator.xtend29
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceProxyGenerator.xtend26
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceStubGenerator.xtend20
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend27
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend82
5 files changed, 129 insertions, 55 deletions
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceGenerator.xtend
index 311c3ed..790d614 100644
--- a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceGenerator.xtend
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceGenerator.xtend
@@ -10,6 +10,8 @@ import javax.inject.Inject
import org.eclipse.xtext.generator.IFileSystemAccess
import org.franca.core.franca.FInterface
import org.genivi.commonapi.core.deployment.DeploymentInterfacePropertyAccessor
+import java.util.Collection
+import java.util.HashSet
class FInterfaceGenerator {
@Inject private extension FTypeGenerator
@@ -27,11 +29,23 @@ class FInterfaceGenerator {
«generateCommonApiLicenseHeader»
#ifndef «fInterface.defineName»_H_
#define «fInterface.defineName»_H_
-
- «FOR requiredHeaderFile : fInterface.requiredHeaderFiles.sort»
+
+ «val libraryHeaders = new HashSet<String>»
+ «val generatedHeaders = new HashSet<String>»
+ «fInterface.getRequiredHeaderFiles(generatedHeaders, libraryHeaders)»
+
+ «FOR requiredHeaderFile : generatedHeaders.sort»
#include <«requiredHeaderFile»>
«ENDFOR»
-
+
+ #define COMMONAPI_INTERNAL_COMPILATION
+
+ «FOR requiredHeaderFile : libraryHeaders.sort»
+ #include <«requiredHeaderFile»>
+ «ENDFOR»
+
+ #undef COMMONAPI_INTERNAL_COMPILATION
+
«fInterface.model.generateNamespaceBeginDeclaration»
class «fInterface.name»«IF fInterface.base != null»: public «fInterface.base.getRelativeNameReference(fInterface)»«ENDIF» {
@@ -95,11 +109,10 @@ class FInterfaceGenerator {
«fInterface.model.generateNamespaceEndDeclaration»
'''
- def private getRequiredHeaderFiles(FInterface fInterface) {
- val headerSet = newHashSet('CommonAPI/types.h')
- fInterface.types.forEach[addRequiredHeaders(headerSet)]
- headerSet.remove(fInterface.headerPath)
- return headerSet
+ def void getRequiredHeaderFiles(FInterface fInterface, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ libraryHeaders.add('CommonAPI/types.h')
+ fInterface.types.forEach[addRequiredHeaders(generatedHeaders, libraryHeaders)]
+ generatedHeaders.remove(fInterface.headerPath)
}
def private hasSourceFile(FInterface fInterface) {
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceProxyGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceProxyGenerator.xtend
index 5d361bc..038948a 100644
--- a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceProxyGenerator.xtend
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceProxyGenerator.xtend
@@ -16,6 +16,7 @@ import org.franca.core.franca.FMethod
import org.genivi.commonapi.core.deployment.DeploymentInterfacePropertyAccessor
import static com.google.common.base.Preconditions.*
+import java.util.HashSet
class FInterfaceProxyGenerator {
@Inject private extension FTypeGenerator
@@ -30,9 +31,23 @@ class FInterfaceProxyGenerator {
«generateCommonApiLicenseHeader»
#ifndef «fInterface.defineName»_PROXY_BASE_H_
#define «fInterface.defineName»_PROXY_BASE_H_
-
+
#include "«fInterface.headerFile»"
- «fInterface.generateRequiredTypeIncludes»
+
+ «val generatedHeaders = new HashSet<String>»
+ «val libraryHeaders = new HashSet<String>»
+ «fInterface.generateRequiredTypeIncludes(generatedHeaders, libraryHeaders)»
+
+ «FOR requiredHeaderFile : generatedHeaders.sort»
+ #include <«requiredHeaderFile»>
+ «ENDFOR»
+
+ #define COMMONAPI_INTERNAL_COMPILATION
+
+ «FOR requiredHeaderFile : libraryHeaders.sort»
+ #include <«requiredHeaderFile»>
+ «ENDFOR»
+
«IF fInterface.hasAttributes»
#include <CommonAPI/Attribute.h>
«ENDIF»
@@ -44,6 +59,8 @@ class FInterfaceProxyGenerator {
#include <functional>
#include <future>
«ENDIF»
+
+ #undef COMMONAPI_INTERNAL_COMPILATION
«fInterface.model.generateNamespaceBeginDeclaration»
@@ -94,11 +111,16 @@ class FInterfaceProxyGenerator {
#define «fInterface.defineName»_PROXY_H_
#include "«fInterface.proxyBaseHeaderFile»"
+
+ #define COMMONAPI_INTERNAL_COMPILATION
+
«IF fInterface.hasAttributes»
#include <CommonAPI/AttributeExtension.h>
#include <CommonAPI/Factory.h>
«ENDIF»
+ #undef COMMONAPI_INTERNAL_COMPILATION
+
«fInterface.model.generateNamespaceBeginDeclaration»
template <typename ... _AttributeExtensions>
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceStubGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceStubGenerator.xtend
index 567096d..19b66fc 100644
--- a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceStubGenerator.xtend
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FInterfaceStubGenerator.xtend
@@ -10,6 +10,7 @@ import javax.inject.Inject
import org.eclipse.xtext.generator.IFileSystemAccess
import org.franca.core.franca.FAttribute
import org.franca.core.franca.FInterface
+import java.util.HashSet
class FInterfaceStubGenerator {
@Inject private extension FTypeGenerator
@@ -26,10 +27,27 @@ class FInterfaceStubGenerator {
#ifndef «fInterface.defineName»_STUB_H_
#define «fInterface.defineName»_STUB_H_
- «fInterface.generateRequiredTypeIncludes»
+ «val generatedHeaders = new HashSet<String>»
+ «val libraryHeaders = new HashSet<String>»
+
+ «fInterface.generateRequiredTypeIncludes(generatedHeaders, libraryHeaders)»
+
+ «FOR requiredHeaderFile : generatedHeaders.sort»
+ #include <«requiredHeaderFile»>
+ «ENDFOR»
+
#include "«fInterface.name».h"
+
+ #define COMMONAPI_INTERNAL_COMPILATION
+
+ «FOR requiredHeaderFile : libraryHeaders.sort»
+ #include <«requiredHeaderFile»>
+ «ENDFOR»
+
#include <CommonAPI/Stub.h>
+ #undef COMMONAPI_INTERNAL_COMPILATION
+
«fInterface.model.generateNamespaceBeginDeclaration»
/**
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend
index eb70ba9..81b189d 100644
--- a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend
@@ -11,6 +11,8 @@ import org.eclipse.xtext.generator.IFileSystemAccess
import org.franca.core.franca.FStructType
import org.franca.core.franca.FTypeCollection
import org.genivi.commonapi.core.deployment.DeploymentInterfacePropertyAccessor
+import java.util.HashSet
+import java.util.Collection
class FTypeCollectionGenerator {
@Inject private extension FTypeGenerator
@@ -29,9 +31,21 @@ class FTypeCollectionGenerator {
#ifndef «fTypeCollection.defineName»_H_
#define «fTypeCollection.defineName»_H_
- «FOR requiredHeaderFile : fTypeCollection.requiredHeaderFiles.sort»
+ «val libraryHeaders = new HashSet<String>»
+ «val generatedHeaders = new HashSet<String>»
+ «fTypeCollection.getRequiredHeaderFiles(generatedHeaders, libraryHeaders)»
+
+ «FOR requiredHeaderFile : generatedHeaders.sort»
#include <«requiredHeaderFile»>
«ENDFOR»
+
+ #define COMMONAPI_INTERNAL_COMPILATION
+
+ «FOR requiredHeaderFile : libraryHeaders.sort»
+ #include <«requiredHeaderFile»>
+ «ENDFOR»
+
+ #undef COMMONAPI_INTERNAL_COMPILATION
«fTypeCollection.model.generateNamespaceBeginDeclaration»
@@ -91,12 +105,11 @@ class FTypeCollectionGenerator {
} // namespace «fTypeCollection.name»
«fTypeCollection.model.generateNamespaceEndDeclaration»
'''
-
- def private getRequiredHeaderFiles(FTypeCollection fTypeCollection) {
- val headerSet = newHashSet('CommonAPI/types.h')
- fTypeCollection.types.forEach[addRequiredHeaders(headerSet)]
- headerSet.remove(fTypeCollection.headerPath)
- return headerSet
+
+ def void getRequiredHeaderFiles(FTypeCollection fInterface, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ libraryHeaders.add('CommonAPI/types.h')
+ fInterface.types.forEach[addRequiredHeaders(generatedHeaders, libraryHeaders)]
+ generatedHeaders.remove(fInterface.headerPath)
}
def private hasSourceFile(FTypeCollection fTypeCollection) {
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend
index 514cb1b..2d0ca2e 100644
--- a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend
@@ -286,64 +286,57 @@ class FTypeGenerator {
return (fType instanceof FStructType);
}
- def generateRequiredTypeIncludes(FInterface fInterface) '''
- «FOR requiredTypeHeaderFile : fInterface.requiredTypeHeaderFiles»
- #include <«requiredTypeHeaderFile»>
- «ENDFOR»
- '''
-
- def private getRequiredTypeHeaderFiles(FInterface fInterface) {
- val headerSet = new HashSet<String>
-
- fInterface.attributes.forEach[type.derived?.addRequiredHeaders(headerSet)]
+ def void generateRequiredTypeIncludes(FInterface fInterface, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ fInterface.attributes.forEach[type.derived?.addRequiredHeaders(generatedHeaders, libraryHeaders)]
fInterface.methods.forEach[
- inArgs.forEach[type.derived?.addRequiredHeaders(headerSet)]
- outArgs.forEach[type.derived?.addRequiredHeaders(headerSet)]
+ inArgs.forEach[type.derived?.addRequiredHeaders(generatedHeaders, libraryHeaders)]
+ outArgs.forEach[type.derived?.addRequiredHeaders(generatedHeaders, libraryHeaders)]
]
- fInterface.broadcasts.forEach[outArgs.forEach[type.derived?.addRequiredHeaders(headerSet)]]
-
- headerSet.remove(fInterface.headerPath)
+ fInterface.broadcasts.forEach[outArgs.forEach[type.derived?.addRequiredHeaders(generatedHeaders, libraryHeaders)]]
- return headerSet
+ generatedHeaders.remove(fInterface.headerPath)
}
- def addRequiredHeaders(FType fType, Collection<String> requiredHeaders) {
- requiredHeaders.add(fType.FTypeCollection.headerPath)
- fType.addFTypeRequiredHeaders(requiredHeaders)
+ def addRequiredHeaders(FType fType, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ generatedHeaders.add(fType.FTypeCollection.headerPath)
+ fType.addFTypeRequiredHeaders(generatedHeaders, libraryHeaders)
}
def private getFTypeCollection(FType fType) {
fType.eContainer as FTypeCollection
}
- def private dispatch void addFTypeRequiredHeaders(FTypeDef fTypeDef, Collection<String> requiredHeaders) {
- requiredHeaders.add(fTypeDef.actualType.requiredHeaderPath)
+ def private dispatch void addFTypeRequiredHeaders(FTypeDef fTypeDef, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ fTypeDef.actualType.getRequiredHeaderPath(generatedHeaders, libraryHeaders)
}
- def private dispatch void addFTypeRequiredHeaders(FArrayType fArrayType, Collection<String> requiredHeaders) {
- requiredHeaders.addAll('vector', fArrayType.elementType.requiredHeaderPath)
+ def private dispatch void addFTypeRequiredHeaders(FArrayType fArrayType, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ libraryHeaders.add('vector')
+ fArrayType.elementType.getRequiredHeaderPath(generatedHeaders, libraryHeaders)
}
- def private dispatch void addFTypeRequiredHeaders(FMapType fMapType, Collection<String> requiredHeaders) {
- requiredHeaders.addAll('unordered_map', fMapType.keyType.requiredHeaderPath, fMapType.valueType.requiredHeaderPath)
+ def private dispatch void addFTypeRequiredHeaders(FMapType fMapType, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ libraryHeaders.add('unordered_map')
+ fMapType.keyType.getRequiredHeaderPath(generatedHeaders, libraryHeaders)
+ fMapType.valueType.getRequiredHeaderPath(generatedHeaders, libraryHeaders)
}
- def private dispatch void addFTypeRequiredHeaders(FStructType fStructType, Collection<String> requiredHeaders) {
+ def private dispatch void addFTypeRequiredHeaders(FStructType fStructType, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
if (fStructType.base != null)
- requiredHeaders.add(fStructType.base.FTypeCollection.headerPath)
+ generatedHeaders.add(fStructType.base.FTypeCollection.headerPath)
else
- requiredHeaders.addAll('CommonAPI/InputStream.h', 'CommonAPI/OutputStream.h', 'CommonAPI/SerializableStruct.h')
- fStructType.elements.forEach[requiredHeaders.add(type.requiredHeaderPath)]
+ libraryHeaders.addAll('CommonAPI/InputStream.h', 'CommonAPI/OutputStream.h', 'CommonAPI/SerializableStruct.h')
+ fStructType.elements.forEach[type.getRequiredHeaderPath(generatedHeaders, libraryHeaders)]
}
- def private dispatch void addFTypeRequiredHeaders(FEnumerationType fEnumerationType, Collection<String> requiredHeaders) {
+ def private dispatch void addFTypeRequiredHeaders(FEnumerationType fEnumerationType, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
if (fEnumerationType.base != null)
- requiredHeaders.add(fEnumerationType.base.FTypeCollection.headerPath)
- requiredHeaders.addAll('cstdint', 'CommonAPI/InputStream.h', 'CommonAPI/OutputStream.h')
+ generatedHeaders.add(fEnumerationType.base.FTypeCollection.headerPath)
+ libraryHeaders.addAll('cstdint', 'CommonAPI/InputStream.h', 'CommonAPI/OutputStream.h')
}
- def private dispatch void addFTypeRequiredHeaders(FUnionType fUnionType, Collection<String> requiredHeaders) {
+ def private dispatch void addFTypeRequiredHeaders(FUnionType fUnionType, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
if (fUnionType.base != null)
- requiredHeaders.add(fUnionType.base.FTypeCollection.headerPath)
+ generatedHeaders.add(fUnionType.base.FTypeCollection.headerPath)
else
- requiredHeaders.add('CommonAPI/SerializableVariant.h')
- fUnionType.elements.forEach[requiredHeaders.add(type.requiredHeaderPath)]
- requiredHeaders.addAll('cstdint', 'memory')
+ libraryHeaders.add('CommonAPI/SerializableVariant.h')
+ fUnionType.elements.forEach[type.getRequiredHeaderPath(generatedHeaders, libraryHeaders)]
+ libraryHeaders.addAll('cstdint', 'memory')
}
def private getRequiredHeaderPath(FTypeRef fTypeRef) {
@@ -359,6 +352,21 @@ class FTypeGenerator {
default : 'cstdint'
}
}
+
+ def private void getRequiredHeaderPath(FTypeRef fTypeRef, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ if (fTypeRef.derived != null) {
+ generatedHeaders.add(fTypeRef.derived.FTypeCollection.headerPath)
+ }
+ fTypeRef.predefined.getRequiredHeaderPath(generatedHeaders, libraryHeaders)
+ }
+
+ def private void getRequiredHeaderPath(FBasicTypeId fBasicTypeId, Collection<String> generatedHeaders, Collection<String> libraryHeaders) {
+ switch fBasicTypeId {
+ case FBasicTypeId::STRING : libraryHeaders.add('string')
+ case FBasicTypeId::BYTE_BUFFER : libraryHeaders.add('CommonAPI/ByteBuffer.h')
+ default : libraryHeaders.add('cstdint')
+ }
+ }
def private getClassNamespace(FModelElement child, FModelElement parent) {
child.getClassNamespaceWithName(child.name, parent, parent.name)