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

Side by Side Diff: pkg/analyzer/test/src/task/strong/front_end_inference_test.dart

Issue 2919623002: Implement type inference for PropertySet. (Closed)
Patch Set: Created 3 years, 6 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
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:convert'; 6 import 'dart:convert';
7 import 'dart:io'; 7 import 'dart:io';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/visitor.dart'; 10 import 'package:analyzer/dart/ast/visitor.dart';
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 return; 95 return;
96 } 96 }
97 97
98 LibraryElement library = element.library; 98 LibraryElement library = element.library;
99 if (library == null) { 99 if (library == null) {
100 throw new StateError('Unexpected element without library: $element'); 100 throw new StateError('Unexpected element without library: $element');
101 } 101 }
102 String libraryName = library.name; 102 String libraryName = library.name;
103 103
104 String name = element.name ?? ''; 104 String name = element.name ?? '';
105 if (name.endsWith('=') &&
106 element is PropertyAccessorElement &&
107 element.isSetter) {
108 name = name.substring(0, name.length - 1);
109 }
105 if (libraryName != 'dart.core' && 110 if (libraryName != 'dart.core' &&
106 libraryName != 'dart.async' && 111 libraryName != 'dart.async' &&
107 libraryName != 'test') { 112 libraryName != 'test') {
108 buffer.write('$libraryName::'); 113 buffer.write('$libraryName::');
109 } 114 }
110 var enclosing = element.enclosingElement; 115 var enclosing = element.enclosingElement;
111 if (enclosing is ClassElement) { 116 if (enclosing is ClassElement) {
112 buffer.write('${enclosing.name}::'); 117 buffer.write('${enclosing.name}::');
113 if (currentFactoryConstructor != null && 118 if (currentFactoryConstructor != null &&
114 identical(enclosing, currentFactoryConstructor.enclosingElement)) { 119 identical(enclosing, currentFactoryConstructor.enclosingElement) &&
120 element is TypeParameterElement) {
115 String factoryConstructorName = currentFactoryConstructor.name; 121 String factoryConstructorName = currentFactoryConstructor.name;
116 if (factoryConstructorName == '') { 122 if (factoryConstructorName == '') {
117 factoryConstructorName = '•'; 123 factoryConstructorName = '•';
118 } 124 }
119 buffer.write('$factoryConstructorName::'); 125 buffer.write('$factoryConstructorName::');
120 } 126 }
121 } 127 }
122 buffer.write('$name'); 128 buffer.write('$name');
123 } 129 }
124 } 130 }
(...skipping 11 matching lines...) Expand all
136 142
137 provider.newFile(path, code); 143 provider.newFile(path, code);
138 144
139 AnalysisResult result = await driver.getResult(path); 145 AnalysisResult result = await driver.getResult(path);
140 result.unit.accept(new _InstrumentationVisitor(validation, uri)); 146 result.unit.accept(new _InstrumentationVisitor(validation, uri));
141 147
142 validation.finish(); 148 validation.finish();
143 149
144 if (validation.hasProblems) { 150 if (validation.hasProblems) {
145 if (fixProblems) { 151 if (fixProblems) {
146 validation.fixSource(uri); 152 validation.fixSource(uri, true);
147 return null; 153 return null;
148 } else { 154 } else {
149 return validation.problemsAsString; 155 return validation.problemsAsString;
150 } 156 }
151 } else { 157 } else {
152 return null; 158 return null;
153 } 159 }
154 } 160 }
155 } 161 }
156 162
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 _recordTypeArguments(node.methodName.offset, inferredTypeArguments); 393 _recordTypeArguments(node.methodName.offset, inferredTypeArguments);
388 } 394 }
389 } 395 }
390 } 396 }
391 397
392 @override 398 @override
393 visitPrefixedIdentifier(PrefixedIdentifier node) { 399 visitPrefixedIdentifier(PrefixedIdentifier node) {
394 super.visitPrefixedIdentifier(node); 400 super.visitPrefixedIdentifier(node);
395 if (node.prefix.staticElement is! PrefixElement && 401 if (node.prefix.staticElement is! PrefixElement &&
396 node.prefix.staticElement is! ClassElement) { 402 node.prefix.staticElement is! ClassElement) {
397 if (node.identifier.inGetterContext()) { 403 if (node.identifier.inGetterContext() ||
404 node.identifier.inSetterContext()) {
398 _recordTarget(node.identifier.offset, node.identifier.staticElement); 405 _recordTarget(node.identifier.offset, node.identifier.staticElement);
399 } 406 }
400 } 407 }
401 } 408 }
402 409
403 visitPrefixExpression(PrefixExpression node) { 410 visitPrefixExpression(PrefixExpression node) {
404 super.visitPrefixExpression(node); 411 super.visitPrefixExpression(node);
405 _recordTarget(node.operator.charOffset, node.staticElement); 412 _recordTarget(node.operator.charOffset, node.staticElement);
406 } 413 }
407 414
408 @override 415 @override
409 visitPropertyAccess(PropertyAccess node) { 416 visitPropertyAccess(PropertyAccess node) {
410 super.visitPropertyAccess(node); 417 super.visitPropertyAccess(node);
411 if (node.propertyName.inGetterContext()) { 418 if (node.propertyName.inGetterContext() ||
419 node.propertyName.inSetterContext()) {
412 _recordTarget(node.propertyName.offset, node.propertyName.staticElement); 420 _recordTarget(node.propertyName.offset, node.propertyName.staticElement);
413 } 421 }
414 } 422 }
415 423
416 visitSimpleIdentifier(SimpleIdentifier node) { 424 visitSimpleIdentifier(SimpleIdentifier node) {
417 super.visitSimpleIdentifier(node); 425 super.visitSimpleIdentifier(node);
418 Element element = node.staticElement; 426 Element element = node.staticElement;
419 void recordPromotions(DartType elementType) { 427 void recordPromotions(DartType elementType) {
420 if (node.inGetterContext() && !node.inDeclarationContext()) { 428 if (node.inGetterContext() && !node.inDeclarationContext()) {
421 int offset = node.offset; 429 int offset = node.offset;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 493
486 /// Based on DDC code generator's `_recoverTypeArguments` 494 /// Based on DDC code generator's `_recoverTypeArguments`
487 Iterable<DartType> _recoverTypeArguments(FunctionType g, FunctionType f) { 495 Iterable<DartType> _recoverTypeArguments(FunctionType g, FunctionType f) {
488 assert(identical(g.element, f.element)); 496 assert(identical(g.element, f.element));
489 assert(g.typeFormals.isNotEmpty && f.typeFormals.isEmpty); 497 assert(g.typeFormals.isNotEmpty && f.typeFormals.isEmpty);
490 assert(g.typeFormals.length + g.typeArguments.length == 498 assert(g.typeFormals.length + g.typeArguments.length ==
491 f.typeArguments.length); 499 f.typeArguments.length);
492 return f.typeArguments.skip(g.typeArguments.length); 500 return f.typeArguments.skip(g.typeArguments.length);
493 } 501 }
494 } 502 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698