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

Side by Side Diff: pkg/analyzer/lib/src/summary/resynthesize.dart

Issue 2990733002: Don't resynthesize invalid constant expressions at all. (Closed)
Patch Set: Created 3 years, 4 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/analyzer/test/src/summary/element_text.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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 library summary_resynthesizer; 5 library summary_resynthesizer;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; 10 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 if (e is ConstructorElement) { 323 if (e is ConstructorElement) {
324 return e; 324 return e;
325 } 325 }
326 } 326 }
327 throw new StateError( 327 throw new StateError(
328 'Unable to find the enclosing constructor of $context'); 328 'Unable to find the enclosing constructor of $context');
329 } 329 }
330 330
331 Expression build() { 331 Expression build() {
332 if (!uc.isValidConst) { 332 if (!uc.isValidConst) {
333 return AstTestFactory.identifier3(r'$$invalidConstExpr$$'); 333 return null;
334 } 334 }
335 for (UnlinkedExprOperation operation in uc.operations) { 335 for (UnlinkedExprOperation operation in uc.operations) {
336 switch (operation) { 336 switch (operation) {
337 case UnlinkedExprOperation.pushNull: 337 case UnlinkedExprOperation.pushNull:
338 _push(AstTestFactory.nullLiteral()); 338 _push(AstTestFactory.nullLiteral());
339 break; 339 break;
340 // bool 340 // bool
341 case UnlinkedExprOperation.pushFalse: 341 case UnlinkedExprOperation.pushFalse:
342 _push(AstTestFactory.booleanLiteral(false)); 342 _push(AstTestFactory.booleanLiteral(false));
343 break; 343 break;
(...skipping 1221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 libraryResynthesizer.summaryResynthesizer; 1565 libraryResynthesizer.summaryResynthesizer;
1566 1566
1567 TypeProvider get typeProvider => summaryResynthesizer.typeProvider; 1567 TypeProvider get typeProvider => summaryResynthesizer.typeProvider;
1568 1568
1569 /** 1569 /**
1570 * Build [ElementAnnotationImpl] for the given [UnlinkedExpr]. 1570 * Build [ElementAnnotationImpl] for the given [UnlinkedExpr].
1571 */ 1571 */
1572 ElementAnnotationImpl buildAnnotation(ElementImpl context, UnlinkedExpr uc) { 1572 ElementAnnotationImpl buildAnnotation(ElementImpl context, UnlinkedExpr uc) {
1573 ElementAnnotationImpl elementAnnotation = new ElementAnnotationImpl(unit); 1573 ElementAnnotationImpl elementAnnotation = new ElementAnnotationImpl(unit);
1574 Expression constExpr = _buildConstExpression(context, uc); 1574 Expression constExpr = _buildConstExpression(context, uc);
1575 if (constExpr is Identifier) { 1575 if (constExpr == null) {
1576 // Invalid constant expression.
1577 } else if (constExpr is Identifier) {
1576 ArgumentList arguments = 1578 ArgumentList arguments =
1577 constExpr.getProperty(_ConstExprBuilder.ARGUMENT_LIST); 1579 constExpr.getProperty(_ConstExprBuilder.ARGUMENT_LIST);
1578 elementAnnotation.element = constExpr.staticElement; 1580 elementAnnotation.element = constExpr.staticElement;
1579 elementAnnotation.annotationAst = 1581 elementAnnotation.annotationAst =
1580 AstTestFactory.annotation2(constExpr, null, arguments); 1582 AstTestFactory.annotation2(constExpr, null, arguments);
1581 } else if (constExpr is InstanceCreationExpression) { 1583 } else if (constExpr is InstanceCreationExpression) {
1582 elementAnnotation.element = constExpr.staticElement; 1584 elementAnnotation.element = constExpr.staticElement;
1583 Identifier typeName = constExpr.constructorName.type.name; 1585 Identifier typeName = constExpr.constructorName.type.name;
1584 SimpleIdentifier constructorName = constExpr.constructorName.name; 1586 SimpleIdentifier constructorName = constExpr.constructorName.name;
1585 if (typeName is SimpleIdentifier && constructorName != null) { 1587 if (typeName is SimpleIdentifier && constructorName != null) {
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1989 static String _getElementIdentifier(String name, ReferenceKind kind) { 1991 static String _getElementIdentifier(String name, ReferenceKind kind) {
1990 if (kind == ReferenceKind.topLevelPropertyAccessor || 1992 if (kind == ReferenceKind.topLevelPropertyAccessor ||
1991 kind == ReferenceKind.propertyAccessor) { 1993 kind == ReferenceKind.propertyAccessor) {
1992 if (!name.endsWith('=')) { 1994 if (!name.endsWith('=')) {
1993 return name + '?'; 1995 return name + '?';
1994 } 1996 }
1995 } 1997 }
1996 return name; 1998 return name;
1997 } 1999 }
1998 } 2000 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/element_text.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698