diff options
Diffstat (limited to 'cpp/src/slice2java/Gen.h')
-rw-r--r-- | cpp/src/slice2java/Gen.h | 202 |
1 files changed, 61 insertions, 141 deletions
diff --git a/cpp/src/slice2java/Gen.h b/cpp/src/slice2java/Gen.h index 8e29112565e..1850a3b0dfc 100644 --- a/cpp/src/slice2java/Gen.h +++ b/cpp/src/slice2java/Gen.h @@ -29,43 +29,51 @@ protected: enum ParamDir { InParam, OutParam }; - - ParamDeclList getOutParams(const OperationPtr&); - + struct DocComment : public IceUtil::SimpleShared + { + std::string overview; + std::map<std::string, std::string> params; + std::map<std::string, std::string> exceptions; + std::string returns; + bool deprecated; + std::string deprecateReason; + std::string misc; + }; + typedef IceUtil::Handle<DocComment> DocCommentPtr; + + std::string getResultType(const OperationPtr&, const std::string&, bool, bool); + void writeResultType(::IceUtilInternal::Output&, const OperationPtr&, const std::string&, const DocCommentPtr&); + void writeMarshaledResultType(::IceUtilInternal::Output&, const OperationPtr&, const std::string&, + const DocCommentPtr&); + + void allocatePatcher(::IceUtilInternal::Output&, const TypePtr&, const std::string&, const std::string&, bool); + std::string getPatcher(const TypePtr&, const std::string&, const std::string&); + + std::string getFutureType(const OperationPtr&, const std::string&); + std::string getFutureImplType(const OperationPtr&, const std::string&); + // // Compose the parameter lists for an operation. // - std::vector<std::string> getParams(const OperationPtr&, const std::string&, bool, bool); - std::vector<std::string> getParamsProxy(const OperationPtr&, const std::string&, bool, bool); - std::vector<std::string> getInOutParams(const OperationPtr&, const std::string&, ParamDir, bool, bool); - std::vector<std::string> getParamsAsync(const OperationPtr&, const std::string&, bool, bool); - std::vector<std::string> getParamsAsyncCB(const OperationPtr&, const std::string&, bool, bool); - - std::string getAsyncCallbackInterface(const OperationPtr&, const std::string&); - std::string getAsyncCallbackBaseClass(const OperationPtr&, bool); - std::string getLambdaResponseCB(const OperationPtr&, const std::string&); - std::vector<std::string> getParamsAsyncLambda(const OperationPtr&, const std::string&, - bool context = false, bool sentCB = false, - bool optionalMapping = false, - bool inParams = true); - std::vector<std::string> getArgsAsyncLambda(const OperationPtr&, const std::string&, - bool context = false, bool sentCB = false); + std::vector<std::string> getParams(const OperationPtr&, const std::string&); + std::vector<std::string> getParamsProxy(const OperationPtr&, const std::string&, bool, bool = false); // // Compose the argument lists for an operation. // std::vector<std::string> getArgs(const OperationPtr&); - std::vector<std::string> getInOutArgs(const OperationPtr&, ParamDir); - std::vector<std::string> getArgsAsync(const OperationPtr&); - std::vector<std::string> getArgsAsyncCB(const OperationPtr&); + std::vector<std::string> getInArgs(const OperationPtr&, bool = false); - void writeMarshalUnmarshalParams(::IceUtilInternal::Output&, const std::string&, const ParamDeclList&, - const OperationPtr&, int&, bool, bool, bool = false); + void writeMarshalProxyParams(::IceUtilInternal::Output&, const std::string&, const OperationPtr&, bool); + void writeUnmarshalProxyResults(::IceUtilInternal::Output&, const std::string&, const OperationPtr&); + void writeMarshalServantResults(::IceUtilInternal::Output&, const std::string&, const OperationPtr&, + const std::string&); // - // Generate a throws clause containing only non-local exceptions. + // Generate a throws clause containing only checked exceptions. + // op is provided only when we want to check for the java:UserException metadata // - void writeThrowsClause(const std::string&, const ExceptionList&); + void writeThrowsClause(const std::string&, const ExceptionList&, const OperationPtr& op = 0); // // Generate code to compute a hash code for a type. @@ -76,22 +84,18 @@ protected: // // Marshal/unmarshal a data member. // - void writeMarshalDataMember(::IceUtilInternal::Output&, const std::string&, const DataMemberPtr&, int&); - void writeUnmarshalDataMember(::IceUtilInternal::Output&, const std::string&, const DataMemberPtr&, int&, - bool, int&); - void writeStreamMarshalDataMember(::IceUtilInternal::Output&, const std::string&, const DataMemberPtr&, int&); - void writeStreamUnmarshalDataMember(::IceUtilInternal::Output&, const std::string&, const DataMemberPtr&, int&, - bool, int&); + void writeMarshalDataMember(::IceUtilInternal::Output&, const std::string&, const DataMemberPtr&, int&, bool = false); + void writeUnmarshalDataMember(::IceUtilInternal::Output&, const std::string&, const DataMemberPtr&, int&, bool = false); // - // Generate a patcher class. + // Generate dispatch methods for a class or interface. // - void writePatcher(::IceUtilInternal::Output&, const std::string&, const DataMemberList&, const DataMemberList&, bool); + void writeDispatch(::IceUtilInternal::Output&, const ClassDefPtr&); // - // Generate dispatch and marshalling methods for a class or interface. + // Generate marshaling methods for a class or interface. // - void writeDispatchAndMarshalling(::IceUtilInternal::Output&, const ClassDefPtr&, bool); + void writeMarshaling(::IceUtilInternal::Output&, const ClassDefPtr&); // // Write a constant or default value initializer. @@ -105,20 +109,17 @@ protected: void writeDataMemberInitializers(::IceUtilInternal::Output&, const DataMemberList&, const std::string&); // - // Write doc comments. + // Handle doc comments. // static StringList splitComment(const ContainedPtr&); - static void writeDocComment(::IceUtilInternal::Output&, const ContainedPtr&, - const std::string&, const std::string& = ""); - static void writeDocComment(::IceUtilInternal::Output&, const std::string&, const std::string&); - static void writeDocCommentOp(::IceUtilInternal::Output&, const OperationPtr&); - - static void writeDocCommentAsync(::IceUtilInternal::Output&, const OperationPtr&, - ParamDir, const std::string& = ""); - static void writeDocCommentAMI(::IceUtilInternal::Output&, const OperationPtr&, ParamDir, const std::string& = "", - const std::string& = "", const std::string& = "", const std::string& = "", - const std::string& = ""); - static void writeDocCommentParam(::IceUtilInternal::Output&, const OperationPtr&, ParamDir, bool = true); + DocCommentPtr parseDocComment(const ContainedPtr&); + void writeDocCommentLines(::IceUtilInternal::Output&, const std::string&); + void writeDocComment(::IceUtilInternal::Output&, const DocCommentPtr&); + void writeDocComment(::IceUtilInternal::Output&, const std::string&); + void writeProxyDocComment(::IceUtilInternal::Output&, const OperationPtr&, const std::string&, const DocCommentPtr&, + bool, bool); + void writeServantDocComment(::IceUtilInternal::Output&, const OperationPtr&, const std::string&, + const DocCommentPtr&, bool); }; class Gen : private ::IceUtil::noncopyable @@ -131,10 +132,8 @@ public: const std::string&); ~Gen(); - void generate(const UnitPtr&, bool); - void generateTie(const UnitPtr&); + void generate(const UnitPtr&); void generateImpl(const UnitPtr&); - void generateImplTie(const UnitPtr&); static void writeChecksumClass(const std::string&, const std::string&, const ChecksumMap&); @@ -144,27 +143,6 @@ private: std::vector<std::string> _includePaths; std::string _dir; - class OpsVisitor : public JavaVisitor - { - public: - - OpsVisitor(const std::string&); - - virtual bool visitClassDefStart(const ClassDefPtr&); - - private: - void writeOperations(const ClassDefPtr&, bool); - }; - - class TieVisitor : public JavaVisitor - { - public: - - TieVisitor(const std::string&); - - virtual bool visitClassDefStart(const ClassDefPtr&); - }; - class PackageVisitor : public JavaVisitor { public: @@ -178,10 +156,11 @@ private: { public: - TypesVisitor(const std::string&, bool); + TypesVisitor(const std::string&); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitClassDefEnd(const ClassDefPtr&); + virtual void visitOperation(const OperationPtr&); virtual bool visitExceptionStart(const ExceptionPtr&); virtual void visitExceptionEnd(const ExceptionPtr&); virtual bool visitStructStart(const StructPtr&); @@ -196,8 +175,6 @@ private: // Verifies that a data member method does not conflict with an operation. // bool validateMethod(const OperationList&, const std::string&, int, const std::string&, const std::string&); - - bool _stream; }; class CompactIdVisitor : public JavaVisitor @@ -209,40 +186,14 @@ private: virtual bool visitClassDefStart(const ClassDefPtr&); }; - class HolderVisitor : public JavaVisitor - { - public: - - HolderVisitor(const std::string&); - - virtual bool visitClassDefStart(const ClassDefPtr&); - virtual bool visitStructStart(const StructPtr&); - virtual void visitSequence(const SequencePtr&); - virtual void visitDictionary(const DictionaryPtr&); - virtual void visitEnum(const EnumPtr&); - - private: - - void writeHolder(const TypePtr&); - }; - class HelperVisitor : public JavaVisitor { public: - HelperVisitor(const std::string&, bool); + HelperVisitor(const std::string&); - virtual bool visitClassDefStart(const ClassDefPtr&); - virtual bool visitStructStart(const StructPtr&); virtual void visitSequence(const SequencePtr&); virtual void visitDictionary(const DictionaryPtr&); - virtual void visitEnum(const EnumPtr&); - - private: - - void writeOperation(const ClassDefPtr&, const std::string&, const OperationPtr&, bool); - - bool _stream; }; class ProxyVisitor : public JavaVisitor @@ -260,67 +211,36 @@ private: { public: - DispatcherVisitor(const std::string&, bool); + DispatcherVisitor(const std::string&); virtual bool visitClassDefStart(const ClassDefPtr&); - - private: - - bool _stream; }; - class BaseImplVisitor : public JavaVisitor + class ImplVisitor : public JavaVisitor { public: - BaseImplVisitor(const std::string&); + ImplVisitor(const std::string&); + + virtual bool visitClassDefStart(const ClassDefPtr&); protected: // - // Generate code to emit a local variable declaration and initialize it - // if necessary. + // Returns a default value for the type. // - void writeDecl(::IceUtilInternal::Output&, const std::string&, const std::string&, const TypePtr&, - const StringList&, bool); + std::string getDefaultValue(const std::string&, const TypePtr&, bool); // - // Generate code to return a value. + // Generate code to initialize the operation result. // - void writeReturn(::IceUtilInternal::Output&, const TypePtr&, bool); + bool initResult(::IceUtilInternal::Output&, const std::string&, const OperationPtr&); // // Generate an operation. // void writeOperation(::IceUtilInternal::Output&, const std::string&, const OperationPtr&, bool); }; - - class ImplVisitor : public BaseImplVisitor - { - public: - - ImplVisitor(const std::string&); - - virtual bool visitClassDefStart(const ClassDefPtr&); - }; - - class ImplTieVisitor : public BaseImplVisitor - { - public: - - ImplTieVisitor(const std::string&); - - virtual bool visitClassDefStart(const ClassDefPtr&); - }; - - class AsyncVisitor : public JavaVisitor - { - public: - - AsyncVisitor(const std::string&); - - virtual void visitOperation(const OperationPtr&); - }; }; } |