diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
index b5cbc92..5135dd3 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Lexer.java
@@ -840,16 +840,6 @@
   }
 
   /**
-   * Returns the character in the input buffer at the given position.
-   *
-   * @param at the position to get the character at.
-   * @return the character at the given position.
-   */
-  public char charAt(int at) {
-    return buffer[at];
-  }
-
-  /**
    * Returns the string at the current line, minus the new line.
    *
    * @param line the line from which to retrieve the String, 1-based
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index e499907..fd97117 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -606,9 +606,8 @@
   private StringLiteral parseStringLiteral() {
     Preconditions.checkState(token.kind == TokenKind.STRING);
     int end = token.right;
-    char quoteChar = lexer.charAt(token.left);
     StringLiteral literal =
-        setLocation(new StringLiteral((String) token.value, quoteChar), token.left, end);
+        setLocation(new StringLiteral((String) token.value), token.left, end);
 
     nextToken();
     if (token.kind == TokenKind.STRING) {
@@ -957,9 +956,7 @@
       if (expr instanceof StringLiteral && secondary instanceof StringLiteral) {
         StringLiteral left = (StringLiteral) expr;
         StringLiteral right = (StringLiteral) secondary;
-        if (left.getQuoteChar() == right.getQuoteChar()) {
-          return new StringLiteral(left.getValue() + right.getValue(), left.getQuoteChar());
-        }
+        return new StringLiteral(left.getValue() + right.getValue());
       }
     }
     return new BinaryOperatorExpression(operator, expr, secondary);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java b/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java
index b2526a0..640d007 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StringLiteral.java
@@ -18,16 +18,13 @@
  */
 public final class StringLiteral extends Literal<String> {
 
-  private final char quoteChar;
-
-  public StringLiteral(String value, char quoteChar) {
+  public StringLiteral(String value) {
     super(value);
-    this.quoteChar = quoteChar;
   }
 
   @Override
   public String toString() {
-    return quoteChar + value.replace(Character.toString(quoteChar), "\\" + quoteChar) + quoteChar;
+    return Printer.repr(value);
   }
 
   @Override
@@ -35,16 +32,6 @@
     visitor.visit(this);
   }
 
-  /**
-   * Gets the quote character that was used for this string.  For example, if
-   * the string was 'hello, world!', then this method returns '\''.
-   *
-   * @return the character used to quote the string.
-   */
-  public char getQuoteChar() {
-    return quoteChar;
-  }
-
   @Override
   void validate(ValidationEnvironment env) throws EvalException {
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
index 743c682..bf36646 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
@@ -323,7 +323,7 @@
                 "\tFile \"/workspace/test/skylark/functions.bzl\", line 2, in first",
                 "\t\tsecond(a, b)",
                 "\tFile \"/workspace/test/skylark/functions.bzl\", line 5, in second",
-                "\t\tthird('legal')",
+                "\t\tthird(\"legal\")",
                 "\tFile \"/workspace/test/skylark/functions.bzl\", line 7, in third",
                 errorMessage);
     scratch.file(
@@ -756,7 +756,7 @@
             target.getProvider(FileProvider.class).getFilesToBuild()))
         .containsExactly("foo.txt");
   }
-  
+
   @Test
   public void testRuleClassImplicitOutputs() throws Exception {
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
index 6f19044..71e9cec 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
@@ -185,8 +185,8 @@
 
   @Test
   public void testToString() throws Exception {
-    update("subject", new StringLiteral("Hello, 'world'.", '\''));
-    update("from", new StringLiteral("Java", '"'));
+    update("subject", new StringLiteral("Hello, 'world'."));
+    update("from", new StringLiteral("Java"));
     assertThat(getEnvironment().toString()).isEqualTo("<Environment[test]>");
   }
 
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 4a71755..f217591 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
@@ -521,7 +521,7 @@
   public void testDictComprehensions_ToString() throws Exception {
     assertEquals("{x: x for x in [1, 2]}",
         parseExpression("{x : x for x in [1, 2]}").toString());
-    assertEquals("{x + 'a': x for x in [1, 2]}",
+    assertEquals("{x + \"a\": x for x in [1, 2]}",
         parseExpression("{x + 'a' : x for x in [1, 2]}").toString());
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
index 17599d7..55867c6 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
@@ -363,7 +363,7 @@
                 + LINE_SEPARATOR
                 + "\tFile \"\", line 7, in bar"
                 + LINE_SEPARATOR
-                + "\t\t'test'.index(x)",
+                + "\t\t\"test\".index(x)",
             "def foo():",
             "  bar(1)",
             "def bar(x):",
@@ -421,7 +421,7 @@
                 + LINE_SEPARATOR
                 + "\tFile \"\", line 5, in bar"
                 + LINE_SEPARATOR
-                + "\t\t'test'.index(x)"
+                + "\t\t\"test\".index(x)"
                 + LINE_SEPARATOR
                 + "method string.index(sub: string, start: int, end: int or NoneType) "
                 + "is not applicable "
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
index 43f6bcf..db96a9d 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
@@ -224,7 +224,7 @@
   @Test
   public void testStringLiteralOptimizationToString() throws Exception {
     StringLiteral l = (StringLiteral) parseExpression("'abc' + 'def'");
-    assertEquals("'abcdef'", l.toString());
+    assertEquals("\"abcdef\"", l.toString());
   }
 
   @Test
@@ -236,7 +236,9 @@
 
   @Test
   public void testStringLiteralOptimizationDifferentQuote() throws Exception {
-    assertThat(parseExpression("'abc' + \"def\"")).isInstanceOf(BinaryOperatorExpression.class);
+    StringLiteral l = (StringLiteral) parseExpression("'abc' + \"def\"");
+    assertEquals(0, l.getLocation().getStartOffset());
+    assertEquals(13, l.getLocation().getEndOffset());
   }
 
   @Test
@@ -443,8 +445,8 @@
     assertEquals("[x[1::2]\n]", parseFile("x[1::2]").toString());
     assertEquals("[x[1:]\n]", parseFile("x[1:]").toString());
     assertEquals("[str[42]\n]", parseFile("str[42]").toString());
-    assertEquals("[ctx.new_file('hello')\n]", parseFile("ctx.new_file('hello')").toString());
-    assertEquals("[new_file('hello')\n]", parseFile("new_file('hello')").toString());
+    assertEquals("[ctx.new_file(\"hello\")\n]", parseFile("ctx.new_file('hello')").toString());
+    assertEquals("[new_file(\"hello\")\n]", parseFile("new_file(\"hello\")").toString());
   }
 
   @Test
@@ -1044,7 +1046,7 @@
 
     Label containingFileLabel = Label.parseAbsoluteUnchecked(containingFileLabelString);
     assertThat(imp.getLabel(containingFileLabel)).named("containingFileLabel()")
-        .isEqualTo(Label.parseAbsoluteUnchecked(expectedLabelString)); 
+        .isEqualTo(Label.parseAbsoluteUnchecked(expectedLabelString));
 
     int startOffset = stmt.getImport().getLocation().getStartOffset();
     int endOffset = stmt.getImport().getLocation().getEndOffset();
@@ -1055,7 +1057,7 @@
 
   private void invalidImportTest(String importString, String expectedMsg) {
     setFailFast(false);
-    parseFileForSkylark("load('" + importString + "', 'fun_test')\n"); 
+    parseFileForSkylark("load('" + importString + "', 'fun_test')\n");
     assertContainsError(expectedMsg);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
index 2e4ae53..85a8f8c 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
@@ -35,7 +35,7 @@
 
   @Test
   public void testAssignmentNotValidLValue() {
-    checkError("cannot assign to ''a''", "'a' = 1");
+    checkError("cannot assign to '\"a\"'", "'a' = 1");
   }
 
   @Test
