Version 2.19.0-233.0.dev
Merge 4f87eacc5e69e936b2a7d41e5f851b8731258f38 into dev
diff --git a/DEPS b/DEPS
index 9e5f53f..57f154b 100644
--- a/DEPS
+++ b/DEPS
@@ -108,7 +108,7 @@
# For more details, see https://github.com/dart-lang/sdk/issues/30164.
"dart_style_rev": "49bc3ff32b5578b6e19f8fd376d668130941ee29", # manually rev'd
- "dartdoc_rev": "e9b16fcbfd17bf839aff5f9b5f386a5b7be6f3a8",
+ "dartdoc_rev": "d4c344d41ee332733dfa7e2d093dc7df3f481923",
"devtools_rev": "40aae5e5ea2118e2b6dee8a8a20f166f7cec4270",
"ffi_rev": "fb5f2667826c0900e551d19101052f84e35f41bf",
"file_rev": "b2e31cb6ef40b223701dbfa0b907fe58468484d7",
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index 534b09c..afc37f7 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -231,21 +231,23 @@
/// Return the instance creation expression that surrounds the given
/// [node], if any, else null. The [node] may be the instance creation
- /// expression itself or the identifier that names the constructor.
+ /// expression itself or an (optionally prefixed) identifier that names the
+ /// constructor.
InstanceCreationExpression? identifyNewExpression(AstNode? node) {
InstanceCreationExpression? newExpr;
if (node is SimpleIdentifier) {
- var parent = node.parent;
- var grandParent = parent?.parent;
- var greatGrandParent = grandParent?.parent;
- if (parent is ConstructorName &&
- grandParent is InstanceCreationExpression) {
- newExpr = grandParent;
- } else if (grandParent is ConstructorName &&
- greatGrandParent is InstanceCreationExpression) {
- newExpr = greatGrandParent;
- }
- } else if (node is InstanceCreationExpression) {
+ node = node.parent;
+ }
+ if (node is PrefixedIdentifier) {
+ node = node.parent;
+ }
+ if (node is NamedType) {
+ node = node.parent;
+ }
+ if (node is ConstructorName) {
+ node = node.parent;
+ }
+ if (node is InstanceCreationExpression) {
newExpr = node;
}
return newExpr;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
index 3861e06..bcf880b 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
@@ -303,6 +303,52 @@
}
''');
}
+
+ Future<void> test_prefixedConstructor_onConstructor() async {
+ await resolveTestCode('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+ Center(
+ child: m./*caret*/Center(
+ child: Text(''),
+ ),
+ );
+}
+''');
+ await assertHasAssist('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+ Center(
+ child: Text(''),
+ );
+}
+''');
+ }
+
+ Future<void> test_prefixedConstructor_onPrefix() async {
+ await resolveTestCode('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+ Center(
+ child: /*caret*/m.Center(
+ child: Text(''),
+ ),
+ );
+}
+''');
+ await assertHasAssist('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+ Center(
+ child: Text(''),
+ );
+}
+''');
+ }
}
@reflectiveTest
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index 390c532..3fea176 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -40,6 +40,9 @@
/// Feature information for macros.
static final macros = ExperimentalFeatures.macros;
+ /// Feature information for patterns.
+ static final patterns = ExperimentalFeatures.patterns;
+
/// Feature information for records.
static final records = ExperimentalFeatures.records;
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 9d73f80..48e6a50 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -33,6 +33,7 @@
EnableString.non_nullable: ExperimentalFeatures.non_nullable,
EnableString.nonfunction_type_aliases:
ExperimentalFeatures.nonfunction_type_aliases,
+ EnableString.patterns: ExperimentalFeatures.patterns,
EnableString.records: ExperimentalFeatures.records,
EnableString.set_literals: ExperimentalFeatures.set_literals,
EnableString.spread_collections: ExperimentalFeatures.spread_collections,
@@ -88,6 +89,9 @@
/// String to enable the experiment "nonfunction-type-aliases"
static const String nonfunction_type_aliases = 'nonfunction-type-aliases';
+ /// String to enable the experiment "patterns"
+ static const String patterns = 'patterns';
+
/// String to enable the experiment "records"
static const String records = 'records';
@@ -258,8 +262,18 @@
releaseVersion: Version.parse('2.13.0'),
);
- static final records = ExperimentalFeature(
+ static final patterns = ExperimentalFeature(
index: 14,
+ enableString: EnableString.patterns,
+ isEnabledByDefault: IsEnabledByDefault.patterns,
+ isExpired: IsExpired.patterns,
+ documentation: 'Patterns',
+ experimentalReleaseVersion: null,
+ releaseVersion: null,
+ );
+
+ static final records = ExperimentalFeature(
+ index: 15,
enableString: EnableString.records,
isEnabledByDefault: IsEnabledByDefault.records,
isExpired: IsExpired.records,
@@ -269,7 +283,7 @@
);
static final set_literals = ExperimentalFeature(
- index: 15,
+ index: 16,
enableString: EnableString.set_literals,
isEnabledByDefault: IsEnabledByDefault.set_literals,
isExpired: IsExpired.set_literals,
@@ -279,7 +293,7 @@
);
static final spread_collections = ExperimentalFeature(
- index: 16,
+ index: 17,
enableString: EnableString.spread_collections,
isEnabledByDefault: IsEnabledByDefault.spread_collections,
isExpired: IsExpired.spread_collections,
@@ -289,7 +303,7 @@
);
static final super_parameters = ExperimentalFeature(
- index: 17,
+ index: 18,
enableString: EnableString.super_parameters,
isEnabledByDefault: IsEnabledByDefault.super_parameters,
isExpired: IsExpired.super_parameters,
@@ -299,7 +313,7 @@
);
static final test_experiment = ExperimentalFeature(
- index: 18,
+ index: 19,
enableString: EnableString.test_experiment,
isEnabledByDefault: IsEnabledByDefault.test_experiment,
isExpired: IsExpired.test_experiment,
@@ -310,7 +324,7 @@
);
static final triple_shift = ExperimentalFeature(
- index: 19,
+ index: 20,
enableString: EnableString.triple_shift,
isEnabledByDefault: IsEnabledByDefault.triple_shift,
isExpired: IsExpired.triple_shift,
@@ -320,7 +334,7 @@
);
static final value_class = ExperimentalFeature(
- index: 20,
+ index: 21,
enableString: EnableString.value_class,
isEnabledByDefault: IsEnabledByDefault.value_class,
isExpired: IsExpired.value_class,
@@ -330,7 +344,7 @@
);
static final variance = ExperimentalFeature(
- index: 21,
+ index: 22,
enableString: EnableString.variance,
isEnabledByDefault: IsEnabledByDefault.variance,
isExpired: IsExpired.variance,
@@ -385,6 +399,9 @@
/// Default state of the experiment "nonfunction-type-aliases"
static const bool nonfunction_type_aliases = true;
+ /// Default state of the experiment "patterns"
+ static const bool patterns = false;
+
/// Default state of the experiment "records"
static const bool records = false;
@@ -456,6 +473,9 @@
/// Expiration status of the experiment "nonfunction-type-aliases"
static const bool nonfunction_type_aliases = true;
+ /// Expiration status of the experiment "patterns"
+ static const bool patterns = false;
+
/// Expiration status of the experiment "records"
static const bool records = false;
@@ -532,6 +552,9 @@
bool get nonfunction_type_aliases =>
isEnabled(ExperimentalFeatures.nonfunction_type_aliases);
+ /// Current state for the flag "patterns"
+ bool get patterns => isEnabled(ExperimentalFeatures.patterns);
+
/// Current state for the flag "records"
bool get records => isEnabled(ExperimentalFeatures.records);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index bff234d..3a8cc21 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -347,9 +347,8 @@
definingLibrary.featureSet.isEnabled(Feature.generic_metadata),
options = TypeAnalyzerOptions(
nullSafetyEnabled: definingLibrary.isNonNullableByDefault,
- // TODO(paulberry): set `patternsEnabled` correctly once we have an
- // experiment flag for patterns.
- patternsEnabled: false) {
+ patternsEnabled:
+ definingLibrary.featureSet.isEnabled(Feature.patterns)) {
var analysisOptions =
definingLibrary.context.analysisOptions as AnalysisOptionsImpl;
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index cea8548..7c245f0 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -218,6 +218,10 @@
abstract class MapMixin<K, V> implements Map<K, V> { }
abstract class SetMixin<E> implements Set<E> { }
+
+abstract class Queue<E> implements Iterable<E> {
+ bool remove(Object? value);
+}
''',
)
]);
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index bac8946..8624c8b 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -171,6 +171,14 @@
experimentEnabledVersion: const Version(2, 13),
experimentReleasedVersion: const Version(2, 13));
+ static const ExperimentalFlag patterns = const ExperimentalFlag(
+ name: 'patterns',
+ isEnabledByDefault: false,
+ isExpired: false,
+ enabledVersion: const Version(2, 19),
+ experimentEnabledVersion: const Version(2, 19),
+ experimentReleasedVersion: const Version(2, 19));
+
static const ExperimentalFlag records = const ExperimentalFlag(
name: 'records',
isEnabledByDefault: false,
@@ -342,6 +350,10 @@
GlobalFeature get nonfunctionTypeAliases => _nonfunctionTypeAliases ??=
_computeGlobalFeature(ExperimentalFlag.nonfunctionTypeAliases);
+ GlobalFeature? _patterns;
+ GlobalFeature get patterns =>
+ _patterns ??= _computeGlobalFeature(ExperimentalFlag.patterns);
+
GlobalFeature? _records;
GlobalFeature get records =>
_records ??= _computeGlobalFeature(ExperimentalFlag.records);
@@ -468,6 +480,11 @@
canonicalUri,
libraryVersion);
+ LibraryFeature? _patterns;
+ LibraryFeature get patterns =>
+ _patterns ??= globalFeatures._computeLibraryFeature(
+ ExperimentalFlag.patterns, canonicalUri, libraryVersion);
+
LibraryFeature? _records;
LibraryFeature get records =>
_records ??= globalFeatures._computeLibraryFeature(
@@ -541,6 +558,8 @@
return ExperimentalFlag.nonNullable;
case "nonfunction-type-aliases":
return ExperimentalFlag.nonfunctionTypeAliases;
+ case "patterns":
+ return ExperimentalFlag.patterns;
case "records":
return ExperimentalFlag.records;
case "set-literals":
@@ -590,6 +609,7 @@
ExperimentalFlag.nonNullable: ExperimentalFlag.nonNullable.isEnabledByDefault,
ExperimentalFlag.nonfunctionTypeAliases:
ExperimentalFlag.nonfunctionTypeAliases.isEnabledByDefault,
+ ExperimentalFlag.patterns: ExperimentalFlag.patterns.isEnabledByDefault,
ExperimentalFlag.records: ExperimentalFlag.records.isEnabledByDefault,
ExperimentalFlag.setLiterals: ExperimentalFlag.setLiterals.isEnabledByDefault,
ExperimentalFlag.spreadCollections:
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 38d0ada..759e524 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -2377,7 +2377,7 @@
void Assembler::PopNativeCalleeSavedRegisters() {
// Restore the bottom 64-bits of callee-saved V registers.
- bool pop_single = (kAbiPreservedFpuRegCount & 1) == 1;
+ bool pop_single = (kAbiPreservedFpuRegCount & 1) != 0;
VRegister vprev = kNoVRegister;
for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) {
const VRegister r = static_cast<VRegister>(i);
@@ -2397,7 +2397,7 @@
// register when it is not holding a pool-pointer since we are returning to
// C++ code. We also skip the dart stack pointer SP, since we are still
// using it as the stack pointer.
- pop_single = (kAbiPreservedCpuRegCount & 1) == 1;
+ pop_single = (kAbiPreservedCpuRegCount & 1) != 0;
Register prev = kNoRegister;
for (int i = kAbiLastPreservedCpuReg; i >= kAbiFirstPreservedCpuReg; i--) {
Register r = static_cast<Register>(i);
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 62f1e52..ab0075d 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -351,6 +351,7 @@
case Unknown:
UNREACHABLE();
}
+ return 0;
}
AddressType type() const { return type_; }
diff --git a/tools/VERSION b/tools/VERSION
index 79bb302..a177505 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 19
PATCH 0
-PRERELEASE 232
+PRERELEASE 233
PRERELEASE_PATCH 0
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 1055aa8..c624c60 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -131,6 +131,9 @@
records:
help: "Records"
+ patterns:
+ help: "Patterns"
+
# Experiment flag only used for testing.
test-experiment:
help: >-