From 28dd68bbdac0e9d9d2e117b991e21142cc9759e4 Mon Sep 17 00:00:00 2001 From: Bernard Normier Date: Tue, 26 Dec 2023 10:40:46 -0500 Subject: [PATCH] Simplify includes in generated c++ code (#1621) --- cpp/include/Ice/Communicator.h | 2 - cpp/include/Ice/Ice.h | 85 +++++++++++-------- cpp/include/Ice/Properties.h | 2 +- cpp/include/Ice/StreamHelpers.h | 2 + cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj | 49 +++++++++++ .../msbuild/ice++11/ice++11.vcxproj.filters | 27 ++++++ cpp/src/Ice/msbuild/ice/ice.vcxproj | 51 +++++++++++ cpp/src/Ice/msbuild/ice/ice.vcxproj.filters | 27 ++++++ cpp/src/Slice/Parser.cpp | 6 ++ cpp/src/Slice/Parser.h | 1 + cpp/src/slice2cpp/Gen.cpp | 76 +++-------------- js/src/Ice/.gitignore | 2 + js/src/Ice/sources.json | 1 + matlab/lib/msbuild/ice.proj | 1 + slice/Ice/BuiltinSequences.ice | 6 ++ slice/Ice/Context.ice | 3 + slice/Ice/EndpointTypes.ice | 3 + slice/Ice/Identity.ice | 5 ++ slice/Ice/Locator.ice | 5 +- slice/Ice/OperationMode.ice | 4 + slice/Ice/Properties.ice | 3 +- slice/Ice/PropertiesAdmin.ice | 7 +- slice/Ice/PropertyDict.ice | 33 +++++++ slice/Ice/Version.ice | 5 ++ 24 files changed, 295 insertions(+), 111 deletions(-) create mode 100644 slice/Ice/PropertyDict.ice diff --git a/cpp/include/Ice/Communicator.h b/cpp/include/Ice/Communicator.h index 1c5f2e60b37..b0b8ed252bc 100644 --- a/cpp/include/Ice/Communicator.h +++ b/cpp/include/Ice/Communicator.h @@ -39,8 +39,6 @@ #include #include #include -#include -#include #include #include #include diff --git a/cpp/include/Ice/Ice.h b/cpp/include/Ice/Ice.h index 3694ef76233..53b1981bc4d 100644 --- a/cpp/include/Ice/Ice.h +++ b/cpp/include/Ice/Ice.h @@ -8,48 +8,61 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include #include +#include +#include +#include #include #include #include #include -#include -#if !defined(__APPLE__) || TARGET_OS_IPHONE == 0 -# include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if !defined(__APPLE__) || TARGET_OS_IPHONE == 0 -# include +#include +#include + +#ifndef ICE_BUILDING_GENERATED_CODE + + // We don't need to see the following headers when building the generated code. + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# if !defined(__APPLE__) || TARGET_OS_IPHONE == 0 +# include +# include +# endif +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + + // Generated header files: +# include +# include +# include +# include +# include +# include +# include + #endif -#include -#include -#include -#include -#include -#include #include #endif diff --git a/cpp/include/Ice/Properties.h b/cpp/include/Ice/Properties.h index 926580461f4..432e0cb685b 100644 --- a/cpp/include/Ice/Properties.h +++ b/cpp/include/Ice/Properties.h @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #ifndef ICE_IGNORE_VERSION diff --git a/cpp/include/Ice/StreamHelpers.h b/cpp/include/Ice/StreamHelpers.h index 16292f9d9f7..9a139b93d2e 100644 --- a/cpp/include/Ice/StreamHelpers.h +++ b/cpp/include/Ice/StreamHelpers.h @@ -6,6 +6,8 @@ #define ICE_STREAM_HELPERS_H #include +#include +#include #ifndef ICE_CPP11_MAPPING # include diff --git a/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj b/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj index aaa79c702aa..686eb1c7bd5 100644 --- a/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj +++ b/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj @@ -257,6 +257,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -347,6 +353,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -437,6 +449,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -527,6 +545,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -738,6 +762,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -828,6 +858,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -918,6 +954,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -1008,6 +1050,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -1035,6 +1083,7 @@ + diff --git a/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj.filters b/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj.filters index ddc3432c7fd..a3a3884defc 100644 --- a/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj.filters +++ b/cpp/src/Ice/msbuild/ice++11/ice++11.vcxproj.filters @@ -702,6 +702,18 @@ Source Files\x64\Release + + Source Files\Win32\Debug + + + Source Files\x64\Debug + + + Source Files\Win32\Release + + + Source Files\x64\Release + @@ -895,6 +907,18 @@ Header Files\x64\Release + + Header Files\Win32\Debug + + + Header Files\x64\Debug + + + Header Files\Win32\Release + + + Header Files\x64\Release + @@ -942,5 +966,8 @@ Slice Files + + Slice Files + \ No newline at end of file diff --git a/cpp/src/Ice/msbuild/ice/ice.vcxproj b/cpp/src/Ice/msbuild/ice/ice.vcxproj index 455ba00c032..8177e603304 100644 --- a/cpp/src/Ice/msbuild/ice/ice.vcxproj +++ b/cpp/src/Ice/msbuild/ice/ice.vcxproj @@ -262,6 +262,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -352,6 +358,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -442,6 +454,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -532,6 +550,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -743,6 +767,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -833,6 +863,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -923,6 +959,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -1013,6 +1055,12 @@ true ..\..\..\..\..\slice\Ice\PropertiesAdmin.ice + + true + true + true + ..\..\..\..\..\slice\Ice\PropertyDict.ice + true true @@ -1040,6 +1088,9 @@ + + Document + diff --git a/cpp/src/Ice/msbuild/ice/ice.vcxproj.filters b/cpp/src/Ice/msbuild/ice/ice.vcxproj.filters index 489273636bf..614871311fc 100644 --- a/cpp/src/Ice/msbuild/ice/ice.vcxproj.filters +++ b/cpp/src/Ice/msbuild/ice/ice.vcxproj.filters @@ -701,6 +701,18 @@ Source Files + + Source Files\Win32\Debug + + + Source Files\x64\Debug + + + Source Files\Win32\Release + + + Source Files\x64\Release + @@ -894,6 +906,18 @@ Source Files + + Header Files\Win32\Debug + + + Header Files\x64\Debug + + + Header Files\Win32\Release + + + Header Files\x64\Release + @@ -941,5 +965,8 @@ Slice Files + + Slice Files + \ No newline at end of file diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp index ad80870b734..6809ad96049 100644 --- a/cpp/src/Slice/Parser.cpp +++ b/cpp/src/Slice/Parser.cpp @@ -229,6 +229,12 @@ Slice::DefinitionContext::hasMetaData() const return !_metaData.empty(); } +bool +Slice::DefinitionContext::hasMetaDataDirective(const string& directive) const +{ + return findMetaData(directive) == directive; +} + void Slice::DefinitionContext::setMetaData(const StringList& metaData) { diff --git a/cpp/src/Slice/Parser.h b/cpp/src/Slice/Parser.h index 9bfebbaf6d2..0588f1c1617 100644 --- a/cpp/src/Slice/Parser.h +++ b/cpp/src/Slice/Parser.h @@ -255,6 +255,7 @@ class DefinitionContext : public ::IceUtil::SimpleShared void setSeenDefinition(); bool hasMetaData() const; + bool hasMetaDataDirective(const std::string&) const; void setMetaData(const StringList&); std::string findMetaData(const std::string&) const; StringList getMetaData() const; diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 98669644ae3..5c023989a4e 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -703,6 +703,8 @@ void Slice::Gen::generate(const UnitPtr& p) { string file = p->topLevelFile(); + DefinitionContextPtr dc = p->findDefinitionContext(file); + assert(dc); // // Give precedence to header-ext/source-ext file metadata. @@ -724,8 +726,6 @@ Slice::Gen::generate(const UnitPtr& p) // if(_dllExport.empty()) { - DefinitionContextPtr dc = p->findDefinitionContext(file); - assert(dc); static const string dllExportPrefix = "cpp:dll-export:"; string meta = dc->findMetaData(dllExportPrefix); if(meta.size() > dllExportPrefix.size()) @@ -839,75 +839,20 @@ Slice::Gen::generate(const UnitPtr& p) C << "\n#endif"; } + C << "\n#define ICE_BUILDING_GENERATED_CODE"; C << "\n#include <"; if(_include.size()) { C << _include << '/'; } C << _base << "." << _headerExtension << ">"; - C << "\n#include "; + C << "\n#include "; H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - - if(p->hasNonLocalClassDefs()) - { - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - H << "\n#include "; - if(p->hasContentsWithMetaData("amd")) - { - H << "\n#include "; - } - C << "\n#include "; - C << "\n#include "; - C << "\n#include "; - } - else if(p->hasLocalClassDefsWithAsync()) - { - H << "\n#include "; - } - else if(p->hasNonLocalClassDecls()) - { - H << "\n#include "; - } - - if(p->hasNonLocalClassDefs() || p->hasNonLocalExceptions()) - { - H << "\n#include "; - } - H << "\n#include "; - H << "\n#include "; - - if(p->hasExceptions()) - { - H << "\n#include "; - } - - if(p->usesNonLocals()) + if(!dc->hasMetaDataDirective("cpp:no-default-include")) { - C << "\n#include "; - C << "\n#include "; - } - - if(p->hasNonLocalExceptions()) - { - C << "\n#include "; - } - - if(p->hasContentsWithMetaData("preserve-slice")) - { - H << "\n#include "; - C << "\n#include "; + H << "\n#include "; } C << "\n#include "; @@ -931,8 +876,6 @@ Slice::Gen::generate(const UnitPtr& p) // in the top-level Slice file. // { - DefinitionContextPtr dc = p->findDefinitionContext(file); - assert(dc); StringList globalMetaData = dc->getMetaData(); for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end();) { @@ -5231,13 +5174,18 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p) if(s.find(prefix) == 0) { static const string cppIncludePrefix = "cpp:include:"; + static const string cppNoDefaultInclude = "cpp:no-default-include"; static const string cppSourceIncludePrefix = "cpp:source-include"; static const string cppHeaderExtPrefix = "cpp:header-ext:"; static const string cppSourceExtPrefix = "cpp:source-ext:"; static const string cppDllExportPrefix = "cpp:dll-export:"; static const string cppDoxygenIncludePrefix = "cpp:doxygen:include:"; - if(s.find(cppIncludePrefix) == 0 && s.size() > cppIncludePrefix.size()) + if(s == "cpp:no-default-include") + { + continue; + } + else if(s.find(cppIncludePrefix) == 0 && s.size() > cppIncludePrefix.size()) { continue; } diff --git a/js/src/Ice/.gitignore b/js/src/Ice/.gitignore index caff5a99d3d..409ff0a1ee2 100644 --- a/js/src/Ice/.gitignore +++ b/js/src/Ice/.gitignore @@ -67,6 +67,8 @@ PropertiesAdmin.d.ts PropertiesAdmin.js PropertiesF.d.ts PropertiesF.js +PropertyDict.d.ts +PropertyDict.js RemoteLogger.d.ts RemoteLogger.js Router.d.ts diff --git a/js/src/Ice/sources.json b/js/src/Ice/sources.json index c99fb87701d..0d980097220 100644 --- a/js/src/Ice/sources.json +++ b/js/src/Ice/sources.json @@ -35,6 +35,7 @@ "Ice/Properties.ice", "Ice/PropertiesAdmin.ice", "Ice/PropertiesF.ice", + "Ice/PropertyDict.ice", "Ice/RemoteLogger.ice", "Ice/Router.ice", "Ice/RouterF.ice", diff --git a/matlab/lib/msbuild/ice.proj b/matlab/lib/msbuild/ice.proj index 05834b04be0..0a4fdaf9f2d 100644 --- a/matlab/lib/msbuild/ice.proj +++ b/matlab/lib/msbuild/ice.proj @@ -27,6 +27,7 @@ + diff --git a/slice/Ice/BuiltinSequences.ice b/slice/Ice/BuiltinSequences.ice index dae28fde0c5..afc29ff8cca 100644 --- a/slice/Ice/BuiltinSequences.ice +++ b/slice/Ice/BuiltinSequences.ice @@ -8,6 +8,12 @@ [["cpp:doxygen:include:Ice/Ice.h"]] [["cpp:header-ext:h"]] +[["cpp:no-default-include"]] +[["cpp:include:Ice/Config.h"]] +[["cpp:include:Ice/ObjectF.h"]] +[["cpp:include:Ice/ProxyF.h"]] +[["cpp:include:Ice/ValueF.h"]] + [["ice-prefix"]] [["js:module:ice"]] diff --git a/slice/Ice/Context.ice b/slice/Ice/Context.ice index 6c1958f18c8..779512672ed 100644 --- a/slice/Ice/Context.ice +++ b/slice/Ice/Context.ice @@ -8,6 +8,9 @@ [["cpp:doxygen:include:Ice/Ice.h"]] [["cpp:header-ext:h"]] +[["cpp:no-default-include"]] +[["cpp:include:Ice/Config.h"]] + [["ice-prefix"]] [["js:module:ice"]] diff --git a/slice/Ice/EndpointTypes.ice b/slice/Ice/EndpointTypes.ice index 32fd25c2a6e..16d7b50be53 100644 --- a/slice/Ice/EndpointTypes.ice +++ b/slice/Ice/EndpointTypes.ice @@ -8,6 +8,9 @@ [["cpp:doxygen:include:Ice/Ice.h"]] [["cpp:header-ext:h"]] +[["cpp:no-default-include"]] +[["cpp:include:Ice/Config.h"]] + [["ice-prefix"]] [["js:module:ice"]] diff --git a/slice/Ice/Identity.ice b/slice/Ice/Identity.ice index c6e4f5986b5..cdc4b75d48c 100644 --- a/slice/Ice/Identity.ice +++ b/slice/Ice/Identity.ice @@ -8,6 +8,11 @@ [["cpp:doxygen:include:Ice/Ice.h"]] [["cpp:header-ext:h"]] +[["cpp:no-default-include"]] +[["cpp:include:Ice/Config.h"]] +[["cpp:include:Ice/Comparable.h"]] +[["cpp:include:Ice/StreamHelpers.h"]] + [["ice-prefix"]] [["js:module:ice"]] diff --git a/slice/Ice/Locator.ice b/slice/Ice/Locator.ice index 8d2b7e201a9..82ba9f75ed0 100644 --- a/slice/Ice/Locator.ice +++ b/slice/Ice/Locator.ice @@ -8,6 +8,8 @@ [["cpp:doxygen:include:Ice/Ice.h"]] [["cpp:header-ext:h"]] +[["cpp:source-include:Ice/Process.h"]] + [["ice-prefix"]] [["js:module:ice"]] @@ -19,7 +21,6 @@ [["python:pkgdir:Ice"]] #include -#include [["java:package:com.zeroc"]] @@ -27,6 +28,8 @@ module Ice { +interface Process; + /// This exception is raised if an adapter cannot be found. exception AdapterNotFoundException { diff --git a/slice/Ice/OperationMode.ice b/slice/Ice/OperationMode.ice index a065d432a21..4a34f6dc7fa 100644 --- a/slice/Ice/OperationMode.ice +++ b/slice/Ice/OperationMode.ice @@ -8,6 +8,10 @@ [["cpp:doxygen:include:Ice/Ice.h"]] [["cpp:header-ext:h"]] +[["cpp:no-default-include"]] +[["cpp:include:Ice/Config.h"]] +[["cpp:include:Ice/StreamHelpers.h"]] + [["ice-prefix"]] [["js:module:ice"]] diff --git a/slice/Ice/Properties.ice b/slice/Ice/Properties.ice index 7ac285b3ca0..02f3894e96f 100644 --- a/slice/Ice/Properties.ice +++ b/slice/Ice/Properties.ice @@ -18,7 +18,8 @@ [["python:pkgdir:Ice"]] -#include +#include +#include [["java:package:com.zeroc"]] diff --git a/slice/Ice/PropertiesAdmin.ice b/slice/Ice/PropertiesAdmin.ice index a12f0c97261..421bad9605d 100644 --- a/slice/Ice/PropertiesAdmin.ice +++ b/slice/Ice/PropertiesAdmin.ice @@ -18,18 +18,13 @@ [["python:pkgdir:Ice"]] -#include +#include [["java:package:com.zeroc"]] ["objc:prefix:ICE"] module Ice { - /// A simple collection of properties, represented as a dictionary of key/value pairs. Both key and value are - /// strings. - /// @see Properties#getPropertiesForPrefix - dictionary PropertyDict; - /// The PropertiesAdmin interface provides remote access to the properties of a communicator. interface PropertiesAdmin { diff --git a/slice/Ice/PropertyDict.ice b/slice/Ice/PropertyDict.ice new file mode 100644 index 00000000000..954fd58b10f --- /dev/null +++ b/slice/Ice/PropertyDict.ice @@ -0,0 +1,33 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["cpp:dll-export:ICE_API"]] +[["cpp:doxygen:include:Ice/Ice.h"]] +[["cpp:header-ext:h"]] + +[["cpp:no-default-include"]] +[["cpp:include:Ice/Config.h"]] + +[["ice-prefix"]] + +[["js:module:ice"]] +[["js:cjs-module"]] + +[["objc:dll-export:ICE_API"]] +[["objc:header-dir:objc"]] + +[["python:pkgdir:Ice"]] + +[["java:package:com.zeroc"]] + +["objc:prefix:ICE"] +module Ice +{ + /// A simple collection of properties, represented as a dictionary of key/value pairs. Both key and value are + /// strings. + /// @see Properties#getPropertiesForPrefix + dictionary PropertyDict; +} diff --git a/slice/Ice/Version.ice b/slice/Ice/Version.ice index 8ce67e2d690..cc941f26f26 100644 --- a/slice/Ice/Version.ice +++ b/slice/Ice/Version.ice @@ -8,6 +8,11 @@ [["cpp:doxygen:include:Ice/Ice.h"]] [["cpp:header-ext:h"]] +[["cpp:no-default-include"]] +[["cpp:include:Ice/Config.h"]] +[["cpp:include:Ice/Comparable.h"]] +[["cpp:include:Ice/StreamHelpers.h"]] + [["ice-prefix"]] [["js:module:ice"]]