Index: pkg/analyzer/lib/src/generated/engine.dart |
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart |
index d2f367b4948d17d9a710f47e399b48b12b4d9354..a33bebabede677541545ddc515459f57dfbc51ec 100644 |
--- a/pkg/analyzer/lib/src/generated/engine.dart |
+++ b/pkg/analyzer/lib/src/generated/engine.dart |
@@ -1055,6 +1055,11 @@ class AnalysisNotScheduledError implements Exception {} |
*/ |
abstract class AnalysisOptions { |
/** |
+ * The length of the list returned by [encodeCrossContextOptions]. |
+ */ |
+ static const int crossContextOptionsLength = 2; |
+ |
+ /** |
* Function that returns `true` if analysis is to parse and analyze function |
* bodies for a given source. |
*/ |
@@ -1215,17 +1220,37 @@ abstract class AnalysisOptions { |
bool get trackCacheDependencies; |
/** |
- * Return an integer encoding of the values of the options that need to be the |
- * same across all of the contexts associated with partitions that are to be |
- * shared by a single analysis context. |
+ * Return a list of integers encoding of the values of the options that need |
+ * to be the same across all of the contexts associated with partitions that |
+ * are to be shared by a single analysis context. |
+ * |
+ * The length of the list is guaranteed to equal [crossContextOptionsLength]. |
*/ |
- int encodeCrossContextOptions(); |
+ List<int> encodeCrossContextOptions(); |
/** |
* Set the values of the cross-context options to match those in the given set |
* of [options]. |
*/ |
void setCrossContextOptionsFrom(AnalysisOptions options); |
+ |
+ /** |
+ * Determine whether two lists returned by [encodeCrossContextOptions] are |
+ * equal. |
+ */ |
+ static bool crossContextOptionsEqual(List<int> a, List<int> b) { |
+ assert(a.length == crossContextOptionsLength); |
+ assert(b.length == crossContextOptionsLength); |
+ if (a.length != b.length) { |
+ return false; |
+ } |
+ for (int i = 0; i < a.length; i++) { |
+ if (a[i] != b[i]) { |
+ return false; |
+ } |
+ } |
+ return true; |
+ } |
} |
/** |
@@ -1453,14 +1478,16 @@ class AnalysisOptionsImpl implements AnalysisOptions { |
void set enableConditionalDirectives(_) {} |
@override |
- int encodeCrossContextOptions() => |
- (enableAssertMessage ? ENABLE_ASSERT_FLAG : 0) | |
- (enableGenericMethods ? ENABLE_GENERIC_METHODS_FLAG : 0) | |
- (enableLazyAssignmentOperators ? ENABLE_LAZY_ASSIGNMENT_OPERATORS : 0) | |
- (enableStrictCallChecks ? ENABLE_STRICT_CALL_CHECKS_FLAG : 0) | |
- (enableSuperMixins ? ENABLE_SUPER_MIXINS_FLAG : 0) | |
- (strongMode ? ENABLE_STRONG_MODE_FLAG : 0) | |
- (strongModeHints ? ENABLE_STRONG_MODE_HINTS_FLAG : 0); |
+ List<int> encodeCrossContextOptions() { |
+ int flags = (enableAssertMessage ? ENABLE_ASSERT_FLAG : 0) | |
+ (enableGenericMethods ? ENABLE_GENERIC_METHODS_FLAG : 0) | |
+ (enableLazyAssignmentOperators ? ENABLE_LAZY_ASSIGNMENT_OPERATORS : 0) | |
+ (enableStrictCallChecks ? ENABLE_STRICT_CALL_CHECKS_FLAG : 0) | |
+ (enableSuperMixins ? ENABLE_SUPER_MIXINS_FLAG : 0) | |
+ (strongMode ? ENABLE_STRONG_MODE_FLAG : 0) | |
+ (strongModeHints ? ENABLE_STRONG_MODE_HINTS_FLAG : 0); |
+ return <int>[flags, patchPlatform]; |
+ } |
@override |
void setCrossContextOptionsFrom(AnalysisOptions options) { |
@@ -1473,6 +1500,7 @@ class AnalysisOptionsImpl implements AnalysisOptions { |
if (options is AnalysisOptionsImpl) { |
strongModeHints = options.strongModeHints; |
} |
+ patchPlatform = options.patchPlatform; |
} |
/** |
@@ -1480,42 +1508,39 @@ class AnalysisOptionsImpl implements AnalysisOptions { |
* encoded in the given [encoding], presumably from invoking the method |
* [encodeCrossContextOptions]. |
*/ |
- static String decodeCrossContextOptions(int encoding) { |
- if (encoding == 0) { |
- return 'none'; |
+ static String decodeCrossContextOptions(List<int> encoding) { |
+ List<String> parts = []; |
+ int flags = encoding[0]; |
+ if (flags & ENABLE_ASSERT_FLAG > 0) { |
+ parts.add('assert'); |
} |
- StringBuffer buffer = new StringBuffer(); |
- bool needsSeparator = false; |
- void add(String optionName) { |
- if (needsSeparator) { |
- buffer.write(', '); |
- } |
- buffer.write(optionName); |
- needsSeparator = true; |
+ if (flags & ENABLE_GENERIC_METHODS_FLAG > 0) { |
+ parts.add('genericMethods'); |
} |
- |
- if (encoding & ENABLE_ASSERT_FLAG > 0) { |
- add('assert'); |
+ if (flags & ENABLE_LAZY_ASSIGNMENT_OPERATORS > 0) { |
+ parts.add('lazyAssignmentOperators'); |
} |
- if (encoding & ENABLE_GENERIC_METHODS_FLAG > 0) { |
- add('genericMethods'); |
+ if (flags & ENABLE_STRICT_CALL_CHECKS_FLAG > 0) { |
+ parts.add('strictCallChecks'); |
} |
- if (encoding & ENABLE_LAZY_ASSIGNMENT_OPERATORS > 0) { |
- add('lazyAssignmentOperators'); |
+ if (flags & ENABLE_SUPER_MIXINS_FLAG > 0) { |
+ parts.add('superMixins'); |
} |
- if (encoding & ENABLE_STRICT_CALL_CHECKS_FLAG > 0) { |
- add('strictCallChecks'); |
+ if (flags & ENABLE_STRONG_MODE_FLAG > 0) { |
+ parts.add('strongMode'); |
} |
- if (encoding & ENABLE_SUPER_MIXINS_FLAG > 0) { |
- add('superMixins'); |
+ if (flags & ENABLE_STRONG_MODE_HINTS_FLAG > 0) { |
+ parts.add('strongModeHints'); |
} |
- if (encoding & ENABLE_STRONG_MODE_FLAG > 0) { |
- add('strongMode'); |
+ int patchPlatform = encoding[1]; |
+ if (patchPlatform != 0) { |
+ parts.add('patchPlatform=$patchPlatform'); |
} |
- if (encoding & ENABLE_STRONG_MODE_HINTS_FLAG > 0) { |
- add('strongModeHints'); |
+ if (parts.isEmpty) { |
+ return 'none'; |
+ } else { |
+ return parts.join(', '); |
} |
- return buffer.toString(); |
} |
/** |