|
|
|
@ -29,55 +29,13 @@ |
|
|
|
|
using ::google::protobuf::compiler::objectivec:: |
|
|
|
|
IsProtobufLibraryBundledProtoFile; |
|
|
|
|
using ::google::protobuf::compiler::objectivec::ProtobufLibraryFrameworkName; |
|
|
|
|
using ::grpc_objective_c_generator::LocalImport; |
|
|
|
|
using ::grpc_objective_c_generator::PreprocIfElse; |
|
|
|
|
using ::grpc_objective_c_generator::PreprocIfNot; |
|
|
|
|
using ::grpc_objective_c_generator::SystemImport; |
|
|
|
|
|
|
|
|
|
namespace { |
|
|
|
|
|
|
|
|
|
inline ::grpc::string LocalImport(const ::grpc::string &import) { |
|
|
|
|
return ::grpc::string("#import \"" + import + "\"\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline ::grpc::string SystemImport(const ::grpc::string &import) { |
|
|
|
|
return ::grpc::string("#import <" + import + ">\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Preprocessor condition flags.
|
|
|
|
|
using PreprocConditionFlag = uint32_t; |
|
|
|
|
constexpr PreprocConditionFlag kInvertCondition = 0b0001; |
|
|
|
|
constexpr PreprocConditionFlag kCheckIfDefined = 0b0010; |
|
|
|
|
|
|
|
|
|
// Convenience flag set.
|
|
|
|
|
constexpr PreprocConditionFlag kIfNotOrNotDefined = |
|
|
|
|
kInvertCondition | kCheckIfDefined; |
|
|
|
|
|
|
|
|
|
inline ::grpc::string PreprocConditional(::grpc::string symbol, |
|
|
|
|
PreprocConditionFlag flags) { |
|
|
|
|
if (flags & kCheckIfDefined) { |
|
|
|
|
return (flags & kInvertCondition) |
|
|
|
|
? "!defined(" + symbol + ") || !" + symbol |
|
|
|
|
: "defined(" + symbol + ") && " + symbol; |
|
|
|
|
} else { |
|
|
|
|
return (flags & kInvertCondition) |
|
|
|
|
? "!" + symbol |
|
|
|
|
: symbol; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline ::grpc::string PreprocIf(const ::grpc::string& symbol, |
|
|
|
|
const ::grpc::string& if_true, |
|
|
|
|
PreprocConditionFlag flags = 0) { |
|
|
|
|
::grpc::string condition = PreprocConditional(symbol, flags); |
|
|
|
|
return ::grpc::string("#if " + condition + "\n" + if_true + "#endif\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline ::grpc::string PreprocIfElse(const ::grpc::string& symbol, |
|
|
|
|
const ::grpc::string& if_true, |
|
|
|
|
const ::grpc::string& if_false, |
|
|
|
|
PreprocConditionFlag flags = 0) { |
|
|
|
|
::grpc::string condition = PreprocConditional(symbol, flags); |
|
|
|
|
return ::grpc::string("#if " + condition + "\n" + |
|
|
|
|
if_true + "#else\n" + if_false + "#endif\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline ::grpc::string ImportProtoHeaders( |
|
|
|
|
const grpc::protobuf::FileDescriptor* dep, |
|
|
|
|
const char *indent) { |
|
|
|
@ -97,10 +55,10 @@ inline ::grpc::string ImportProtoHeaders( |
|
|
|
|
"GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS"; |
|
|
|
|
return PreprocIfElse(kFrameworkImportsCondition, |
|
|
|
|
indent + SystemImport(framework_header), |
|
|
|
|
indent + LocalImport(header), |
|
|
|
|
kCheckIfDefined); |
|
|
|
|
indent + LocalImport(header)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { |
|
|
|
@ -123,10 +81,6 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { |
|
|
|
|
static const ::grpc::string kForwardDeclare = |
|
|
|
|
"GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO"; |
|
|
|
|
|
|
|
|
|
auto OmitIf = [](const ::grpc::string& s, const ::grpc::string& v) { |
|
|
|
|
return PreprocIf(s, v, kInvertCondition | kCheckIfDefined); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
::grpc::string file_name = |
|
|
|
|
google::protobuf::compiler::objectivec::FilePath(file); |
|
|
|
|
|
|
|
|
@ -164,14 +118,14 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Write(context, file_name + ".pbrpc.h", |
|
|
|
|
OmitIf(kForwardDeclare, imports) + "\n" + |
|
|
|
|
OmitIf(kProtocolOnly, system_imports) + "\n" + |
|
|
|
|
PreprocIfElse(kForwardDeclare, class_declarations, class_imports, |
|
|
|
|
kCheckIfDefined) + "\n" + |
|
|
|
|
PreprocIfNot(kForwardDeclare, imports) + "\n" + |
|
|
|
|
PreprocIfNot(kProtocolOnly, system_imports) + "\n" + |
|
|
|
|
PreprocIfElse(kForwardDeclare, class_declarations, |
|
|
|
|
class_imports) + "\n" + |
|
|
|
|
forward_declarations + "\n" + |
|
|
|
|
kNonNullBegin + "\n" + |
|
|
|
|
protocols + "\n" + |
|
|
|
|
OmitIf(kProtocolOnly, interfaces) + "\n" + |
|
|
|
|
PreprocIfNot(kProtocolOnly, interfaces) + "\n" + |
|
|
|
|
kNonNullEnd + "\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -196,7 +150,7 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Write(context, file_name + ".pbrpc.m", |
|
|
|
|
OmitIf(kProtocolOnly, |
|
|
|
|
PreprocIfNot(kProtocolOnly, |
|
|
|
|
imports + "\n" + class_imports + "\n" + definitions)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|