Protobuf: fixed comparison of enums in parseFieldFrom, refactored generated code in this function

This commit is contained in:
dsavvinov
2016-08-16 13:31:28 +03:00
parent ac0cdeb200
commit 07b4b87984
2 changed files with 51 additions and 15 deletions
@@ -6,14 +6,23 @@ EXE = protoc
SRCDIR = src
BINDIR = bin
TESTDIR = test
KTPROJECT = protoc-test-project
KTOUT = $(KTPROJECT)/src/kotlin
JAVAOUT = $(KTPROJECT)/src
PROJECTS = protoc-tests
# Project for Java-backend
JVPROJECT = $(PROJECTS)/kt_java_tests
JVKTOUT = $(JVPROJECT)/src/kotlin_msg
JAVAOUT = $(JVPROJECT)/src
# Project for JS-backed
JSPROJECT = $(PROJECTS)/kt_js_tests
JSKTOUT = $(JSPROJECT)/src/kotlin_msg
JSOUT = $(JSPROJECT)/src/js_msg
# Build protoc-executable
all: $(EXE)
OBJECTS = $(patsubst $(SRCDIR)/%.cc,$(BINDIR)/%.o,$(wildcard $(SRCDIR)/*.cc))
KTARTIFACTS = $(patsubst $(TESTDIR)/%.proto,$(KTOUT)/%.kt,$(wildcard $(TESTDIR)/*.proto))
all: $(EXE)
$(EXE): $(BINDIR) $(OBJECTS)
$(CXX) $(OBJECTS) -o $(EXE) $(LDFLAGS)
@@ -23,28 +32,50 @@ $(BINDIR)/%.o: $(SRCDIR)/%.cc
include $(wildcard $(BINDIR)/*.d)
# Create auxillary directories
$(BINDIR):
mkdir -p $(BINDIR)
$(KTOUT):
mkdir -p $(KTOUT)
$(JVKTOUT):
mkdir -p $(JVKTOUT)
$(JAVAOUT):
mkdir -p $(JAVAOUT)
$(JSKTOUT):
mkdir -p $(JSKTOUT)
$(JSOUT):
mkdir -p $(JSOUT)
clean:
rm -rf $(BINDIR)
rm $(EXE)
rm -rf $(KTOUT)
rm -rf $(JVKTOUT)
rm -rf $(JAVAOUT)/java_msg
rm -rf $(JSKTOUT)
rm -rf $(JSOUT)
$(KTOUT)/%.kt: $(TESTDIR)/%.proto $(EXE)
./protoc --kotlin_out=$(KTOUT) $<
# Java-backend tests generation
$(JVKTOUT)/%.kt: $(TESTDIR)/%.proto $(EXE)
./protoc --kotlin_out=$(JVKTOUT) $<
java: $(TESTDIR)/*.proto
protoc --java_out=$(JAVAOUT) $^
generate: $(KTOUT) $(JAVAOUT) $(KTARTIFACTS) java
JVKT_ARTIFACTS = $(patsubst $(TESTDIR)/%.proto,$(JVKTOUT)/%.kt,$(wildcard $(TESTDIR)/*.proto))
# JS-backend tests generation
$(JSKTOUT)/%.kt: $(TESTDIR)/%.proto $(EXE)
./protoc --kotlin_out=$(JSKTOUT) $<
.PHONY: clean all generate java
js: $(TESTDIR)/*.proto
protoc --js_out=$(JSOUT) $^
JS_ARTIFACTS = $(patsubst $(TESTDIR)/%.proto,$(JSKTOUT)/%.kt,$(wildcard $(TESTDIR)/*.proto))
# Generate proto-messages from proto-sources
generate: $(JVKTOUT) $(JAVAOUT) $(JVKT_ARTIFACTS) $(JSKTOUT) $(JSOUT) $(JS_ARTIFACTS) js java
.PHONY: clean all generate java js
@@ -315,7 +315,12 @@ void ClassGenerator::generateParseMethods(io::Printer *printer) const {
printer->Indent();
// check that wire type of that field is equal to expected
printer->Print(vars, "if (wireType != $kotlinWireType$) { errorCode = 1; return false } \n");
printer->Print(vars, "if (wireType.id != $kotlinWireType$.id) {\n");
printer->Indent();
printer->Print("errorCode = 1\n"
"return false\n");
printer->Outdent();
printer->Print("}\n");
properties[i]->generateSerializationCode(printer, /* isRead = */ true, /* noTag = */ true, /* isField = */ false);
@@ -328,7 +333,7 @@ void ClassGenerator::generateParseMethods(io::Printer *printer) const {
printer->Outdent();
printer->Print("}\n"); // when-clause
printer->Print("return true");
printer->Print("return true\n");
printer->Outdent();
printer->Print("}\n"); // parseFieldFrom body
printer->Print("\n");