diff --git a/lib/protocol_buffers/runtime/decoder.rb b/lib/protocol_buffers/runtime/decoder.rb
index 9e4a68e..b48f292 100644
--- a/lib/protocol_buffers/runtime/decoder.rb
+++ b/lib/protocol_buffers/runtime/decoder.rb
@@ -6,7 +6,7 @@ class DecodeError < StandardError; end
module Decoder # :nodoc: all
def self.decode(io, message)
- fields = message.fields
+ fields = message.message_fields
until io.eof?
tag_int = Varint.decode(io)
diff --git a/lib/protocol_buffers/runtime/encoder.rb b/lib/protocol_buffers/runtime/encoder.rb
index f13440f..40e78a8 100644
--- a/lib/protocol_buffers/runtime/encoder.rb
+++ b/lib/protocol_buffers/runtime/encoder.rb
@@ -12,7 +12,7 @@ module Encoder # :nodoc: all
def self.encode(io, message)
message.validate!
- message.fields.each do |tag, field|
+ message.message_fields.each do |tag, field|
next unless message.value_for_tag?(tag)
value = message.value_for_tag(tag)
diff --git a/lib/protocol_buffers/runtime/field.rb b/lib/protocol_buffers/runtime/field.rb
index 954321d..ce7c1ed 100644
--- a/lib/protocol_buffers/runtime/field.rb
+++ b/lib/protocol_buffers/runtime/field.rb
@@ -126,7 +126,7 @@ def add_reader_to(klass)
klass.class_eval <<-EOF, __FILE__, __LINE__+1
def #{name}
unless @#{name}
- @#{name} = RepeatedField.new(fields[#{tag}])
+ @#{name} = RepeatedField.new(message_fields[#{tag}])
end
@#{name}
end
@@ -159,7 +159,7 @@ def #{name}=(value)
else
klass.class_eval <<-EOF, __FILE__, __LINE__+1
def #{name}=(value)
- field = fields[#{tag}]
+ field = message_fields[#{tag}]
if value.nil?
@set_fields[#{tag}] = false
@#{name} = field.default_value
diff --git a/lib/protocol_buffers/runtime/message.rb b/lib/protocol_buffers/runtime/message.rb
index f4ebcf4..ae8b31b 100644
--- a/lib/protocol_buffers/runtime/message.rb
+++ b/lib/protocol_buffers/runtime/message.rb
@@ -313,7 +313,7 @@ def attributes=(hash = {})
# Comparison by class and field values.
def ==(obj)
return false unless obj.is_a?(self.class)
- fields.each do |tag, field|
+ message_fields.each do |tag, field|
return false unless self.__send__(field.name) == obj.__send__(field.name)
end
return true
@@ -344,10 +344,16 @@ def self.initial_set_fields
end
# Returns a hash of { tag => ProtocolBuffers::Field }
- def fields
+ def message_fields
self.class.fields
end
+ # DEPRECATED: Please use message_fields instead.
+ def fields
+ warn "[DEPRECATION] `fields` is deprecated. Please use `message_fields` instead."
+ message_fields
+ end
+
# Find the field for the given attribute name. Returns a
# ProtocolBuffers::field
def self.field_for_name(name)
@@ -358,7 +364,7 @@ def self.field_for_name(name)
# Equivalent to fields[tag]
def self.field_for_tag(tag)
- fields[tag]
+ message_fields[tag]
end
# Reflection: get the attribute value for the given tag id.
@@ -367,11 +373,11 @@ def self.field_for_tag(tag)
# # is equivalent to
# message.f1
def value_for_tag(tag)
- self.__send__(fields[tag].name)
+ self.__send__(message_fields[tag].name)
end
def set_value_for_tag(tag, value)
- self.__send__("#{fields[tag].name}=", value)
+ self.__send__("#{message_fields[tag].name}=", value)
end
# Reflection: does this Message have the field set?
@@ -386,7 +392,7 @@ def value_for_tag?(tag)
def inspect
ret = ProtocolBuffers.bin_sio
ret << "#<#{self.class.name}"
- fields.each do |tag, field|
+ message_fields.each do |tag, field|
if value_for_tag?(tag)
value = field.inspect_value(self.__send__(field.name))
else
@@ -398,7 +404,7 @@ def inspect
return ret.string
end
- def merge_field(tag, value, field = fields[tag]) # :nodoc:
+ def merge_field(tag, value, field = message_fields[tag]) # :nodoc:
if field.repeated?
if value.is_a?(Array)
self.__send__("#{field.name}=", self.__send__(field.name) + value)
@@ -495,7 +501,7 @@ def self.gen_methods! # :NODOC:
protected
def initialize_field(tag)
- field = fields[tag]
+ field = message_fields[tag]
new_value = field.default_value
self.instance_variable_set("@#{field.name}", new_value)
if field.class == Field::MessageField
diff --git a/spec/proto_files/name_collision.proto b/spec/proto_files/name_collision.proto
new file mode 100644
index 0000000..72a50d7
--- /dev/null
+++ b/spec/proto_files/name_collision.proto
@@ -0,0 +1,9 @@
+package test;
+
+message Field {
+ required string name = 1;
+}
+
+message Message {
+ repeated Field fields = 1;
+}
diff --git a/spec/runtime_spec.rb b/spec/runtime_spec.rb
index bf30e0b..7e681b2 100644
--- a/spec/runtime_spec.rb
+++ b/spec/runtime_spec.rb
@@ -385,7 +385,7 @@ def filled_in_bit
bit2 = Featureful::ABitOfEverything.parse(bit.to_s)
bit.should == bit2
- bit.fields.each do |tag, field|
+ bit.message_fields.each do |tag, field|
bit.value_for_tag(tag).should == bit2.value_for_tag(tag)
end
end