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

Unified Diff: pkg/analyzer/test/src/summary/resynthesize_test.dart

Issue 1718013002: In summaries, don't drop unsafe prefixes. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/summary/resynthesize.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/summary/resynthesize_test.dart
diff --git a/pkg/analyzer/test/src/summary/resynthesize_test.dart b/pkg/analyzer/test/src/summary/resynthesize_test.dart
index 5cacd04799697176244edf9821e2d228efa65afe..74a9f9f966d23cf131b2e17016c5980c02fb3708 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_test.dart
@@ -19,6 +19,7 @@ import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/resolver.dart'
show Namespace, TypeProvider;
import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/testing/ast_factory.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/summary/resynthesize.dart';
import 'package:analyzer/src/summary/summarize_elements.dart';
@@ -348,9 +349,32 @@ class ResynthTest extends ResolverTestCase {
expect(r.name, o.name, reason: desc);
compareElements(r.staticElement, o.staticElement, desc);
} else if (o is PrefixedIdentifier && r is SimpleIdentifier) {
- // We often don't resynthesize prefixed identifiers.
- // We use simple identifiers with correct elements.
- compareConstAsts(r, o.identifier, desc);
+ // We don't resynthesize prefixed identifiers when the prefix refers to
+ // a PrefixElement or a ClassElement. We use simple identifiers with
+ // correct elements.
+ if (o.prefix.staticElement is PrefixElement ||
+ o.prefix.staticElement is ClassElement) {
+ compareConstAsts(r, o.identifier, desc);
+ } else {
+ fail('Prefix of type ${o.prefix.staticElement.runtimeType} should not'
+ ' have been elided');
+ }
+ } else if (o is PropertyAccess &&
+ o.target is PrefixedIdentifier &&
+ r is PrefixedIdentifier) {
+ // We don't resynthesize prefixed identifiers when the prefix refers to
+ // a PrefixElement or a ClassElement. Which means that if the original
+ // expression was e.g. `prefix.topLevelVariableName.length`, it will get
+ // resynthesized as `topLevelVariableName.length`
+ PrefixedIdentifier oTarget = o.target;
+ if (oTarget.prefix.staticElement is PrefixElement ||
+ oTarget.prefix.staticElement is ClassElement) {
+ compareConstAsts(r,
+ AstFactory.identifier(oTarget.identifier, o.propertyName), desc);
+ } else {
+ fail('Prefix of type ${oTarget.prefix.staticElement.runtimeType}'
+ ' should not have been elided');
+ }
} else if (o is PrefixedIdentifier && r is PrefixedIdentifier) {
compareConstAsts(r.prefix, o.prefix, desc);
compareConstAsts(r.identifier, o.identifier, desc);
« no previous file with comments | « pkg/analyzer/lib/src/summary/resynthesize.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698