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

Side by Side Diff: pkg/analyzer/lib/src/generated/constant.dart

Issue 1493833003: Issue 25050. Fix for NPE in ConstantEvaluationEngine when duplicate fields. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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/task/dart_test.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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 engine.constant; 5 library engine.constant;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/src/generated/engine.dart'; 9 import 'package:analyzer/src/generated/engine.dart';
10 import 'package:analyzer/src/generated/utilities_general.dart'; 10 import 'package:analyzer/src/generated/utilities_general.dart';
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 } 697 }
698 HashMap<String, DartObjectImpl> fieldMap = 698 HashMap<String, DartObjectImpl> fieldMap =
699 new HashMap<String, DartObjectImpl>(); 699 new HashMap<String, DartObjectImpl>();
700 // Start with final fields that are initialized at their declaration site. 700 // Start with final fields that are initialized at their declaration site.
701 for (FieldElement field in constructor.enclosingElement.fields) { 701 for (FieldElement field in constructor.enclosingElement.fields) {
702 if ((field.isFinal || field.isConst) && 702 if ((field.isFinal || field.isConst) &&
703 !field.isStatic && 703 !field.isStatic &&
704 field is ConstFieldElementImpl) { 704 field is ConstFieldElementImpl) {
705 validator.beforeGetFieldEvaluationResult(field); 705 validator.beforeGetFieldEvaluationResult(field);
706 EvaluationResultImpl evaluationResult = field.evaluationResult; 706 EvaluationResultImpl evaluationResult = field.evaluationResult;
707 // It is possible that the evaluation result is null.
708 // This happens for example when we have duplicate fields.
709 // class Test {final x = 1; final x = 2; const Test();}
710 if (evaluationResult == null) {
711 continue;
712 }
713 // Match the value and the type.
707 DartType fieldType = 714 DartType fieldType =
708 FieldMember.from(field, constructor.returnType).type; 715 FieldMember.from(field, constructor.returnType).type;
709 DartObjectImpl fieldValue = evaluationResult.value; 716 DartObjectImpl fieldValue = evaluationResult.value;
710 if (fieldValue != null && !runtimeTypeMatch(fieldValue, fieldType)) { 717 if (fieldValue != null && !runtimeTypeMatch(fieldValue, fieldType)) {
711 errorReporter.reportErrorForNode( 718 errorReporter.reportErrorForNode(
712 CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMA TCH, 719 CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMA TCH,
713 node, 720 node,
714 [fieldValue.type, field.name, fieldType]); 721 [fieldValue.type, field.name, fieldType]);
715 } 722 }
716 fieldMap[field.name] = evaluationResult.value; 723 fieldMap[field.name] = fieldValue;
717 } 724 }
718 } 725 }
719 // Now evaluate the constructor declaration. 726 // Now evaluate the constructor declaration.
720 HashMap<String, DartObjectImpl> parameterMap = 727 HashMap<String, DartObjectImpl> parameterMap =
721 new HashMap<String, DartObjectImpl>(); 728 new HashMap<String, DartObjectImpl>();
722 List<ParameterElement> parameters = constructor.parameters; 729 List<ParameterElement> parameters = constructor.parameters;
723 int parameterCount = parameters.length; 730 int parameterCount = parameters.length;
724 for (int i = 0; i < parameterCount; i++) { 731 for (int i = 0; i < parameterCount; i++) {
725 ParameterElement parameter = parameters[i]; 732 ParameterElement parameter = parameters[i];
726 ParameterElement baseParameter = parameter; 733 ParameterElement baseParameter = parameter;
(...skipping 4833 matching lines...) Expand 10 before | Expand all | Expand 10 after
5560 return BoolState.from(_element == rightElement); 5567 return BoolState.from(_element == rightElement);
5561 } else if (rightOperand is DynamicState) { 5568 } else if (rightOperand is DynamicState) {
5562 return BoolState.UNKNOWN_VALUE; 5569 return BoolState.UNKNOWN_VALUE;
5563 } 5570 }
5564 return BoolState.FALSE_STATE; 5571 return BoolState.FALSE_STATE;
5565 } 5572 }
5566 5573
5567 @override 5574 @override
5568 String toString() => _element == null ? "-unknown-" : _element.name; 5575 String toString() => _element == null ? "-unknown-" : _element.name;
5569 } 5576 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/task/dart_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698