From 07b4b879841f6a8bbafc1661c194ca8e66d6345a Mon Sep 17 00:00:00 2001 From: dsavvinov Date: Tue, 16 Aug 2016 13:31:28 +0300 Subject: [PATCH] Protobuf: fixed comparison of enums in parseFieldFrom, refactored generated code in this function --- .../google/protobuf/compiler/kotlin/Makefile | 57 ++++++++++++++----- .../kotlin/src/kotlin_class_generator.cc | 9 ++- 2 files changed, 51 insertions(+), 15 deletions(-) diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile b/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile index 235c568c701..ef92415c9fd 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile @@ -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 diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc index 939e6c0af69..5bdcff84375 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc @@ -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");