diff options
author | Jean-Philippe Lesot <jplesot@google.com> | 2015-05-04 08:45:43 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-05-04 08:45:44 +0000 |
commit | c411d9966a69e334de6e7a3594c0f9197cfc9cb3 (patch) | |
tree | 76a7111b5ac2768c425826dffeece447f1bc06d1 /jack/src | |
parent | e71545e4d6c5112979c7978154d3ef0284abd230 (diff) | |
parent | 23593657b594a6435cba44f327ab36153e7f0c99 (diff) | |
download | toolchain_jack-c411d9966a69e334de6e7a3594c0f9197cfc9cb3.zip toolchain_jack-c411d9966a69e334de6e7a3594c0f9197cfc9cb3.tar.gz toolchain_jack-c411d9966a69e334de6e7a3594c0f9197cfc9cb3.tar.bz2 |
Merge "Make Strings comply to Json specifications in SdkReporter" into ub-jack
Diffstat (limited to 'jack/src')
-rw-r--r-- | jack/src/com/android/jack/reporting/SdkReporter.java | 54 |
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 895da47..d3bd90b 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(); + } + } |