summaryrefslogtreecommitdiffstats
path: root/jack/src
diff options
context:
space:
mode:
authorJean-Marie Henaff <jmhenaff@google.com>2015-04-30 18:01:02 +0200
committerJean-Marie Henaff <jmhenaff@google.com>2015-04-30 18:28:37 +0200
commit23593657b594a6435cba44f327ab36153e7f0c99 (patch)
treecd1062601635024740573ad7c98da63aa3992761 /jack/src
parent44b438e852632417b0b96845a4903503a0c7eded (diff)
downloadtoolchain_jack-23593657b594a6435cba44f327ab36153e7f0c99.tar.gz
toolchain_jack-23593657b594a6435cba44f327ab36153e7f0c99.tar.bz2
toolchain_jack-23593657b594a6435cba44f327ab36153e7f0c99.zip
Make Strings comply to Json specifications in SdkReporter
http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf Bug: 20320225 Change-Id: I57d86f622c02f8a36df212c29869fac1583cc032
Diffstat (limited to 'jack/src')
-rw-r--r--jack/src/com/android/jack/reporting/SdkReporter.java54
1 files changed, 52 insertions, 2 deletions
diff --git a/jack/src/com/android/jack/reporting/SdkReporter.java b/jack/src/com/android/jack/reporting/SdkReporter.java
index 895da47f..d3bd90b3 100644
--- a/jack/src/com/android/jack/reporting/SdkReporter.java
+++ b/jack/src/com/android/jack/reporting/SdkReporter.java
@@ -16,6 +16,8 @@
package com.android.jack.reporting;
+import com.google.common.base.Strings;
+
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.reporting.Reportable.ProblemLevel;
import com.android.sched.util.codec.ImplementationName;
@@ -35,16 +37,19 @@ public class SdkReporter extends CommonReporter {
@Override
protected void printFilteredProblem(@Nonnull ProblemLevel problemLevel,
@Nonnull String message, @Nonnull SourceInfo sourceInfo) {
+ String escapedMessage = convertString(message);
+
StringBuffer messageBuffer = new StringBuffer("MESSAGE:{");
messageBuffer.append("\"kind\":\"").append(convertLevelName(problemLevel)).append("\",");
- messageBuffer.append("\"text\":\"").append(message).append("\",");
+ messageBuffer.append("\"text\":\"").append(escapedMessage).append("\",");
messageBuffer.append("\"sources\":[{");
if (sourceInfo != SourceInfo.UNKNOWN) {
String fileName = new File(sourceInfo.getFileName()).getAbsolutePath();
+ String escapedFileName = convertString(fileName);
- messageBuffer.append("\"file\":\"").append(fileName).append("\",");
+ messageBuffer.append("\"file\":\"").append(escapedFileName).append("\",");
messageBuffer.append("\"position\":{");
// Convert unknown values to match sdk expectations
@@ -90,4 +95,49 @@ public class SdkReporter extends CommonReporter {
}
}
+ // http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
+ @Nonnull
+ private static String convertString(@Nonnull String s) {
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 0; i < s.length(); i++) {
+ char c = s.charAt(i);
+ switch (c) {
+ case '"':
+ buffer.append("\\\"");
+ break;
+ case '\\':
+ buffer.append("\\\\");
+ break;
+ case '/':
+ buffer.append("\\/");
+ break;
+ case '\b':
+ buffer.append("\\b");
+ break;
+ case '\f':
+ buffer.append("\\f");
+ break;
+ case '\n':
+ buffer.append("\\n");
+ break;
+ case '\r':
+ buffer.append("\\r");
+ break;
+ case '\t':
+ buffer.append("\\t");
+ break;
+ default:
+ if (Character.isISOControl(c)) {
+ buffer.append("\\u");
+ String cAsHex = Integer.toHexString(c);
+ buffer.append(Strings.repeat("0", 4 - cAsHex.length()));
+ buffer.append(cAsHex.toUpperCase());
+ } else {
+ buffer.append(c);
+ }
+ }
+ }
+ return buffer.toString();
+ }
+
}