[CFE] Better error and reproduction on compile and lint crash
Change-Id: I7555d9d2c7244325d4eacba4cc8780c2a98a4fc3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/385600
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/presubmit_helper_spawn.dart b/pkg/front_end/presubmit_helper_spawn.dart
index dd52fcc..fd0b01c 100644
--- a/pkg/front_end/presubmit_helper_spawn.dart
+++ b/pkg/front_end/presubmit_helper_spawn.dart
@@ -37,9 +37,43 @@
includedFiles: work.includedFiles,
includedDirectoryUris: work.includedDirectoryUris,
repoDir: work.repoDir));
- } catch (e) {
+ } catch (e, st) {
// This will make it send false.
compileAndLintErrorsFound = -1;
+
+ StringBuffer sb = new StringBuffer();
+ sb.writeln("void main() {");
+ sb.writeln(" runCompileAndLintTest(includedFiles: {");
+ String comma = "";
+ for (Uri uri in work.includedFiles) {
+ sb.writeln(" ${comma}Uri.parse('$uri')");
+ comma = ", ";
+ }
+ sb.writeln(" }, includedDirectoryUris: {");
+ comma = "";
+ for (Uri uri in work.includedDirectoryUris) {
+ sb.writeln(" ${comma}Uri.parse('$uri')");
+ comma = ", ";
+ }
+ sb.writeln(" }, repoDir: Uri.parse('${work.repoDir}'));");
+ sb.writeln("}");
+
+ print("""
+WARNING: '${work.name}' crashed:
+============
+${e.toString().trim()}
+============
+$st
+============
+
+To reproduce open up compile_and_lint_impl.dart and insert
+
+$sb
+
+Then run that file through your debugger or similar.
+
+""");
+ print("Got error for ${work.name}: $e");
}
print("Sending ok = ${compileAndLintErrorsFound == 0} "
"for ${work.name} after ${stopwatch.elapsed}");
diff --git a/pkg/front_end/test/compile_and_lint_impl.dart b/pkg/front_end/test/compile_and_lint_impl.dart
index cfe3f41..2c4e6da 100644
--- a/pkg/front_end/test/compile_and_lint_impl.dart
+++ b/pkg/front_end/test/compile_and_lint_impl.dart
@@ -181,6 +181,7 @@
in Directory.fromUri(packageEntry.key.packageUriRoot)
.listSync(recursive: true)) {
if (f is! File) continue;
+ if (!f.path.endsWith(".dart")) continue;
if (helpers[f.uri] == null) {
FileInfoHelper fileInfo = indexUriHelper(f.uri);
for (String name in fileInfo.libraryNames) {