10000 Remove dependency from {,More}Objects.ToStringHelper by copying code. · AnnaQiC/google-http-java-client@b36768f · GitHub
[go: up one dir, main page]

Skip to content

Commit b36768f

Browse files
committed
Remove dependency from {,More}Objects.ToStringHelper by copying code.
This is a copy of the pieces of MoreObjects.ToStringHelper necessary for the more limited API exposed. No real implementation modifications were made, other than deleting unused methods. Objects.ToStringHelper is deprecated and is going to be removed. However, its replacement MoreObjects.ToStringHelper is only available in Guava 18 which won't receive a JDK5 backport. Copy the code for now to remove dependency. Once the client library drops JDK5 support and swaps to Guava 18 it can swap to using MoreObjects.ToStringHelper. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=107624331
1 parent 26847c2 commit b36768f

File tree

2 files changed

+68
-23
lines changed

2 files changed

+68
-23
lines changed

google-http-client/src/main/java/com/google/api/client/util/Objects.java

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@
1717
/**
1818
* Helper functions that can operate on any {@code Object}.
1919
*
20-
* <p>
21-
* NOTE: proxy for the Guava implementation of {@link com.google.common.base.Objects}.
22-
* </p>
23-
*
2420
* @since 1.14
2521
* @author Yaniv Inbar
2622
*/
@@ -85,20 +81,22 @@ public static boolean equal(Object a, Object b) {
8581
* class name
8682
*/
8783
public static ToStringHelper toStringHelper(Object self) {
88-
return new ToStringHelper(com.google.common.base.Objects.toStringHelper(self));
84+
return new ToStringHelper(self.getClass().getSimpleName());
8985
}
9086

87+
// TODO(ejona): Swap to wrapping MoreObjects.ToStringHelper once depending on Guava 18.
9188
/** Support class for {@link Objects#toStringHelper}. */
9289
public static final class ToStringHelper {
93-
94-
/** Wrapped object. */
95-
private final com.google.common.base.Objects.ToStringHelper wrapped;
90+
private final String className;
91+
private ValueHolder holderHead = new ValueHolder();
92+
private ValueHolder holderTail = holderHead;
93+
private boolean omitNullValues;
9694

9795
/**
9896
* @param wrapped wrapped object
9997
*/
100-
ToStringHelper(com.google.common.base.Objects.ToStringHelper wrapped) {
101-
this.wrapped = wrapped;
98+
ToStringHelper(String className) {
99+
this.className = className;
102100
}
103101

104102
/**
@@ -107,7 +105,7 @@ public static final class ToStringHelper {
107105
* methods, is not significant.
108106
*/
109107
public ToStringHelper omitNullValues() {
110-
wrapped.omitNullValues();
108+
omitNullValues = true;
111109
return this;
112110
}
113111

@@ -117,13 +115,48 @@ public ToStringHelper omitNullValues() {
117115
* called, in which case this name/value pair will not be added.
118116
*/
119117
public ToStringHelper add(String name, Object value) {
120-
wrapped.add(name, value);
121-
return this;
118+
return addHolder(name, value);
122119
}
123120

124121
@Override
125122
public String toString() {
126-
return wrapped.toString();
123+
// create a copy to keep it consistent in case value changes
124+
boolean omitNullValuesSnapshot = omitNullValues;
125+
String nextSeparator = "";
126+
StringBuilder builder = new StringBuilder(32).append(className).append('{');
127+
for (ValueHolder valueHolder = holderHead.next;
128+
valueHolder != null;
129+
valueHolder = valueHolder.next) {
130+
if (!omitNullValuesSnapshot || valueHolder.value != null) {
131+
builder.append(nextSeparator);
132+
nextSeparator = ", ";
133+
134+
if (valueHolder.name != null) {
135+
builder.append(valueHolder.name).append('=');
136+
}
137+
builder.append(valueHolder.value);
138+
}
139+
}
140+
return builder.append('}').toString();
141+
}
142+
143+
private ValueHolder addHolder() {
144+
ValueHolder valueHolder = new ValueHolder();
145+
holderTail = holderTail.next = valueHolder;
146+
return valueHolder;
147+
}
148+
149+
private ToStringHelper addHolder(String name, Object value) {
150+
ValueHolder valueHolder = addHolder();
151+
valueHolder.value = value;
152+
valueHolder.name = Preconditions.checkNotNull(name);
153+
return this;
154+
}
155+
156+
private static final class ValueHolder {
157+
String name;
158+
Object value;
159+
ValueHolder next;
127160
}
128161
}
129162

google-http-client/src/test/java/com/google/api/client/util/ObjectsTest.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,30 @@
2222
* @author Yaniv Inbar
2323
*/
2424
public class ObjectsTest extends TestCase {
25+
public void testToStringHelper() {
26+
String toTest = Objects.toStringHelper(new TestClass()).add("hello", "world").toString();
27+
assertEquals("TestClass{hello=world}", toTest);
28+
}
2529

26-
class A {
27-
String hello = "world";
30+
public void testConstructor_innerClass() {
31+
String toTest = Objects.toStringHelper(new TestClass()).toString();
32+
assertEquals("TestClass{}", toTest);
33+
}
2834

29-
@Override
30-
public String toString() {
31-
return Objects.toStringHelper(this).add("hello", hello).toString();
32-
}
35+
public void testToString_oneIntegerField() {
36+
String toTest = Objects.toStringHelper(new TestClass())
37+
.add("field1", new Integer(42))
38+
.toString();
39+
assertEquals("TestClass{field1=42}", toTest);
3340
}
3441

35-
public void testToStringHelper() {
36-
A a = new A();
37-
assertEquals("A{hello=world}", a.toString());
42+
public void testToStringOmitNullValues_oneField() {
43+
String toTest = Objects.toStringHelper(new TestClass())
44+
.omitNullValues()
45+
.add("field1", null)
46+
.toString();
47+
assertEquals("TestClass{}", toTest);
3848
}
49+
50+
private static class TestClass {}
3951
}

0 commit comments

Comments
 (0)
0