From 3da42c43f89ba70168271609de9df0a9407ee14f Mon Sep 17 00:00:00 2001 From: Simon Giesecke Date: Tue, 7 Aug 2018 13:14:36 +0200 Subject: [PATCH 1/3] Removed default registristation of generic exception types --- .../generator/cpp/CppGeneratorTest.xtend | 8 ------- .../generator/java/JavaGeneratorTest.xtend | 6 ----- .../generator/cpp/CodecGenerator.xtend | 6 ----- .../generator/cpp/ServiceAPIGenerator.xtend | 7 ------ .../cpp/TypeResolverExtensions.xtend | 12 ---------- .../ServiceFaultHandlingGenerator.xtend | 4 ---- .../generator/dotnet/TypeResolver.xtend | 18 ++------------- .../java/BasicJavaSourceGenerator.xtend | 3 +-- .../ServiceFaultHandlerFactoryGenerator.xtend | 6 ----- .../generator/java/TypeResolver.xtend | 22 ------------------- .../com/btc/serviceidl/util/Constants.java | 5 ----- 11 files changed, 3 insertions(+), 94 deletions(-) diff --git a/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/cpp/CppGeneratorTest.xtend b/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/cpp/CppGeneratorTest.xtend index e81df88a..6c0ceb00 100644 --- a/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/cpp/CppGeneratorTest.xtend +++ b/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/cpp/CppGeneratorTest.xtend @@ -76,9 +76,7 @@ class CppGeneratorTest extends AbstractGeneratorTest #include "modules/Infrastructure/ServiceHost/Demo/API/ServiceAPI/include/IKeyValueStore.h" #include "modules/Commons/include/BeginCabInclude.h" // CAB --> - #include "Commons/Core/include/InvalidArgumentException.h" #include "Commons/Core/include/String.h" - #include "Commons/Core/include/UnsupportedOperationException.h" #include "Commons/CoreExtras/include/UUID.h" #include "ServiceComm/API/include/IServiceFaultHandler.h" #include "ServiceComm/Base/include/DefaultServiceFaultHandler.h" @@ -103,12 +101,6 @@ class CppGeneratorTest extends AbstractGeneratorTest void RegisterKeyValueStoreServiceFaults(BTC::ServiceComm::API::IServiceFaultHandlerManager& serviceFaultHandlerManager) { - - // most commonly used exception types - BTC::ServiceComm::Base::RegisterServiceFault( - serviceFaultHandlerManager, BTC::Commons::Core::String("BTC.Commons.Core.InvalidArgumentException")); - BTC::ServiceComm::Base::RegisterServiceFault( - serviceFaultHandlerManager, BTC::Commons::Core::String("BTC.Commons.Core.UnsupportedOperationException")); } }}}}}}} ''') diff --git a/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/java/JavaGeneratorTest.xtend b/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/java/JavaGeneratorTest.xtend index bbce046c..84a8082e 100644 --- a/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/java/JavaGeneratorTest.xtend +++ b/com.btc.serviceidl.tests/src/com/btc/serviceidl/tests/generator/java/JavaGeneratorTest.xtend @@ -316,8 +316,6 @@ public class TypesCodec { import com.btc.cab.servicecomm.api.IServiceFaultHandler; import com.btc.cab.servicecomm.faulthandling.DefaultServiceFaultHandler; import com.btc.cab.servicecomm.faulthandling.ErrorMessage; - import java.lang.IllegalArgumentException; - import java.lang.UnsupportedOperationException; import java.lang.reflect.Constructor; import java.util.Optional; import org.apache.commons.collections4.BidiMap; @@ -330,10 +328,6 @@ public class TypesCodec { static { - - // most commonly used exception types - errorMap.put("BTC.Commons.Core.InvalidArgumentException", IllegalArgumentException.class); - errorMap.put("BTC.Commons.Core.UnsupportedOperationException", UnsupportedOperationException.class); } public static final IServiceFaultHandler createServiceFaultHandler() diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/CodecGenerator.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/CodecGenerator.xtend index 8e8d2584..a8a1c6eb 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/CodecGenerator.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/CodecGenerator.xtend @@ -68,12 +68,6 @@ class CodecGenerator extends BasicCppGenerator «val exceptionName = exception.getCommonExceptionName(qualifiedNameProvider)» faultHandlers["«exceptionName»"] = [](«cabString» const& msg) { return «cabCreateUnique»<«exceptionType»>(msg); }; «ENDFOR» - - // most commonly used exception types - «val defaultExceptions = typeResolver.defaultExceptionRegistration» - «FOR exception : defaultExceptions.keySet.sort» - faultHandlers["«exception»"] = [](«cabString» const& msg) { return «cabCreateUnique»<«defaultExceptions.get(exception)»>(msg); }; - «ENDFOR» }); } diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ServiceAPIGenerator.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ServiceAPIGenerator.xtend index c9b0a5d8..2a417bc1 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ServiceAPIGenerator.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ServiceAPIGenerator.xtend @@ -231,13 +231,6 @@ class ServiceAPIGenerator extends BasicCppGenerator { «registerServiceFault»<«resolveExcName»>( serviceFaultHandlerManager, «cabString»("«exception.getCommonExceptionName(qualifiedNameProvider)»")); «ENDFOR» - - // most commonly used exception types - «val defaultExceptions = typeResolver.defaultExceptionRegistration» - «FOR exception : defaultExceptions.keySet.sort» - «registerServiceFault»<«defaultExceptions.get(exception)»>( - serviceFaultHandlerManager, «cabString»("«exception»")); - «ENDFOR» } ''' } diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/TypeResolverExtensions.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/TypeResolverExtensions.xtend index e791eb4e..cfab0a6e 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/TypeResolverExtensions.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/TypeResolverExtensions.xtend @@ -2,8 +2,6 @@ package com.btc.serviceidl.generator.cpp import com.btc.serviceidl.generator.common.GuidMapper import com.btc.serviceidl.idl.StructDeclaration -import com.btc.serviceidl.util.Constants -import java.util.Map class TypeResolverExtensions { static def String makeEventGUIDImplementations(extension TypeResolver typeResolver, @@ -27,14 +25,4 @@ class TypeResolverExtensions { ''' } - static def Map getDefaultExceptionRegistration(extension TypeResolver typeResolver) - { - // TODO these must not be registered, the default must be empty - #{ - Constants.INVALID_ARGUMENT_EXCEPTION_FAULT_HANDLER -> resolveSymbol("BTC::Commons::Core::InvalidArgumentException") - ,Constants.UNSUPPORTED_OPERATION_EXCEPTION_FAULT_HANDLER -> resolveSymbol("BTC::Commons::Core::UnsupportedOperationException") - } - } - - } \ No newline at end of file diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/ServiceFaultHandlingGenerator.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/ServiceFaultHandlingGenerator.xtend index 6b6f140e..19200f77 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/ServiceFaultHandlingGenerator.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/ServiceFaultHandlingGenerator.xtend @@ -39,10 +39,6 @@ class ServiceFaultHandlingGenerator extends GeneratorBase static «className»() { - // most commonly used exception types - errorMap["«Constants.INVALID_ARGUMENT_EXCEPTION_FAULT_HANDLER»"] = typeof(«resolve("System.ArgumentException").fullyQualifiedName»); - errorMap["«Constants.UNSUPPORTED_OPERATION_EXCEPTION_FAULT_HANDLER»"] = typeof(«resolve("System.NotSupportedException").fullyQualifiedName»); - «FOR e : raisedExceptions.sortBy[name] SEPARATOR System.lineSeparator» errorMap["«e.getCommonExceptionName(qualifiedNameProvider)»"] = typeof(«resolve(e)»); «ENDFOR» diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/TypeResolver.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/TypeResolver.xtend index 41689ad9..e9d7d5ab 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/TypeResolver.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/dotnet/TypeResolver.xtend @@ -52,9 +52,8 @@ class TypeResolver def ResolvedName resolve(String name) { - val effectiveName = resolveException(name) ?: name - val fullyQualifiedName = QualifiedName.create( - effectiveName.split(Pattern.quote(Constants.SEPARATOR_PACKAGE))) + val effectiveName = name + val fullyQualifiedName = QualifiedName.create(effectiveName.split(Pattern.quote(Constants.SEPARATOR_PACKAGE))) val namespace = fullyQualifiedName.skipLast(1).toString if (namespace.startsWith("System")) @@ -148,19 +147,6 @@ class TypeResolver return new ResolvedName(result, TransformType.PACKAGE, FULLY_QUALIFIED) } - private static def String resolveException(String name) - { - // temporarily some special handling for exceptions, because not all - // C++ CAB exceptions are supported by the .NET CAB - switch (name) - { - case "BTC.Commons.Core.InvalidArgumentException": - return "System.ArgumentException" - default: - return null - } - } - private def boolean isSameProject(QualifiedName referencedPackage) { GeneratorUtil.getTransformedModuleName(parameterBundle, ArtifactNature.DOTNET, TransformType.PACKAGE) == diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/BasicJavaSourceGenerator.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/BasicJavaSourceGenerator.xtend index 7e80081d..4e199be2 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/BasicJavaSourceGenerator.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/BasicJavaSourceGenerator.xtend @@ -54,8 +54,7 @@ class BasicJavaSourceGenerator def dispatch String toText(ExceptionDeclaration element) { - typeResolver.resolveException(qualifiedNameProvider.getFullyQualifiedName(element).toString) ?: - '''«typeResolver.resolve(element)»''' + '''«typeResolver.resolve(element)»''' } def dispatch String toText(SequenceDeclaration item) diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ServiceFaultHandlerFactoryGenerator.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ServiceFaultHandlerFactoryGenerator.xtend index 6c702941..6ca5d58b 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ServiceFaultHandlerFactoryGenerator.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ServiceFaultHandlerFactoryGenerator.xtend @@ -47,8 +47,6 @@ class ServiceFaultHandlerFactoryGenerator // TODO except for the static initializer, this can be extracted into a reusable class, which can be provided // from com.btc.cab.servicecomm - // TODO InvalidArgumentException and UnsupportedOperationException should not be added to the error map, only - // service-specific subtypes ''' public class «className» { @@ -61,10 +59,6 @@ class ServiceFaultHandlerFactoryGenerator «FOR exception : exceptions.sortBy[name]» errorMap.put("«Util.getCommonExceptionName(exception, basicJavaSourceGenerator.qualifiedNameProvider)»", «getClassOrObject(typeResolver.resolve(exception))»); «ENDFOR» - - // most commonly used exception types - errorMap.put("«Constants.INVALID_ARGUMENT_EXCEPTION_FAULT_HANDLER»", «getClassOrObject(typeResolver.resolve("java.lang.IllegalArgumentException"))»); - errorMap.put("«Constants.UNSUPPORTED_OPERATION_EXCEPTION_FAULT_HANDLER»", «getClassOrObject(typeResolver.resolve("java.lang.UnsupportedOperationException"))»); } public static final «typeResolver.resolve(JavaClassNames.SERVICE_FAULT_HANDLER)» createServiceFaultHandler() diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/TypeResolver.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/TypeResolver.xtend index c8f32c3f..b06724e4 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/TypeResolver.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/TypeResolver.xtend @@ -105,14 +105,6 @@ class TypeResolver { var name = qualifiedNameProvider.getFullyQualifiedName(element) - // try to resolve CAB-related pseudo-exceptions - if (element.isException) - { - val exceptionName = resolveException(name.toString) - if (exceptionName !== null) - return new ResolvedName(exceptionName, TransformType.PACKAGE, fullyQualified) - } - if (name === null) { if (element instanceof AbstractType) @@ -157,20 +149,6 @@ class TypeResolver return new ResolvedName(fullyQualifiedName, TransformType.PACKAGE, fullyQualified) } - def String resolveException(String name) - { - // temporarily some special handling for exceptions, because not all - // C++ CAB exceptions are supported by the Java CAB - switch (name) - { - case "BTC.Commons.Core.InvalidArgumentException": - // TODO shouldn't this use resolve("java.util.IllegalArgumentException")? - "IllegalArgumentException" - default: - null - } - } - private static def String getObservableName(EventDeclaration event) { if (event.name === null) diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/util/Constants.java b/com.btc.serviceidl/src/com/btc/serviceidl/util/Constants.java index cbb8e1e5..d890d802 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/util/Constants.java +++ b/com.btc.serviceidl/src/com/btc/serviceidl/util/Constants.java @@ -56,11 +56,6 @@ public interface Constants { public static final String FILE_NAME_ODB_COMMON = "common"; public static final String FILE_NAME_ODB_TRAITS = "traits"; - // GUID for default exception registration thrown by not implemented methods - public static final String UNSUPPORTED_OPERATION_EXCEPTION_FAULT_HANDLER = "BTC.Commons.Core.UnsupportedOperationException"; - - public static final String INVALID_ARGUMENT_EXCEPTION_FAULT_HANDLER = "BTC.Commons.Core.InvalidArgumentException"; - public static final int DEFAULT_PORT = 5555; public static final String AUTO_GENERATED_METHOD_STUB_MESSAGE = "Auto-generated method stub is not implemented!"; From 547ecce0e4c604765a72ee7352364c754a949050 Mon Sep 17 00:00:00 2001 From: Simon Giesecke Date: Tue, 7 Aug 2018 15:23:47 +0200 Subject: [PATCH 2/3] Added comments, simplified code --- .../serviceidl/generator/cpp/BasicCppGenerator.xtend | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/BasicCppGenerator.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/BasicCppGenerator.xtend index 7f0d21b1..76faee43 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/BasicCppGenerator.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/BasicCppGenerator.xtend @@ -347,6 +347,7 @@ class BasicCppGenerator def CharSequence generateIncludes(boolean isHeader) { + // TODO filter out self from includes (here, or already in the TypeResolver.resolve call? val includes = typeResolver.includes val result = new StringBuilder() @@ -360,16 +361,16 @@ class BasicCppGenerator throw new IllegalArgumentException("Unconfigured include groups: " + includes.keySet.join(", ")) } - result.append( - ''' - «IF !isHeader && paramBundle.projectType == ProjectType.SERVER_RUNNER» + // TODO remove this (at least from here) + if (!isHeader && paramBundle.projectType == ProjectType.SERVER_RUNNER) + result.append( + ''' #ifndef NOMINMAX #define NOMINMAX #endif #include - «ENDIF» - ''') + ''') return result } From 1f602b1555bceb1ab0e1ff2ea1097fff5d8a1279 Mon Sep 17 00:00:00 2001 From: Simon Giesecke Date: Tue, 7 Aug 2018 15:38:11 +0200 Subject: [PATCH 3/3] Extract common functionality into GeneratorUtil.getProtobufFunctionName --- .../btc/serviceidl/generator/common/GeneratorUtil.xtend | 8 ++++++++ .../com/btc/serviceidl/generator/cpp/ProtobufUtil.xtend | 4 +--- .../com/btc/serviceidl/generator/java/ProtobufUtil.xtend | 3 +-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/common/GeneratorUtil.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/common/GeneratorUtil.xtend index d14e7856..05642696 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/common/GeneratorUtil.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/common/GeneratorUtil.xtend @@ -20,6 +20,7 @@ import com.btc.serviceidl.idl.AbstractTypeReference import com.btc.serviceidl.idl.AliasDeclaration import com.btc.serviceidl.idl.EnumDeclaration import com.btc.serviceidl.idl.ExceptionDeclaration +import com.btc.serviceidl.idl.FunctionDeclaration import com.btc.serviceidl.idl.IDLSpecification import com.btc.serviceidl.idl.InterfaceDeclaration import com.btc.serviceidl.idl.ModuleDeclaration @@ -255,4 +256,11 @@ class GeneratorUtil // (in the generator settings?) idl.eResource.URI.lastSegment.replace(".idl", "") + if (artifactNature == ArtifactNature.DOTNET) ".NET" else "" } + + static def String getProtobufFunctionName(FunctionDeclaration object, ProtobufType protobufType) + { + val scopeDeterminant = object.scopeDeterminant + #[Names.plain(scopeDeterminant), protobufType.getName, Names.plain(object) + protobufType.getName].join("_") + } + } diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ProtobufUtil.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ProtobufUtil.xtend index d0aa2351..cdf6e2bb 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ProtobufUtil.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/cpp/ProtobufUtil.xtend @@ -50,13 +50,11 @@ class ProtobufUtil val paramBundle = ParameterBundle.createBuilder(scopeDeterminant.moduleStack).with(ProjectType.PROTOBUF).build - // TODO this is cloned by java.ProtobufUtil(.getLocalName?) val result = GeneratorUtil.getTransformedModuleName(paramBundle, ArtifactNature.CPP, TransformType.NAMESPACE) + Constants.SEPARATOR_NAMESPACE + if (object instanceof InterfaceDeclaration) Names.plain(object) + protobufType.getName else if (object instanceof FunctionDeclaration) - Names.plain(scopeDeterminant) + "_" + protobufType.getName + "_" + Names.plain(object) + - protobufType.getName + getProtobufFunctionName(object, protobufType) else Names.plain(object) diff --git a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ProtobufUtil.xtend b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ProtobufUtil.xtend index fb69fcbd..a139c10b 100644 --- a/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ProtobufUtil.xtend +++ b/com.btc.serviceidl/src/com/btc/serviceidl/generator/java/ProtobufUtil.xtend @@ -70,8 +70,7 @@ class ProtobufUtil val scopeDeterminant = object.scopeDeterminant if (object instanceof FunctionDeclaration && Util.ensurePresentOrThrow(optProtobufType)) - Names.plain(scopeDeterminant) + "_" + optProtobufType.get.getName + "_" + Names.plain(object) + - optProtobufType.get.getName + getProtobufFunctionName(object as FunctionDeclaration, optProtobufType.get) else (if (scopeDeterminant instanceof ModuleDeclaration) Constants.FILE_NAME_TYPES