diff options
3 files changed, 15 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java index b91237ad72..3a6c60d7e0 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java @@ -387,10 +387,8 @@ public class Printer { this.append(o.toString()); } else { - // Other types of objects shouldn't be leaked to Skylark, but if happens, their - // .toString method shouldn't be used because their return values are likely to contain - // memory addresses or other nondeterministic information. - this.append("<unknown object " + o.getClass().getName() + ">"); + // TODO(bazel-team): change to a special representation for unknown objects + this.append(o.toString()); } return this; diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java index 8db33169eb..82e2dfed90 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java @@ -389,17 +389,6 @@ public class SkylarkStringRepresentationsTest extends SkylarkTestCase { } @Test - public void testStringRepresentationsOfUnknownObjects() throws Exception { - update("mock", new Object()); - - assertThat(eval("str(mock)")).isEqualTo("<unknown object java.lang.Object>"); - assertThat(eval("repr(mock)")).isEqualTo("<unknown object java.lang.Object>"); - assertThat(eval("'{}'.format(mock)")).isEqualTo("<unknown object java.lang.Object>"); - assertThat(eval("'%s' % mock")).isEqualTo("<unknown object java.lang.Object>"); - assertThat(eval("'%r' % mock")).isEqualTo("<unknown object java.lang.Object>"); - } - - @Test public void testLegacyStringRepresentations_Labels() throws Exception { setSkylarkSemanticsOptions("--incompatible_descriptive_string_representations=false"); diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java index 77f627fd65..fe16f1b195 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java @@ -611,6 +611,15 @@ public class EvaluationTest extends EvaluationTestCase { }; } + private Object createUnknownObj() { + return new Object() { + @Override + public String toString() { + return "<unknown object>"; + } + }; + } + @Test public void testPercOnObject() throws Exception { newTest("--incompatible_descriptive_string_representations=true") @@ -620,8 +629,8 @@ public class EvaluationTest extends EvaluationTestCase { .update("obj", createObjWithStr()) .testStatement("'%s' % obj", "<str legacy marker>"); newTest() - .update("unknown", new Object()) - .testStatement("'%s' % unknown", "<unknown object java.lang.Object>"); + .update("unknown", createUnknownObj()) + .testStatement("'%s' % unknown", "<unknown object>"); } @Test @@ -633,10 +642,8 @@ public class EvaluationTest extends EvaluationTestCase { .update("obj", createObjWithStr()) .testStatement("'%s %s' % (obj, obj)", "<str legacy marker> <str legacy marker>"); newTest() - .update("unknown", new Object()) - .testStatement( - "'%s %s' % (unknown, unknown)", - "<unknown object java.lang.Object> <unknown object java.lang.Object>"); + .update("unknown", createUnknownObj()) + .testStatement("'%s %s' % (unknown, unknown)", "<unknown object> <unknown object>"); } @Test |