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

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

Issue 2652823002: Use single InputPackagesResultProvider, without SdkSummaryResultProvider. (Closed)
Patch Set: Fixes for analyzer_cli. Created 3 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 unified diff | Download patch
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';
11 import 'package:analyzer/dart/ast/token.dart'; 11 import 'package:analyzer/dart/ast/token.dart';
12 import 'package:analyzer/dart/element/element.dart'; 12 import 'package:analyzer/dart/element/element.dart';
13 import 'package:analyzer/dart/element/type.dart'; 13 import 'package:analyzer/dart/element/type.dart';
14 import 'package:analyzer/src/dart/element/element.dart'; 14 import 'package:analyzer/src/dart/element/element.dart';
15 import 'package:analyzer/src/dart/element/handle.dart'; 15 import 'package:analyzer/src/dart/element/handle.dart';
16 import 'package:analyzer/src/dart/element/member.dart'; 16 import 'package:analyzer/src/dart/element/member.dart';
17 import 'package:analyzer/src/dart/element/type.dart'; 17 import 'package:analyzer/src/dart/element/type.dart';
18 import 'package:analyzer/src/generated/engine.dart'; 18 import 'package:analyzer/src/generated/engine.dart';
19 import 'package:analyzer/src/generated/resolver.dart'; 19 import 'package:analyzer/src/generated/resolver.dart';
20 import 'package:analyzer/src/generated/source_io.dart'; 20 import 'package:analyzer/src/generated/source_io.dart';
21 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; 21 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
22 import 'package:analyzer/src/generated/testing/token_factory.dart'; 22 import 'package:analyzer/src/generated/testing/token_factory.dart';
23 import 'package:analyzer/src/summary/format.dart'; 23 import 'package:analyzer/src/summary/format.dart';
24 import 'package:analyzer/src/summary/idl.dart'; 24 import 'package:analyzer/src/summary/idl.dart';
25 import 'package:analyzer/src/summary/summary_sdk.dart';
25 26
26 /** 27 /**
27 * Implementation of [ElementResynthesizer] used when resynthesizing an element 28 * Implementation of [ElementResynthesizer] used when resynthesizing an element
28 * model from summaries. 29 * model from summaries.
29 */ 30 */
30 abstract class SummaryResynthesizer extends ElementResynthesizer { 31 abstract class SummaryResynthesizer extends ElementResynthesizer {
31 /** 32 /**
32 * The parent [SummaryResynthesizer] which is asked to resynthesize elements 33 * The parent [SummaryResynthesizer] which is asked to resynthesize elements
33 * and get summaries before this resynthesizer attempts to do this. 34 * and get summaries before this resynthesizer attempts to do this.
34 * Can be `null`. 35 * Can be `null`.
35 */ 36 */
36 final SummaryResynthesizer parent; 37 final SummaryResynthesizer parent;
37 38
38 /** 39 /**
39 * Source factory used to convert URIs to [Source] objects. 40 * Source factory used to convert URIs to [Source] objects.
40 */ 41 */
41 final SourceFactory sourceFactory; 42 final SourceFactory sourceFactory;
42 43
43 /** 44 /**
44 * Cache of [Source] objects that have already been converted from URIs. 45 * Cache of [Source] objects that have already been converted from URIs.
45 */ 46 */
46 final Map<String, Source> _sources = <String, Source>{}; 47 final Map<String, Source> _sources = <String, Source>{};
47 48
48 /** 49 /**
49 * The [TypeProvider] used to obtain core types (such as Object, int, List, 50 * The [TypeProvider] used to obtain SDK types during resynthesis.
50 * and dynamic) during resynthesis.
51 */ 51 */
52 final TypeProvider typeProvider; 52 TypeProvider _typeProvider;
53 53
54 /** 54 /**
55 * Indicates whether the summary should be resynthesized assuming strong mode 55 * Indicates whether the summary should be resynthesized assuming strong mode
56 * semantics. 56 * semantics.
57 */ 57 */
58 final bool strongMode; 58 final bool strongMode;
59 59
60 /** 60 /**
61 * Map of compilation units resynthesized from summaries. The two map keys 61 * Map of compilation units resynthesized from summaries. The two map keys
62 * are the first two elements of the element's location (the library URI and 62 * are the first two elements of the element's location (the library URI and
(...skipping 10 matching lines...) Expand all
73 final Map<String, Map<String, Map<String, Element>>> _resynthesizedElements = 73 final Map<String, Map<String, Map<String, Element>>> _resynthesizedElements =
74 <String, Map<String, Map<String, Element>>>{}; 74 <String, Map<String, Map<String, Element>>>{};
75 75
76 /** 76 /**
77 * Map of libraries which have been resynthesized from summaries. The map 77 * Map of libraries which have been resynthesized from summaries. The map
78 * key is the library URI. 78 * key is the library URI.
79 */ 79 */
80 final Map<String, LibraryElement> _resynthesizedLibraries = 80 final Map<String, LibraryElement> _resynthesizedLibraries =
81 <String, LibraryElement>{}; 81 <String, LibraryElement>{};
82 82
83 SummaryResynthesizer(this.parent, AnalysisContext context, this.typeProvider, 83 SummaryResynthesizer(
84 this.sourceFactory, this.strongMode) 84 this.parent, AnalysisContext context, this.sourceFactory, this.strongMode)
85 : super(context); 85 : super(context) {
86 _buildTypeProvider();
87 }
86 88
87 /** 89 /**
88 * Number of libraries that have been resynthesized so far. 90 * Number of libraries that have been resynthesized so far.
89 */ 91 */
90 int get resynthesisCount => _resynthesizedLibraries.length; 92 int get resynthesisCount => _resynthesizedLibraries.length;
91 93
92 /** 94 /**
93 * Perform delayed finalization of the `dart:core` and `dart:async` libraries. 95 * The [TypeProvider] used to obtain SDK types during resynthesis.
94 */ 96 */
95 void finalizeCoreAsyncLibraries() { 97 TypeProvider get typeProvider => _typeProvider;
96 (_resynthesizedLibraries['dart:core'] as LibraryElementImpl)
97 .createLoadLibraryFunction(typeProvider);
98 (_resynthesizedLibraries['dart:async'] as LibraryElementImpl)
99 .createLoadLibraryFunction(typeProvider);
100 }
101 98
102 @override 99 @override
103 Element getElement(ElementLocation location) { 100 Element getElement(ElementLocation location) {
104 List<String> components = location.components; 101 List<String> components = location.components;
105 String libraryUri = components[0]; 102 String libraryUri = components[0];
106 // Ask the parent resynthesizer. 103 // Ask the parent resynthesizer.
107 if (parent != null && parent._hasLibrarySummary(libraryUri)) { 104 if (parent != null && parent._hasLibrarySummary(libraryUri)) {
108 return parent.getElement(location); 105 return parent.getElement(location);
109 } 106 }
110 // Resynthesize locally. 107 // Resynthesize locally.
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 */ 257 */
261 UnlinkedUnit getUnlinkedSummary(String uri); 258 UnlinkedUnit getUnlinkedSummary(String uri);
262 259
263 /** 260 /**
264 * Return `true` if this resynthesizer can provide summaries of the libraries 261 * Return `true` if this resynthesizer can provide summaries of the libraries
265 * with the given [uri]. Caller has already checked that 262 * with the given [uri]. Caller has already checked that
266 * `parent.hasLibrarySummary(uri)` returns `false`. 263 * `parent.hasLibrarySummary(uri)` returns `false`.
267 */ 264 */
268 bool hasLibrarySummary(String uri); 265 bool hasLibrarySummary(String uri);
269 266
267 void _buildTypeProvider() {
268 var coreLibrary = getLibraryElement('dart:core') as LibraryElementImpl;
269 var asyncLibrary = getLibraryElement('dart:async') as LibraryElementImpl;
270 SummaryTypeProvider summaryTypeProvider = new SummaryTypeProvider();
271 summaryTypeProvider.initializeCore(coreLibrary);
272 summaryTypeProvider.initializeAsync(asyncLibrary);
273 coreLibrary.createLoadLibraryFunction(summaryTypeProvider);
274 asyncLibrary.createLoadLibraryFunction(summaryTypeProvider);
275 _typeProvider = summaryTypeProvider;
276 }
277
270 /** 278 /**
271 * Return the [LinkedLibrary] for the given [uri] or return `null` if it 279 * Return the [LinkedLibrary] for the given [uri] or return `null` if it
272 * could not be found. 280 * could not be found.
273 */ 281 */
274 LinkedLibrary _getLinkedSummaryOrNull(String uri) { 282 LinkedLibrary _getLinkedSummaryOrNull(String uri) {
275 if (parent != null && parent._hasLibrarySummary(uri)) { 283 if (parent != null && parent._hasLibrarySummary(uri)) {
276 return parent._getLinkedSummaryOrNull(uri); 284 return parent._getLinkedSummaryOrNull(uri);
277 } 285 }
278 return getLinkedSummary(uri); 286 return getLinkedSummary(uri);
279 } 287 }
(...skipping 1629 matching lines...) Expand 10 before | Expand all | Expand 10 after
1909 static String _getElementIdentifier(String name, ReferenceKind kind) { 1917 static String _getElementIdentifier(String name, ReferenceKind kind) {
1910 if (kind == ReferenceKind.topLevelPropertyAccessor || 1918 if (kind == ReferenceKind.topLevelPropertyAccessor ||
1911 kind == ReferenceKind.propertyAccessor) { 1919 kind == ReferenceKind.propertyAccessor) {
1912 if (!name.endsWith('=')) { 1920 if (!name.endsWith('=')) {
1913 return name + '?'; 1921 return name + '?';
1914 } 1922 }
1915 } 1923 }
1916 return name; 1924 return name;
1917 } 1925 }
1918 } 1926 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698