OLD | NEW |
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 analyzer.src.generated.sdk; | 5 library analyzer.src.generated.sdk; |
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/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
11 import 'package:analyzer/dart/ast/visitor.dart'; | 11 import 'package:analyzer/dart/ast/visitor.dart'; |
12 import 'package:analyzer/src/generated/engine.dart' | 12 import 'package:analyzer/src/generated/engine.dart' |
13 show AnalysisContext, AnalysisOptions, AnalysisOptionsImpl; | 13 show AnalysisContext, AnalysisOptions, AnalysisOptionsImpl; |
14 import 'package:analyzer/src/generated/source.dart' show Source; | 14 import 'package:analyzer/src/generated/source.dart' show Source; |
15 import 'package:analyzer/src/generated/utilities_general.dart'; | 15 import 'package:analyzer/src/generated/utilities_general.dart'; |
16 import 'package:analyzer/src/summary/idl.dart' show PackageBundle; | 16 import 'package:analyzer/src/summary/idl.dart' show PackageBundle; |
17 | 17 |
18 /** | 18 /** |
19 * A function used to create a new DartSdk with the given [options]. If the | |
20 * passed [options] are `null`, then default options are used. | |
21 */ | |
22 typedef DartSdk SdkCreator(AnalysisOptions options); | |
23 | |
24 /** | |
25 * A Dart SDK installed in a specified location. | 19 * A Dart SDK installed in a specified location. |
26 */ | 20 */ |
27 abstract class DartSdk { | 21 abstract class DartSdk { |
28 /** | 22 /** |
29 * The short name of the dart SDK 'async' library. | 23 * The short name of the dart SDK 'async' library. |
30 */ | 24 */ |
31 static const String DART_ASYNC = "dart:async"; | 25 static const String DART_ASYNC = "dart:async"; |
32 | 26 |
33 /** | 27 /** |
34 * The short name of the dart SDK 'core' library. | 28 * The short name of the dart SDK 'core' library. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 */ | 105 */ |
112 final String defaultSdkDirectory; | 106 final String defaultSdkDirectory; |
113 | 107 |
114 /** | 108 /** |
115 * A flag indicating whether it is acceptable to use summaries when they are | 109 * A flag indicating whether it is acceptable to use summaries when they are |
116 * available. | 110 * available. |
117 */ | 111 */ |
118 final bool canUseSummaries; | 112 final bool canUseSummaries; |
119 | 113 |
120 /** | 114 /** |
121 * The function used to create new SDK's. | |
122 */ | |
123 final SdkCreator sdkCreator; | |
124 | |
125 /** | |
126 * A table mapping (an encoding of) analysis options and SDK locations to the | 115 * A table mapping (an encoding of) analysis options and SDK locations to the |
127 * DartSdk from that location that has been configured with those options. | 116 * DartSdk from that location that has been configured with those options. |
128 */ | 117 */ |
129 Map<SdkDescription, DartSdk> sdkMap = new HashMap<SdkDescription, DartSdk>(); | 118 Map<SdkDescription, DartSdk> sdkMap = new HashMap<SdkDescription, DartSdk>(); |
130 | 119 |
131 /** | 120 /** |
132 * Initialize a newly created manager. | 121 * Initialize a newly created manager. |
133 */ | 122 */ |
134 DartSdkManager( | 123 DartSdkManager(this.defaultSdkDirectory, this.canUseSummaries); |
135 this.defaultSdkDirectory, this.canUseSummaries, this.sdkCreator); | |
136 | 124 |
137 /** | 125 /** |
138 * Return any SDK that has been created, or `null` if no SDKs have been | 126 * Return any SDK that has been created, or `null` if no SDKs have been |
139 * created. | 127 * created. |
140 */ | 128 */ |
141 DartSdk get anySdk { | 129 DartSdk get anySdk { |
142 if (sdkMap.isEmpty) { | 130 if (sdkMap.isEmpty) { |
143 return null; | 131 return null; |
144 } | 132 } |
145 return sdkMap.values.first; | 133 return sdkMap.values.first; |
146 } | 134 } |
147 | 135 |
148 /** | 136 /** |
149 * Return a list of the descriptors of the SDKs that are currently being | 137 * Return a list of the descriptors of the SDKs that are currently being |
150 * managed. | 138 * managed. |
151 */ | 139 */ |
152 List<SdkDescription> get sdkDescriptors => sdkMap.keys.toList(); | 140 List<SdkDescription> get sdkDescriptors => sdkMap.keys.toList(); |
153 | 141 |
154 /** | 142 /** |
155 * Return the Dart SDK that is appropriate for the given analysis [options]. | 143 * Return the Dart SDK that is appropriate for the given SDK [description]. |
156 * If such an SDK has not yet been created, then the [sdkCreator] will be | 144 * If such an SDK has not yet been created, then the [ifAbsent] function will |
157 * invoked to create it. | 145 * be invoked to create it. |
158 */ | 146 */ |
159 DartSdk getSdk(SdkDescription description, DartSdk ifAbsent()) { | 147 DartSdk getSdk(SdkDescription description, DartSdk ifAbsent()) { |
160 return sdkMap.putIfAbsent(description, ifAbsent); | 148 return sdkMap.putIfAbsent(description, ifAbsent); |
161 } | 149 } |
162 | |
163 /** | |
164 * Return the Dart SDK that is appropriate for the given analysis [options]. | |
165 * If such an SDK has not yet been created, then the [sdkCreator] will be | |
166 * invoked to create it. | |
167 */ | |
168 DartSdk getSdkForOptions(AnalysisOptions options) { | |
169 // TODO(brianwilkerson) Remove this method and the field sdkCreator. | |
170 SdkDescription description = | |
171 new SdkDescription(<String>[defaultSdkDirectory], options); | |
172 return getSdk(description, () => sdkCreator(options)); | |
173 } | |
174 } | 150 } |
175 | 151 |
176 /** | 152 /** |
177 * A map from Dart library URI's to the [SdkLibraryImpl] representing that | 153 * A map from Dart library URI's to the [SdkLibraryImpl] representing that |
178 * library. | 154 * library. |
179 */ | 155 */ |
180 class LibraryMap { | 156 class LibraryMap { |
181 /** | 157 /** |
182 * A table mapping Dart library URI's to the library. | 158 * A table mapping Dart library URI's to the library. |
183 */ | 159 */ |
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 _platformsToPatchPaths[platforms] = paths; | 659 _platformsToPatchPaths[platforms] = paths; |
684 } | 660 } |
685 | 661 |
686 /** | 662 /** |
687 * Record that this library can be run on the VM. | 663 * Record that this library can be run on the VM. |
688 */ | 664 */ |
689 void setVmLibrary() { | 665 void setVmLibrary() { |
690 _platforms |= VM_PLATFORM; | 666 _platforms |= VM_PLATFORM; |
691 } | 667 } |
692 } | 668 } |
OLD | NEW |