Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: pkg/front_end/lib/src/fasta/testing/validating_instrumentation.dart

Issue 2874033003: Set MethodInvocation.interfaceTarget during type inference. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 import 'dart:async'; 4 import 'dart:async';
5 import 'dart:convert'; 5 import 'dart:convert';
6 import 'dart:io'; 6 import 'dart:io';
7 7
8 import 'package:front_end/src/base/instrumentation.dart'; 8 import 'package:front_end/src/base/instrumentation.dart';
9 import 'package:front_end/src/fasta/messages.dart'; 9 import 'package:front_end/src/fasta/messages.dart';
10 import 'package:front_end/src/fasta/scanner.dart'; 10 import 'package:front_end/src/fasta/scanner.dart';
11 import 'package:front_end/src/fasta/scanner/io.dart'; 11 import 'package:front_end/src/fasta/scanner/io.dart';
12 import 'package:front_end/src/scanner/token.dart' as analyzer; 12 import 'package:front_end/src/scanner/token.dart' as analyzer;
13 13
14 /// Implementation of [Instrumentation] which checks property/value pairs 14 /// Implementation of [Instrumentation] which checks property/value pairs
15 /// against expectations encoded in source files using "/*@...*/" comments. 15 /// against expectations encoded in source files using "/*@...*/" comments.
16 class ValidatingInstrumentation implements Instrumentation { 16 class ValidatingInstrumentation implements Instrumentation {
17 static final _ESCAPE_SEQUENCE = new RegExp(r'\\(.)'); 17 static final _ESCAPE_SEQUENCE = new RegExp(r'\\(.)');
18 18
19 /// Map from feature names to the property names they are short for. 19 /// Map from feature names to the property names they are short for.
20 static const _FEATURES = const { 20 static const _FEATURES = const {
21 'inference': const [ 21 'inference': const [
22 'topType', 22 'topType',
23 'typeArg', 23 'typeArg',
24 'typeArgs', 24 'typeArgs',
25 'promotedType', 25 'promotedType',
26 'type', 26 'type',
27 'returnType' 27 'returnType',
28 'target',
28 ], 29 ],
29 }; 30 };
30 31
31 /// Map from file URI to the as-yet unsatisfied expectations from that file, 32 /// Map from file URI to the as-yet unsatisfied expectations from that file,
32 /// organized by file offset. 33 /// organized by file offset.
33 final _unsatisfiedExpectations = <Uri, Map<int, List<_Expectation>>>{}; 34 final _unsatisfiedExpectations = <Uri, Map<int, List<_Expectation>>>{};
34 35
35 /// Information about "testedFeatures" annotations, organized by file URI and 36 /// Information about "testedFeatures" annotations, organized by file URI and
36 /// file offset. The inner map is guaranteed to be in ascending order of 37 /// file offset. The inner map is guaranteed to be in ascending order of
37 /// file offset. 38 /// file offset.
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 if (_shouldCheck(property, uri, offset)) { 170 if (_shouldCheck(property, uri, offset)) {
170 _problemWithStack( 171 _problemWithStack(
171 uri, 172 uri,
172 offset, 173 offset,
173 'expected nothing, got $property=${value.toString()}', 174 'expected nothing, got $property=${value.toString()}',
174 new _Fix(offset, 0, _makeExpectationComment(property, value))); 175 new _Fix(offset, 0, _makeExpectationComment(property, value)));
175 } 176 }
176 } 177 }
177 178
178 String _escape(String s) { 179 String _escape(String s) {
179 return s.replaceAll(r'\', r'\\').replaceAll('*/', r'*\/'); 180 s = s.replaceAll(r'\', r'\\');
181 if (s.endsWith('/')) {
182 s = '$s ';
183 }
184 return s.replaceAll('/*', r'/\*').replaceAll('*/', r'*\/');
180 } 185 }
181 186
182 String _formatProblem( 187 String _formatProblem(
183 Uri uri, int offset, String desc, StackTrace stackTrace) { 188 Uri uri, int offset, String desc, StackTrace stackTrace) {
184 return format( 189 return format(
185 uri, offset, '$desc${stackTrace == null ? '' : '\n$stackTrace'}'); 190 uri, offset, '$desc${stackTrace == null ? '' : '\n$stackTrace'}');
186 } 191 }
187 192
188 String _makeExpectationComment(String property, InstrumentationValue value) { 193 String _makeExpectationComment(String property, InstrumentationValue value) {
189 return '/*@$property=${_escape(value.toString())}*/'; 194 return '/*@$property=${_escape(value.toString())}*/';
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 this.property, this.value, this.commentOffset, this.commentLength); 227 this.property, this.value, this.commentOffset, this.commentLength);
223 } 228 }
224 229
225 class _Fix { 230 class _Fix {
226 final int offset; 231 final int offset;
227 final int length; 232 final int length;
228 final String replacement; 233 final String replacement;
229 234
230 _Fix(this.offset, this.length, this.replacement); 235 _Fix(this.offset, this.length, this.replacement);
231 } 236 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698