Store unresolved assignments as UnresolvedVariableAssignmentJudgment.
R=brianwilkerson@google.com, paulberry@google.com
Change-Id: I4738ba450b1f7e7cab794bdc34a88996d1d827b3
Reviewed-on: https://dart-review.googlesource.com/63360
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index e143a15..5fb8afa 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -150,8 +150,4 @@
class AnalysisHighlightsTest_UseCFE extends AnalysisHighlightsTest {
@override
bool get useCFE => true;
-
- @override
- @failingTest
- test_highlights() => super.test_highlights();
}
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index 284006e..7756923 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -840,13 +840,6 @@
@override
@failingTest
- test_undefinedSetter_static() async {
- // Bad state: No reference information for A at 17
- await super.test_undefinedSetter_static();
- }
-
- @override
- @failingTest
test_undefinedSuperMethod() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_SUPER_METHOD, found 0
await super.test_undefinedSuperMethod();
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index 019a9b5..ca77b73 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -1876,13 +1876,6 @@
return super.test_undefinedStaticMethodOrGetter_method_inSuperclass();
}
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_undefinedStaticMethodOrGetter_setter_inSuperclass() async {
- return super.test_undefinedStaticMethodOrGetter_setter_inSuperclass();
- }
-
@failingTest
@override
test_useOfVoidResult_assignmentExpression_function() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
index e1153f2..bb86b9c 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
@@ -47,20 +47,6 @@
@override
@failingTest
@potentialAnalyzerProblem
- test_unresolved_assignment_left_identifier_compound() async {
- await super.test_unresolved_assignment_left_identifier_compound();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_unresolved_assignment_left_identifier_simple() async {
- await super.test_unresolved_assignment_left_identifier_simple();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
test_unresolved_assignment_left_indexed1_simple() async {
await super.test_unresolved_assignment_left_indexed1_simple();
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index 80de917..cd6ab94 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -86,6 +86,7 @@
IfJudgment,
IllegalAssignmentJudgment,
IndexAssignmentJudgment,
+ InvalidVariableWriteJudgment,
ShadowInvalidInitializer,
LabeledStatementJudgment,
LogicalJudgment,
@@ -107,6 +108,7 @@
SwitchStatementJudgment,
SyntheticExpressionJudgment,
UnresolvedVariableGetJudgment,
+ UnresolvedVariableAssignmentJudgment,
VariableAssignmentJudgment,
VariableDeclarationJudgment,
VariableGetJudgment,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index ed5cd01..4e5426b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -77,6 +77,7 @@
ComplexAssignmentJudgment,
IllegalAssignmentJudgment,
IndexAssignmentJudgment,
+ InvalidVariableWriteJudgment,
MethodInvocationJudgment,
NullAwarePropertyGetJudgment,
PropertyAssignmentJudgment,
@@ -95,6 +96,7 @@
TreeNode,
TypeParameter,
UnresolvedVariableGetJudgment,
+ UnresolvedVariableAssignmentJudgment,
VariableDeclaration,
VariableGet,
VariableSet;
@@ -108,8 +110,6 @@
PrefixBuilder,
TypeDeclarationBuilder;
-import 'kernel_shadow_ast.dart' show InvalidVariableWriteJudgment;
-
part 'kernel_expression_generator_impl.dart';
abstract class KernelExpressionGenerator implements ExpressionGenerator {
@@ -1397,6 +1397,20 @@
: super(helper, token);
@override
+ Expression buildAssignment(Expression value, {bool voidContext: false}) {
+ return _buildUnresolvedVariableAssignment(false, value);
+ }
+
+ @override
+ Expression buildCompoundAssignment(Name binaryOperator, Expression value,
+ {int offset: TreeNode.noOffset,
+ bool voidContext: false,
+ Procedure interfaceTarget,
+ bool isPreIncDec: false}) {
+ return _buildUnresolvedVariableAssignment(true, value);
+ }
+
+ @override
Expression buildSimpleRead() {
Expression error = buildError(forest.argumentsEmpty(token), isGetter: true);
return new UnresolvedVariableGetJudgment(error)
@@ -1408,6 +1422,15 @@
sink.write(", name: ");
sink.write(name.name);
}
+
+ UnresolvedVariableAssignmentJudgment _buildUnresolvedVariableAssignment(
+ bool isCompound, Expression value) {
+ return new UnresolvedVariableAssignmentJudgment(
+ buildError(forest.arguments(<Expression>[value], token), isSetter: true),
+ isCompound,
+ value,
+ )..fileOffset = token.charOffset;
+ }
}
class KernelUnlinkedGenerator extends KernelGenerator with UnlinkedGenerator {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 62b8962..563d0e48 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -3549,6 +3549,29 @@
variable._isLocalFunction;
}
+/// Synthetic judgment class representing an attempt to assign to an unresolved
+/// variable.
+class UnresolvedVariableAssignmentJudgment extends SyntheticExpressionJudgment {
+ final bool isCompound;
+ final ExpressionJudgment rhs;
+
+ UnresolvedVariableAssignmentJudgment(
+ kernel.Expression desugared, this.isCompound, this.rhs)
+ : super(desugared);
+
+ @override
+ Expression infer<Expression, Statement, Initializer, Type>(
+ ShadowTypeInferrer inferrer,
+ Factory<Expression, Statement, Initializer, Type> factory,
+ DartType typeContext) {
+ inferrer.inferExpression(factory, rhs, const UnknownType(), true);
+ inferredType = isCompound ? const DynamicType() : rhs.inferredType;
+ inferrer.listener.variableAssign(
+ this, fileOffset, const DynamicType(), null, null, inferredType);
+ return super.infer(inferrer, factory, typeContext);
+ }
+}
+
/// Synthetic judgment class representing an attempt to read an unresolved
/// variable.
class UnresolvedVariableGetJudgment extends SyntheticExpressionJudgment {