Version 2.15.0-104.0.dev
Merge commit 'b1491fc43ec037867f596c24b98aa6ad5fa8fd73' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6ddec26..0fed6d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -132,7 +132,18 @@
- fixes false positives in `use_rethrow_when_possible`.
- improves performance for `annotate_overrides`, `prefer_contains`, and
`prefer_void_to_null`.
+
### Pub
+
+- Adds support for token-based authorization to third party package-repositories
+ with the new command `dart pub token`.
+- Credentials are no longer stored in the pub-cache, but in a platform dependent
+ config directory:
+ * On Linux `$XDG_CONFIG_HOME/dart/pub-credentials.json` if `$XDG_CONFIG_HOME`
+ is defined, otherwise `$HOME/.config/dart/pub-credentials.json`
+ * On Mac OS: `$HOME/Library/Application Support/dart/pub-credentials.json`
+ * On Windows: `%APPDATA%/dart/pub-credentials.json`
+
- Detect potential leaks in `dart pub publish`.
When publishing, pub will examine your files for potential secret keys, and
warn you.
@@ -140,7 +151,10 @@
To ignore a file that has a false positive, add it to a
[`false_secrets`](https://dart.dev/go/false-secrets) section of your
`pubspec.yaml`.
-- Fixes unicode terminal detection windows
+- Fixes unicode terminal detection windows.
+- New flag `--example` to the commands
+ `dart pub get/upgrade/downgrade/add/remove` that will result in the `example/`
+ folder dependencies to be updated after operating in the current directory.
## 2.14.1 - 2021-09-09
diff --git a/DEPS b/DEPS
index 427f6e8..0f21607 100644
--- a/DEPS
+++ b/DEPS
@@ -138,7 +138,7 @@
"pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
"process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
"protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
- "pub_rev": "d95c5713dda518ed53ada70e00789e6aadbfbe48",
+ "pub_rev": "cafadd17ba285dad9ebe6d34c617bc0d70d096b3",
"pub_semver_rev": "a43ad72fb6b7869607581b5fedcb186d1e74276a",
"resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
"root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
@@ -163,7 +163,7 @@
"test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
"test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
"typed_data_rev": "29ce5a92b03326d0b8035916ac04f528874994bd",
- "usage_rev": "e0780cd8b2f8af69a28dc52678ffe8492da27d06",
+ "usage_rev": "016dd302b494e4ff70a7850957ec895eced9d220",
"vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
"watcher_rev": "3924194385fb215cef483193ed2879a618a3d69c",
"webdriver_rev": "ff5ccb1522edf4bed578ead4d65e0cbc1f2c4f02",
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index c4f5c6a..c33aafe 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -1093,9 +1093,41 @@
@override
DartObjectImpl? visitConstructorReference(ConstructorReference node) {
- // TODO(srawlins): record type arguments in DartObject as well, as in
- // [visitFunctionReference] below.
- return _getConstantValue(node, node.constructorName.staticElement);
+ var constructorTearoffResult = DartObjectImpl(
+ typeSystem,
+ node.typeOrThrow,
+ FunctionState(node.constructorName.staticElement),
+ );
+ var typeArgumentList = node.constructorName.type.typeArguments;
+ if (typeArgumentList == null) {
+ return constructorTearoffResult;
+ } else {
+ var typeArguments = <DartType>[];
+ var typeArgumentObjects = <DartObjectImpl>[];
+ for (var typeArgument in typeArgumentList.arguments) {
+ var object = typeArgument.accept(this);
+ if (object == null) {
+ return null;
+ }
+ var typeArgumentType = object.toTypeValue();
+ if (typeArgumentType == null) {
+ return null;
+ }
+ // TODO(srawlins): Test type alias types (`typedef i = int`) used as
+ // type arguments. Possibly change implementation based on
+ // canonicalization rules.
+ typeArguments.add(typeArgumentType);
+ typeArgumentObjects.add(object);
+ }
+ // The result is already instantiated during resolution;
+ // [_dartObjectComputer.typeInstantiate] is unnecessary.
+ return DartObjectImpl(
+ typeSystem,
+ node.typeOrThrow,
+ FunctionState(node.constructorName.staticElement,
+ typeArguments: typeArgumentObjects),
+ );
+ }
}
@override
@@ -1135,7 +1167,7 @@
typeArgumentObjects.add(object);
}
return _dartObjectComputer.typeInstantiate(
- node, functionResult, typeArguments, typeArgumentObjects);
+ functionResult, typeArguments, typeArgumentObjects);
}
}
@@ -2147,7 +2179,6 @@
}
DartObjectImpl? typeInstantiate(
- FunctionReference node,
DartObjectImpl function,
List<DartType> typeArguments,
List<DartObjectImpl> typeArgumentObjects,
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 24f2212..359885a 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -1312,7 +1312,15 @@
if (rightElement == null) {
return BoolState.UNKNOWN_VALUE;
}
- if (_element != rightElement) {
+
+ var element = _element;
+ var otherElement = rightOperand._element;
+ var elementsAreEqual = identical(element, otherElement) ||
+ (element != null &&
+ otherElement != null &&
+ otherElement.kind == element.kind &&
+ otherElement.location == element.location);
+ if (!elementsAreEqual) {
return BoolState.FALSE_STATE;
}
var typeArguments = _typeArguments;
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 7a33308..b5aa73e 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -275,8 +275,6 @@
}
class LinkResult {
- @Deprecated('This field is not used anymore')
- final Uint8List astBytes = Uint8List(0);
final Uint8List resolutionBytes;
LinkResult({
diff --git a/pkg/analyzer/lib/src/summary2/package_bundle_format.dart b/pkg/analyzer/lib/src/summary2/package_bundle_format.dart
index f87e585..f6d3bd2 100644
--- a/pkg/analyzer/lib/src/summary2/package_bundle_format.dart
+++ b/pkg/analyzer/lib/src/summary2/package_bundle_format.dart
@@ -21,7 +21,6 @@
}
Uint8List finish({
- @Deprecated('This parameter is not used anymore') Uint8List? astBytes,
required Uint8List resolutionBytes,
PackageBundleSdk? sdk,
}) {
diff --git a/pkg/analyzer/test/id_tests/assigned_variables_test.dart b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
index ef788ba..9459ee1 100644
--- a/pkg/analyzer/test/id_tests/assigned_variables_test.dart
+++ b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
@@ -24,7 +24,7 @@
createUriForFileName: createUriForFileName,
onFailure: onFailure,
runTest: runTestFor(
- const _AssignedVariablesDataComputer(), [analyzerNnbdConfig]));
+ const _AssignedVariablesDataComputer(), [analyzerDefaultConfig]));
}
class _AssignedVariablesDataComputer extends DataComputer<_Data> {
diff --git a/pkg/analyzer/test/id_tests/constant_test.dart b/pkg/analyzer/test/id_tests/constant_test.dart
index 58b19d2..10a1825 100644
--- a/pkg/analyzer/test/id_tests/constant_test.dart
+++ b/pkg/analyzer/test/id_tests/constant_test.dart
@@ -24,8 +24,8 @@
args: args,
createUriForFileName: createUriForFileName,
onFailure: onFailure,
- runTest: runTestFor(
- const ConstantsDataComputer(), [analyzerConstantUpdate2018Config]));
+ runTest:
+ runTestFor(const ConstantsDataComputer(), [analyzerDefaultConfig]));
}
class ConstantsDataComputer extends DataComputer<String> {
diff --git a/pkg/analyzer/test/id_tests/definite_assignment_test.dart b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
index dd3fe0b..7d920ab 100644
--- a/pkg/analyzer/test/id_tests/definite_assignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
@@ -25,7 +25,7 @@
createUriForFileName: createUriForFileName,
onFailure: onFailure,
runTest: runTestFor(
- const _DefiniteAssignmentDataComputer(), [analyzerNnbdConfig]));
+ const _DefiniteAssignmentDataComputer(), [analyzerDefaultConfig]));
}
class _DefiniteAssignmentDataComputer extends DataComputer<String> {
diff --git a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
index 7e4d258..f17d8e2 100644
--- a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
@@ -25,7 +25,7 @@
createUriForFileName: createUriForFileName,
onFailure: onFailure,
runTest: runTestFor(
- const _DefiniteAssignmentDataComputer(), [analyzerNnbdConfig]));
+ const _DefiniteAssignmentDataComputer(), [analyzerDefaultConfig]));
}
class _DefiniteAssignmentDataComputer extends DataComputer<String> {
diff --git a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
index 224d689..2ba48a6 100644
--- a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
@@ -22,7 +22,7 @@
createUriForFileName: createUriForFileName,
onFailure: onFailure,
runTest: runTestFor(
- const _InferredTypeArgumentsDataComputer(), [analyzerNnbdConfig]));
+ const _InferredTypeArgumentsDataComputer(), [analyzerDefaultConfig]));
}
class _InferredTypeArgumentsDataComputer extends DataComputer<List<DartType>> {
diff --git a/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart b/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
index 7f312ca..94b3771 100644
--- a/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
@@ -22,7 +22,7 @@
createUriForFileName: createUriForFileName,
onFailure: onFailure,
runTest: runTestFor(
- const _InferredVariableTypesDataComputer(), [analyzerNnbdConfig]));
+ const _InferredVariableTypesDataComputer(), [analyzerDefaultConfig]));
}
class _InferredVariableTypesDataComputer extends DataComputer<DartType> {
diff --git a/pkg/analyzer/test/id_tests/inheritance_test.dart b/pkg/analyzer/test/id_tests/inheritance_test.dart
index 299ff7c..08756c3 100644
--- a/pkg/analyzer/test/id_tests/inheritance_test.dart
+++ b/pkg/analyzer/test/id_tests/inheritance_test.dart
@@ -24,7 +24,7 @@
createUriForFileName: createUriForFileName,
onFailure: onFailure,
runTest:
- runTestFor(const _InheritanceDataComputer(), [analyzerNnbdConfig]),
+ runTestFor(const _InheritanceDataComputer(), [analyzerDefaultConfig]),
skipMap: {
analyzerMarker: [
// These are CFE-centric tests for an opt-in/opt-out sdk.
diff --git a/pkg/analyzer/test/id_tests/nullability_test.dart b/pkg/analyzer/test/id_tests/nullability_test.dart
index 72fd2ef..0abde94 100644
--- a/pkg/analyzer/test/id_tests/nullability_test.dart
+++ b/pkg/analyzer/test/id_tests/nullability_test.dart
@@ -26,8 +26,8 @@
args: args,
createUriForFileName: createUriForFileName,
onFailure: onFailure,
- runTest:
- runTestFor(const _NullabilityDataComputer(), [analyzerNnbdConfig]));
+ runTest: runTestFor(
+ const _NullabilityDataComputer(), [analyzerDefaultConfig]));
}
class FlowTestBase {
diff --git a/pkg/analyzer/test/id_tests/reachability_test.dart b/pkg/analyzer/test/id_tests/reachability_test.dart
index 8714082..d5b03f8 100644
--- a/pkg/analyzer/test/id_tests/reachability_test.dart
+++ b/pkg/analyzer/test/id_tests/reachability_test.dart
@@ -22,8 +22,8 @@
args: args,
createUriForFileName: createUriForFileName,
onFailure: onFailure,
- runTest:
- runTestFor(const _ReachabilityDataComputer(), [analyzerNnbdConfig]));
+ runTest: runTestFor(
+ const _ReachabilityDataComputer(), [analyzerDefaultConfig]));
}
class FlowTestBase {
diff --git a/pkg/analyzer/test/id_tests/type_promotion_test.dart b/pkg/analyzer/test/id_tests/type_promotion_test.dart
index a5e0435..0f7f189 100644
--- a/pkg/analyzer/test/id_tests/type_promotion_test.dart
+++ b/pkg/analyzer/test/id_tests/type_promotion_test.dart
@@ -22,8 +22,8 @@
args: args,
createUriForFileName: createUriForFileName,
onFailure: onFailure,
- runTest:
- runTestFor(const _TypePromotionDataComputer(), [analyzerNnbdConfig]));
+ runTest: runTestFor(
+ const _TypePromotionDataComputer(), [analyzerDefaultConfig]));
}
class _TypePromotionDataComputer extends DataComputer<DartType> {
diff --git a/pkg/analyzer/test/id_tests/why_not_promoted_test.dart b/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
index 6cef947..2f8e046 100644
--- a/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
+++ b/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
@@ -22,7 +22,7 @@
createUriForFileName: createUriForFileName,
onFailure: onFailure,
runTest: runTestFor(
- const _WhyNotPromotedDataComputer(), [analyzerNnbdConfig]));
+ const _WhyNotPromotedDataComputer(), [analyzerDefaultConfig]));
}
class _WhyNotPromotedDataComputer extends DataComputer<String?> {
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index ba67935..69b5497 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -24,6 +24,102 @@
@reflectiveTest
class ConstantVisitorTest extends ConstantVisitorTestSupport
with ConstantVisitorTestCases {
+ test_identical_constructorReference_explicitTypeArgs_differentClasses() async {
+ await resolveTestCode('''
+class C<T> {}
+class D<T> {}
+const a = identical(C<int>.new, D<int>.new);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(false),
+ );
+ }
+
+ test_identical_constructorReference_explicitTypeArgs_differentConstructors() async {
+ await resolveTestCode('''
+class C<T> {
+ C();
+ C.named();
+}
+const a = identical(C<int>.new, C<int>.named);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(false),
+ );
+ }
+
+ test_identical_constructorReference_explicitTypeArgs_differentTypeArgs() async {
+ await resolveTestCode('''
+class C<T> {}
+const a = identical(C<int>.new, C<String>.new);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(false),
+ );
+ }
+
+ test_identical_constructorReference_explicitTypeArgs_sameElement() async {
+ await resolveTestCode('''
+class C<T> {}
+const a = identical(C<int>.new, C<int>.new);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(true),
+ );
+ }
+
+ test_identical_constructorReference_notInstantiated_differentClasses() async {
+ await resolveTestCode('''
+class C<T> {}
+class D<T> {}
+const a = identical(C.new, D.new);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(false),
+ );
+ }
+
+ test_identical_constructorReference_notInstantiated_differentConstructors() async {
+ await resolveTestCode('''
+class C<T> {
+ C();
+ C.named();
+}
+const a = identical(C.new, C.named);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(false),
+ );
+ }
+
+ test_identical_constructorReference_notInstantiated_sameElement() async {
+ await resolveTestCode('''
+class C<T> {}
+const a = identical(C.new, C.new);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(true),
+ );
+ }
+
+ test_identical_constructorReference_onlyOneHasTypeArgs() async {
+ await resolveTestCode('''
+class C<T> {}
+const a = identical(C<int>.new, C.new);
+''');
+ expect(
+ _evaluateConstant('a'),
+ _boolValue(false),
+ );
+ }
+
test_visitAsExpression_potentialConstType() async {
await assertNoErrorsInCode('''
const num three = 3;
diff --git a/pkg/analyzer/test/src/dart/element/display_string_test.dart b/pkg/analyzer/test/src/dart/element/display_string_test.dart
index e5f4644..838d3c2 100644
--- a/pkg/analyzer/test/src/dart/element/display_string_test.dart
+++ b/pkg/analyzer/test/src/dart/element/display_string_test.dart
@@ -2,14 +2,10 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:analyzer/dart/element/type_provider.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/elements_types_mixin.dart';
-import '../../../generated/test_analysis_context.dart';
+import '../../../generated/type_system_test.dart';
main() {
defineReflectiveSuite(() {
@@ -18,30 +14,7 @@
}
@reflectiveTest
-class ElementDisplayStringTest with ElementsTypesMixin {
- late final TestAnalysisContext _analysisContext;
-
- @override
- late final LibraryElementImpl testLibrary;
-
- @override
- late final TypeProvider typeProvider;
-
- late final TypeSystemImpl typeSystem;
-
- void setUp() {
- _analysisContext = TestAnalysisContext();
- typeProvider = _analysisContext.typeProviderLegacy;
- typeSystem = _analysisContext.typeSystemLegacy;
-
- testLibrary = library_(
- uriStr: 'package:test/test.dart',
- analysisContext: _analysisContext,
- analysisSession: _analysisContext.analysisSession,
- typeSystem: typeSystem,
- );
- }
-
+class ElementDisplayStringTest extends AbstractTypeSystemTest {
void test_longMethod() {
final methodA = method(
'longMethodName',
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index ad6cf9b..0ac00a2 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -9,18 +9,16 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
import 'package:analyzer/src/generated/testing/element_factory.dart';
import 'package:analyzer/src/generated/testing/test_type_provider.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/elements_types_mixin.dart';
import '../../../generated/test_analysis_context.dart';
+import '../../../generated/type_system_test.dart';
import '../resolution/context_collection_resolution.dart';
main() {
@@ -41,33 +39,8 @@
});
}
-class AbstractTypeTest with ElementsTypesMixin {
- late final TestAnalysisContext _analysisContext;
-
- @override
- late final LibraryElementImpl testLibrary;
-
- @override
- late final TypeProvider typeProvider;
-
- late final TypeSystemImpl typeSystem;
-
- void setUp() {
- _analysisContext = TestAnalysisContext();
- typeProvider = _analysisContext.typeProviderLegacy;
- typeSystem = _analysisContext.typeSystemLegacy;
-
- testLibrary = library_(
- uriStr: 'package:test/test.dart',
- analysisContext: _analysisContext,
- analysisSession: _analysisContext.analysisSession,
- typeSystem: typeSystem,
- );
- }
-}
-
@reflectiveTest
-class ClassElementImplTest extends AbstractTypeTest {
+class ClassElementImplTest extends AbstractTypeSystemTest {
void test_getField() {
var classA = class_(name: 'A');
String fieldName = "f";
@@ -488,7 +461,7 @@
}
LibraryElementImpl _newLibrary() =>
- ElementFactory.library(_analysisContext, 'lib');
+ ElementFactory.library(analysisContext, 'lib');
}
@reflectiveTest
@@ -539,10 +512,9 @@
}
@reflectiveTest
-class ElementImplTest extends AbstractTypeTest {
+class ElementImplTest extends AbstractTypeSystemTest {
void test_equals() {
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
ClassElementImpl classElement = ElementFactory.classElement2("C");
(library.definingCompilationUnit as CompilationUnitElementImpl).classes =
<ClassElement>[classElement];
@@ -567,18 +539,17 @@
void test_isAccessibleIn_private_differentLibrary() {
LibraryElementImpl library1 =
- ElementFactory.library(_analysisContext, "lib1");
+ ElementFactory.library(analysisContext, "lib1");
ClassElement classElement = ElementFactory.classElement2("_C");
(library1.definingCompilationUnit as CompilationUnitElementImpl).classes =
<ClassElement>[classElement];
LibraryElementImpl library2 =
- ElementFactory.library(_analysisContext, "lib2");
+ ElementFactory.library(analysisContext, "lib2");
expect(classElement.isAccessibleIn(library2), isFalse);
}
void test_isAccessibleIn_private_sameLibrary() {
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
ClassElement classElement = ElementFactory.classElement2("_C");
(library.definingCompilationUnit as CompilationUnitElementImpl).classes =
<ClassElement>[classElement];
@@ -587,18 +558,17 @@
void test_isAccessibleIn_public_differentLibrary() {
LibraryElementImpl library1 =
- ElementFactory.library(_analysisContext, "lib1");
+ ElementFactory.library(analysisContext, "lib1");
ClassElement classElement = ElementFactory.classElement2("C");
(library1.definingCompilationUnit as CompilationUnitElementImpl).classes =
<ClassElement>[classElement];
LibraryElementImpl library2 =
- ElementFactory.library(_analysisContext, "lib2");
+ ElementFactory.library(analysisContext, "lib2");
expect(classElement.isAccessibleIn(library2), isTrue);
}
void test_isAccessibleIn_public_sameLibrary() {
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
ClassElement classElement = ElementFactory.classElement2("C");
(library.definingCompilationUnit as CompilationUnitElementImpl).classes =
<ClassElement>[classElement];
@@ -729,7 +699,7 @@
}
@reflectiveTest
-class FunctionTypeImplTest extends AbstractTypeTest {
+class FunctionTypeImplTest extends AbstractTypeSystemTest {
void assertType(DartType type, String expected) {
var typeStr = type.getDisplayString(withNullability: false);
expect(typeStr, expected);
@@ -866,7 +836,7 @@
}
@reflectiveTest
-class InterfaceTypeImplTest extends AbstractTypeTest {
+class InterfaceTypeImplTest extends AbstractTypeSystemTest {
void test_allSupertypes() {
void check(InterfaceType type, List<String> expected) {
var actual = type.allSupertypes.map((e) {
@@ -1310,8 +1280,7 @@
ElementFactory.getterElement(getterName, false, intNone);
classA.accessors = <PropertyAccessorElement>[getterG];
InterfaceType typeA = interfaceTypeStar(classA);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
expect(typeA.lookUpGetter(getterName, library), same(getterG));
@@ -1331,8 +1300,7 @@
ClassElementImpl classB =
ElementFactory.classElement("B", interfaceTypeStar(classA));
InterfaceType typeB = interfaceTypeStar(classB);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[
classA,
@@ -1366,8 +1334,7 @@
interfaceTypeStar(classM1),
interfaceTypeStar(classM2)
];
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
unit.classes = <ClassElement>[classB, classM1, classM2, classC];
expect(
@@ -1384,8 +1351,7 @@
InterfaceType typeA = interfaceTypeStar(classA);
var classB = ElementFactory.classElement("B", typeA);
classA.supertype = interfaceTypeStar(classB);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[
classA,
@@ -1401,8 +1367,7 @@
//
var classA = class_(name: 'A');
InterfaceType typeA = interfaceTypeStar(classA);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
expect(typeA.lookUpGetter("g", library), isNull);
@@ -1419,8 +1384,7 @@
ElementFactory.methodElement(methodName, intNone);
classA.methods = <MethodElement>[methodM];
InterfaceType typeA = interfaceTypeStar(classA);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
expect(typeA.lookUpMethod(methodName, library), same(methodM));
@@ -1440,8 +1404,7 @@
ClassElementImpl classB =
ElementFactory.classElement("B", interfaceTypeStar(classA));
InterfaceType typeB = interfaceTypeStar(classB);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[
classA,
@@ -1474,8 +1437,7 @@
interfaceTypeStar(classM1),
interfaceTypeStar(classM2)
];
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
unit.classes = <ClassElement>[classB, classM1, classM2, classC];
expect(
@@ -1505,8 +1467,7 @@
typeParameterTypeStar(F),
]),
);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[A];
//
@@ -1533,8 +1494,7 @@
InterfaceType typeA = interfaceTypeStar(classA);
var classB = ElementFactory.classElement("B", typeA);
classA.supertype = interfaceTypeStar(classB);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[
classA,
@@ -1550,8 +1510,7 @@
//
var classA = class_(name: 'A');
InterfaceType typeA = interfaceTypeStar(classA);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
expect(typeA.lookUpMethod("m", library), isNull);
@@ -1568,8 +1527,7 @@
ElementFactory.setterElement(setterName, false, intNone);
classA.accessors = <PropertyAccessorElement>[setterS];
InterfaceType typeA = interfaceTypeStar(classA);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
expect(typeA.lookUpSetter(setterName, library), same(setterS));
@@ -1589,8 +1547,7 @@
ClassElementImpl classB =
ElementFactory.classElement("B", interfaceTypeStar(classA));
InterfaceType typeB = interfaceTypeStar(classB);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[
classA,
@@ -1624,8 +1581,7 @@
interfaceTypeStar(classM1),
interfaceTypeStar(classM2)
];
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
unit.classes = <ClassElement>[classB, classM1, classM2, classC];
expect(
@@ -1642,8 +1598,7 @@
InterfaceType typeA = interfaceTypeStar(classA);
var classB = ElementFactory.classElement("B", typeA);
classA.supertype = interfaceTypeStar(classB);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[
classA,
@@ -1659,8 +1614,7 @@
//
var classA = class_(name: 'A');
InterfaceType typeA = interfaceTypeStar(classA);
- LibraryElementImpl library =
- ElementFactory.library(_analysisContext, "lib");
+ LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
CompilationUnitElement unit = library.definingCompilationUnit;
(unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
expect(typeA.lookUpSetter("s", library), isNull);
@@ -1779,7 +1733,7 @@
}
@reflectiveTest
-class TypeParameterTypeImplTest extends AbstractTypeTest {
+class TypeParameterTypeImplTest extends AbstractTypeSystemTest {
void test_asInstanceOf_hasBound_element() {
var T = typeParameter('T', bound: listNone(intNone));
_assert_asInstanceOf(
@@ -2016,7 +1970,7 @@
}
@reflectiveTest
-class VoidTypeImplTest extends AbstractTypeTest {
+class VoidTypeImplTest extends AbstractTypeSystemTest {
/// Reference {code VoidTypeImpl.getInstance()}.
final DartType _voidType = VoidTypeImpl.instance;
diff --git a/pkg/analyzer/test/src/dart/element/function_type_test.dart b/pkg/analyzer/test/src/dart/element/function_type_test.dart
index 79cf038..a685819 100644
--- a/pkg/analyzer/test/src/dart/element/function_type_test.dart
+++ b/pkg/analyzer/test/src/dart/element/function_type_test.dart
@@ -5,13 +5,11 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/generated/testing/test_type_provider.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/elements_types_mixin.dart';
+import '../../../generated/type_system_test.dart';
main() {
defineReflectiveSuite(() {
@@ -24,10 +22,7 @@
VoidTypeImpl get voidType => VoidTypeImpl.instance;
@reflectiveTest
-class FunctionTypeTest with ElementsTypesMixin {
- @override
- final TypeProvider typeProvider = TestTypeProvider();
-
+class FunctionTypeTest extends AbstractTypeSystemTest {
InterfaceType get intType => typeProvider.intType;
ClassElement get listElement => typeProvider.listElement;
diff --git a/pkg/analyzer/test/src/dart/element/subtype_test.dart b/pkg/analyzer/test/src/dart/element/subtype_test.dart
index 89411e9..481f288 100644
--- a/pkg/analyzer/test/src/dart/element/subtype_test.dart
+++ b/pkg/analyzer/test/src/dart/element/subtype_test.dart
@@ -15,249 +15,11 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SubtypeTest);
- defineReflectiveTests(NonNullableSubtypingCompoundTest);
defineReflectiveTests(SubtypingCompoundTest);
});
}
@reflectiveTest
-class NonNullableSubtypingCompoundTest extends _SubtypingCompoundTestBase {
- test_dynamic() {
- var equivalents = <DartType>[
- voidNone,
- objectQuestion,
- objectStar,
- ];
-
- var subtypes = <DartType>[
- neverNone,
- nullNone,
- objectNone,
- ];
-
- _checkGroups(
- dynamicNone,
- equivalents: equivalents,
- subtypes: subtypes,
- );
- }
-
- test_futureOr_topTypes() {
- var futureOrObject = futureOrNone(objectNone);
- var futureOrObjectStar = futureOrNone(objectStar);
- var futureOrObjectQuestion = futureOrNone(objectQuestion);
-
- var futureOrStarObject = futureOrStar(objectNone);
- var futureOrStarObjectStar = futureOrStar(objectStar);
- var futureOrStarObjectQuestion = futureOrStar(objectQuestion);
-
- var futureOrQuestionObject = futureOrQuestion(objectNone);
- var futureOrQuestionObjectStar = futureOrQuestion(objectStar);
- var futureOrQuestionObjectQuestion = futureOrQuestion(objectQuestion);
-
- //FutureOr<Object> <: FutureOr*<Object?>
- _checkGroups(
- futureOrObject,
- equivalents: [
- objectStar,
- futureOrObjectStar,
- futureOrStarObject,
- futureOrStarObjectStar,
- objectNone,
- ],
- subtypes: [],
- supertypes: [
- objectQuestion,
- futureOrQuestionObject,
- futureOrObjectQuestion,
- futureOrQuestionObject,
- futureOrQuestionObjectStar,
- futureOrStarObjectQuestion,
- futureOrQuestionObjectQuestion,
- ],
- );
- }
-
- test_intNone() {
- var equivalents = <DartType>[
- intNone,
- intStar,
- ];
-
- var subtypes = <DartType>[
- neverNone,
- ];
-
- var supertypes = <DartType>[
- intQuestion,
- objectNone,
- objectQuestion,
- ];
-
- var unrelated = <DartType>[
- doubleNone,
- nullNone,
- nullStar,
- nullQuestion,
- neverQuestion,
- ];
-
- _checkGroups(
- intNone,
- equivalents: equivalents,
- supertypes: supertypes,
- unrelated: unrelated,
- subtypes: subtypes,
- );
- }
-
- test_intQuestion() {
- var equivalents = <DartType>[
- intQuestion,
- intStar,
- ];
-
- var subtypes = <DartType>[
- intNone,
- nullNone,
- nullQuestion,
- nullStar,
- neverNone,
- neverQuestion,
- neverStar,
- ];
-
- var supertypes = <DartType>[
- numQuestion,
- numStar,
- objectQuestion,
- objectStar,
- ];
-
- var unrelated = <DartType>[
- doubleNone,
- numNone,
- objectNone,
- ];
-
- _checkGroups(
- intQuestion,
- equivalents: equivalents,
- supertypes: supertypes,
- unrelated: unrelated,
- subtypes: subtypes,
- );
- }
-
- test_intStar() {
- var equivalents = <DartType>[
- intNone,
- intQuestion,
- intStar,
- ];
-
- var subtypes = <DartType>[
- nullNone,
- nullStar,
- nullQuestion,
- neverNone,
- neverStar,
- neverQuestion,
- ];
-
- var supertypes = <DartType>[
- numNone,
- numQuestion,
- numStar,
- objectNone,
- objectQuestion,
- ];
-
- var unrelated = <DartType>[
- doubleStar,
- ];
-
- _checkGroups(
- intStar,
- equivalents: equivalents,
- supertypes: supertypes,
- unrelated: unrelated,
- subtypes: subtypes,
- );
- }
-
- test_null() {
- var equivalents = <DartType>[
- nullNone,
- nullQuestion,
- nullStar,
- neverQuestion,
- ];
-
- var supertypes = <DartType>[
- intQuestion,
- intStar,
- objectQuestion,
- objectStar,
- dynamicNone,
- voidNone,
- ];
-
- var subtypes = <DartType>[
- neverNone,
- ];
-
- var unrelated = <DartType>[
- doubleNone,
- intNone,
- numNone,
- objectNone,
- ];
-
- for (final formOfNull in equivalents) {
- _checkGroups(
- formOfNull,
- equivalents: equivalents,
- supertypes: supertypes,
- unrelated: unrelated,
- subtypes: subtypes,
- );
- }
- }
-
- test_object() {
- var equivalents = <DartType>[
- objectStar,
- ];
-
- var supertypes = <DartType>[
- objectQuestion,
- dynamicType,
- voidNone,
- ];
-
- var subtypes = <DartType>[
- neverNone,
- ];
-
- var unrelated = <DartType>[
- doubleQuestion,
- numQuestion,
- intQuestion,
- nullNone,
- ];
-
- _checkGroups(
- objectNone,
- equivalents: equivalents,
- supertypes: supertypes,
- unrelated: unrelated,
- subtypes: subtypes,
- );
- }
-}
-
-@reflectiveTest
class SubtypeTest extends _SubtypingTestBase {
final Map<String, DartType> _types = {};
@@ -5814,7 +5576,7 @@
}
@reflectiveTest
-class SubtypingCompoundTest extends _SubtypingCompoundTestBase {
+class SubtypingCompoundTest extends _SubtypingTestBase {
test_bottom_isBottom() {
var equivalents = <DartType>[neverStar];
@@ -5847,6 +5609,26 @@
);
}
+ test_dynamic() {
+ var equivalents = <DartType>[
+ voidNone,
+ objectQuestion,
+ objectStar,
+ ];
+
+ var subtypes = <DartType>[
+ neverNone,
+ nullNone,
+ objectNone,
+ ];
+
+ _checkGroups(
+ dynamicNone,
+ equivalents: equivalents,
+ subtypes: subtypes,
+ );
+ }
+
test_dynamic_isTop() {
var equivalents = <DartType>[
dynamicNone,
@@ -5870,6 +5652,42 @@
);
}
+ test_futureOr_topTypes() {
+ var futureOrObject = futureOrNone(objectNone);
+ var futureOrObjectStar = futureOrNone(objectStar);
+ var futureOrObjectQuestion = futureOrNone(objectQuestion);
+
+ var futureOrStarObject = futureOrStar(objectNone);
+ var futureOrStarObjectStar = futureOrStar(objectStar);
+ var futureOrStarObjectQuestion = futureOrStar(objectQuestion);
+
+ var futureOrQuestionObject = futureOrQuestion(objectNone);
+ var futureOrQuestionObjectStar = futureOrQuestion(objectStar);
+ var futureOrQuestionObjectQuestion = futureOrQuestion(objectQuestion);
+
+ //FutureOr<Object> <: FutureOr*<Object?>
+ _checkGroups(
+ futureOrObject,
+ equivalents: [
+ objectStar,
+ futureOrObjectStar,
+ futureOrStarObject,
+ futureOrStarObjectStar,
+ objectNone,
+ ],
+ subtypes: [],
+ supertypes: [
+ objectQuestion,
+ futureOrQuestionObject,
+ futureOrObjectQuestion,
+ futureOrQuestionObject,
+ futureOrQuestionObjectStar,
+ futureOrStarObjectQuestion,
+ futureOrQuestionObjectQuestion,
+ ],
+ );
+ }
+
test_int() {
var equivalents = <DartType>[intStar];
var supertypes = <DartType>[numStar];
@@ -5882,6 +5700,153 @@
);
}
+ test_intNone() {
+ var equivalents = <DartType>[
+ intNone,
+ intStar,
+ ];
+
+ var subtypes = <DartType>[
+ neverNone,
+ ];
+
+ var supertypes = <DartType>[
+ intQuestion,
+ objectNone,
+ objectQuestion,
+ ];
+
+ var unrelated = <DartType>[
+ doubleNone,
+ nullNone,
+ nullStar,
+ nullQuestion,
+ neverQuestion,
+ ];
+
+ _checkGroups(
+ intNone,
+ equivalents: equivalents,
+ supertypes: supertypes,
+ unrelated: unrelated,
+ subtypes: subtypes,
+ );
+ }
+
+ test_intQuestion() {
+ var equivalents = <DartType>[
+ intQuestion,
+ intStar,
+ ];
+
+ var subtypes = <DartType>[
+ intNone,
+ nullNone,
+ nullQuestion,
+ nullStar,
+ neverNone,
+ neverQuestion,
+ neverStar,
+ ];
+
+ var supertypes = <DartType>[
+ numQuestion,
+ numStar,
+ objectQuestion,
+ objectStar,
+ ];
+
+ var unrelated = <DartType>[
+ doubleNone,
+ numNone,
+ objectNone,
+ ];
+
+ _checkGroups(
+ intQuestion,
+ equivalents: equivalents,
+ supertypes: supertypes,
+ unrelated: unrelated,
+ subtypes: subtypes,
+ );
+ }
+
+ test_intStar() {
+ var equivalents = <DartType>[
+ intNone,
+ intQuestion,
+ intStar,
+ ];
+
+ var subtypes = <DartType>[
+ nullNone,
+ nullStar,
+ nullQuestion,
+ neverNone,
+ neverStar,
+ neverQuestion,
+ ];
+
+ var supertypes = <DartType>[
+ numNone,
+ numQuestion,
+ numStar,
+ objectNone,
+ objectQuestion,
+ ];
+
+ var unrelated = <DartType>[
+ doubleStar,
+ ];
+
+ _checkGroups(
+ intStar,
+ equivalents: equivalents,
+ supertypes: supertypes,
+ unrelated: unrelated,
+ subtypes: subtypes,
+ );
+ }
+
+ test_null() {
+ var equivalents = <DartType>[
+ nullNone,
+ nullQuestion,
+ nullStar,
+ neverQuestion,
+ ];
+
+ var supertypes = <DartType>[
+ intQuestion,
+ intStar,
+ objectQuestion,
+ objectStar,
+ dynamicNone,
+ voidNone,
+ ];
+
+ var subtypes = <DartType>[
+ neverNone,
+ ];
+
+ var unrelated = <DartType>[
+ doubleNone,
+ intNone,
+ numNone,
+ objectNone,
+ ];
+
+ for (final formOfNull in equivalents) {
+ _checkGroups(
+ formOfNull,
+ equivalents: equivalents,
+ supertypes: supertypes,
+ unrelated: unrelated,
+ subtypes: subtypes,
+ );
+ }
+ }
+
test_num() {
var equivalents = <DartType>[numStar];
var supertypes = <DartType>[objectStar];
@@ -5896,6 +5861,37 @@
);
}
+ test_object() {
+ var equivalents = <DartType>[
+ objectStar,
+ ];
+
+ var supertypes = <DartType>[
+ objectQuestion,
+ dynamicType,
+ voidNone,
+ ];
+
+ var subtypes = <DartType>[
+ neverNone,
+ ];
+
+ var unrelated = <DartType>[
+ doubleQuestion,
+ numQuestion,
+ intQuestion,
+ nullNone,
+ ];
+
+ _checkGroups(
+ objectNone,
+ equivalents: equivalents,
+ supertypes: supertypes,
+ unrelated: unrelated,
+ subtypes: subtypes,
+ );
+ }
+
test_void_isTop() {
var equivalents = <DartType>[
dynamicNone,
@@ -5918,9 +5914,7 @@
subtypes: subtypes,
);
}
-}
-class _SubtypingCompoundTestBase extends _SubtypingTestBase {
void _checkEquivalent(DartType type1, DartType type2) {
_checkIsSubtypeOf(type1, type2);
_checkIsSubtypeOf(type2, type1);
diff --git a/pkg/analyzer/test/src/dart/element/type_visitor_test.dart b/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
index e17064f..67de862 100644
--- a/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
@@ -8,7 +8,7 @@
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import 'element_test.dart';
+import '../../../generated/type_system_test.dart';
main() {
defineReflectiveSuite(() {
@@ -17,7 +17,7 @@
}
@reflectiveTest
-class RecursiveTypeVisitorTest extends AbstractTypeTest {
+class RecursiveTypeVisitorTest extends AbstractTypeSystemTest {
late final _MockRecursiveVisitor visitor;
@override
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index 1c5c4b3..e8c7840 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -463,7 +463,7 @@
assertTypeNull(override);
assertTypeNull(override.extensionName);
- assertElementTypeStrings(
+ assertElementTypes(
override.typeArgumentTypes,
expectedTypeArguments,
);
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
index 9a5e9bf..9dcfa57 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
@@ -5,7 +5,6 @@
import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/elements_types_mixin.dart';
import 'context_collection_resolution.dart';
main() {
@@ -15,8 +14,7 @@
}
@reflectiveTest
-class ClassAliasDriverResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+class ClassAliasDriverResolutionTest extends PubPackageResolutionTest {
test_defaultConstructor() async {
await assertNoErrorsInCode(r'''
class A {}
@@ -42,8 +40,8 @@
assertTypeName(findNode.typeName('C;'), findElement.class_('C'), 'C');
assertType(x.supertype, 'A');
- assertElementTypeStrings(x.mixins, ['B']);
- assertElementTypeStrings(x.interfaces, ['C']);
+ assertElementTypes(x.mixins, ['B']);
+ assertElementTypes(x.interfaces, ['C']);
}
test_element_typeFunction_extends() async {
@@ -61,16 +59,8 @@
class B {}
class X = Object with A implements A, Function, B;
''');
- var a = findElement.class_('A');
- var b = findElement.class_('B');
var x = findElement.class_('X');
- assertElementTypes(
- x.interfaces,
- [
- interfaceTypeNone(a),
- interfaceTypeNone(b),
- ],
- );
+ assertElementTypes(x.interfaces, ['A', 'B']);
}
test_element_typeFunction_with() async {
@@ -79,16 +69,8 @@
class B {}
class X = Object with A, Function, B;
''');
- var a = findElement.class_('A');
- var b = findElement.class_('B');
var x = findElement.class_('X');
- assertElementTypes(
- x.mixins,
- [
- interfaceTypeNone(a),
- interfaceTypeNone(b),
- ],
- );
+ assertElementTypes(x.mixins, ['A', 'B']);
}
test_implicitConstructors_const() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 0dd6db7..2828f29 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -7,7 +7,6 @@
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/elements_types_mixin.dart';
import 'context_collection_resolution.dart';
main() {
@@ -17,8 +16,7 @@
}
@reflectiveTest
-class ClassDriverResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+class ClassDriverResolutionTest extends PubPackageResolutionTest {
test_element_allSupertypes() async {
await assertNoErrorsInCode(r'''
class A {}
@@ -34,37 +32,25 @@
class X5 extends A with B, C implements D, E {}
''');
- var a = findElement.class_('A');
- var b = findElement.class_('B');
- var c = findElement.class_('C');
- var d = findElement.class_('D');
- var e = findElement.class_('E');
-
- var typeA = interfaceTypeNone(a);
- var typeB = interfaceTypeNone(b);
- var typeC = interfaceTypeNone(c);
- var typeD = interfaceTypeNone(d);
- var typeE = interfaceTypeNone(e);
-
assertElementTypes(
findElement.class_('X1').allSupertypes,
- [typeA, objectType],
+ ['Object', 'A'],
);
assertElementTypes(
findElement.class_('X2').allSupertypes,
- [objectType, typeB],
+ ['Object', 'B'],
);
assertElementTypes(
findElement.class_('X3').allSupertypes,
- [typeA, objectType, typeB],
+ ['Object', 'A', 'B'],
);
assertElementTypes(
findElement.class_('X4').allSupertypes,
- [typeA, typeB, objectType, typeC],
+ ['Object', 'A', 'B', 'C'],
);
assertElementTypes(
findElement.class_('X5').allSupertypes,
- [typeA, typeB, typeC, objectType, typeD, typeE],
+ ['Object', 'A', 'B', 'C', 'D', 'E'],
);
}
@@ -79,33 +65,17 @@
class X3 extends C<double> {}
''');
- var a = findElement.class_('A');
- var b = findElement.class_('B');
- var c = findElement.class_('C');
assertElementTypes(
findElement.class_('X1').allSupertypes,
- [
- interfaceTypeNone(a, typeArguments: [stringType]),
- objectType
- ],
+ ['Object', 'A<String>'],
);
assertElementTypes(
findElement.class_('X2').allSupertypes,
- [
- interfaceTypeNone(b, typeArguments: [
- stringType,
- interfaceTypeNone(listElement, typeArguments: [intType])
- ]),
- objectType
- ],
+ ['Object', 'B<String, List<int>>'],
);
assertElementTypes(
findElement.class_('X3').allSupertypes,
- [
- interfaceTypeNone(c, typeArguments: [doubleType]),
- interfaceTypeNone(b, typeArguments: [intType, doubleType]),
- objectType
- ],
+ ['Object', 'B<int, double>', 'C<double>'],
);
}
@@ -122,12 +92,9 @@
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 48, 1),
]);
- var a = findElement.class_('A');
- var b = findElement.class_('B');
- var c = findElement.class_('C');
assertElementTypes(
findElement.class_('X').allSupertypes,
- [interfaceTypeNone(a), interfaceTypeNone(b), interfaceTypeNone(c)],
+ ['A', 'B', 'C'],
);
}
@@ -149,15 +116,10 @@
''', [
error(HintCode.DEPRECATED_MIXIN_FUNCTION, 53, 8),
]);
- var a = findElement.class_('A');
- var b = findElement.class_('B');
- var c = findElement.class_('C');
+
assertElementTypes(
- c.mixins,
- [
- interfaceTypeNone(a),
- interfaceTypeNone(b),
- ],
+ findElement.class_('C').mixins,
+ ['A', 'B'],
);
}
diff --git a/pkg/analyzer/test/src/dart/resolution/macro_test.dart b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
index c4607c4..6d88fd7 100644
--- a/pkg/analyzer/test/src/dart/resolution/macro_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
@@ -11,7 +11,6 @@
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/elements_types_mixin.dart';
import 'context_collection_resolution.dart';
main() {
@@ -21,8 +20,7 @@
}
@reflectiveTest
-class MacroResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+class MacroResolutionTest extends PubPackageResolutionTest {
@override
void setUp() {
super.setUp();
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index ee9aabd..5a1ce26 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -2,13 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/elements_types_mixin.dart';
import 'context_collection_resolution.dart';
main() {
@@ -18,8 +16,7 @@
}
@reflectiveTest
-class MixinDriverResolutionTest extends PubPackageResolutionTest
- with ElementsTypesMixin {
+class MixinDriverResolutionTest extends PubPackageResolutionTest {
test_accessor_getter() async {
await assertNoErrorsInCode(r'''
mixin M {
@@ -94,7 +91,7 @@
var mElement = findElement.mixin('M');
var aElement = findElement.class_('A');
- assertElementTypes(aElement.mixins, [interfaceTypeNone(mElement)]);
+ assertElementTypes(aElement.mixins, ['M']);
var mRef = findNode.typeName('M {} // A');
assertTypeName(mRef, mElement, 'M');
@@ -109,7 +106,7 @@
var mElement = findElement.mixin('M');
var aElement = findElement.class_('A');
- assertElementTypes(aElement.mixins, [interfaceTypeNone(mElement)]);
+ assertElementTypes(aElement.mixins, ['M']);
var mRef = findNode.typeName('M;');
assertTypeName(mRef, mElement, 'M');
@@ -144,10 +141,13 @@
expect(element.isEnum, isFalse);
expect(element.isMixin, isTrue);
expect(element.isMixinApplication, isFalse);
- expect(interfaceTypeStar(element).isDartCoreObject, isFalse);
+ expect(element.thisType.isDartCoreObject, isFalse);
expect(element.isDartCoreObject, isFalse);
- assertElementTypes(element.superclassConstraints, [objectType]);
+ assertElementTypes(
+ element.superclassConstraints,
+ ['Object'],
+ );
assertElementTypes(element.interfaces, []);
}
@@ -161,21 +161,13 @@
mixin M2 on A implements B, C {}
''');
- var a = findElement.class_('A');
- var b = findElement.class_('B');
- var c = findElement.class_('C');
assertElementTypes(
findElement.mixin('M1').allSupertypes,
- [interfaceTypeNone(a), interfaceTypeNone(b), objectType],
+ ['Object', 'A', 'B'],
);
assertElementTypes(
findElement.mixin('M2').allSupertypes,
- [
- interfaceTypeNone(a),
- objectType,
- interfaceTypeNone(b),
- interfaceTypeNone(c)
- ],
+ ['Object', 'A', 'B', 'C'],
);
}
@@ -188,22 +180,13 @@
mixin M2 on B<String> {}
''');
- var a = findElement.class_('A');
- var b = findElement.class_('B');
assertElementTypes(
findElement.mixin('M1').allSupertypes,
- [
- interfaceTypeNone(a, typeArguments: [intType, doubleType]),
- objectType
- ],
+ ['Object', 'A<int, double>'],
);
assertElementTypes(
findElement.mixin('M2').allSupertypes,
- [
- interfaceTypeNone(b, typeArguments: [stringType]),
- interfaceTypeNone(a, typeArguments: [intType, stringType]),
- objectType
- ],
+ ['Object', 'A<int, String>', 'B<String>'],
);
}
@@ -323,7 +306,7 @@
var randomElement = mathImport.importedLibrary!.getType('Random')!;
var element = findElement.mixin('M');
- assertElementTypes(element.interfaces, [interfaceTypeNone(randomElement)]);
+ assertElementTypes(element.interfaces, ['Random']);
var typeRef = findNode.typeName('Random {}');
assertTypeName(typeRef, randomElement, 'Random',
@@ -338,7 +321,7 @@
]);
var element = findElement.mixin('M');
- assertElementTypes(element.interfaces, [intType]);
+ assertElementTypes(element.interfaces, ['int']);
var typeRef = findNode.typeName('int {}');
assertTypeName(typeRef, intElement, 'int');
@@ -846,9 +829,7 @@
var randomElement = mathImport.importedLibrary!.getType('Random')!;
var element = findElement.mixin('M');
- assertElementTypes(element.superclassConstraints, [
- interfaceTypeNone(randomElement),
- ]);
+ assertElementTypes(element.superclassConstraints, ['Random']);
var typeRef = findNode.typeName('Random {}');
assertTypeName(typeRef, randomElement, 'Random',
@@ -864,7 +845,7 @@
]);
var element = findElement.mixin('M');
- assertElementTypes(element.superclassConstraints, [intType]);
+ assertElementTypes(element.superclassConstraints, ['int']);
var typeRef = findNode.typeName('int {}');
assertTypeName(typeRef, intElement, 'int');
@@ -879,7 +860,7 @@
]);
var element = findElement.mixin('M');
- assertElementTypes(element.superclassConstraints, [objectType]);
+ assertElementTypes(element.superclassConstraints, ['Object']);
var typeRef = findNode.typeName('dynamic {}');
assertTypeName(typeRef, dynamicElement, 'dynamic');
@@ -895,7 +876,7 @@
]);
var element = findElement.mixin('M');
- assertElementTypes(element.superclassConstraints, [objectType]);
+ assertElementTypes(element.superclassConstraints, ['Object']);
var typeRef = findNode.typeName('E {}');
assertTypeName(typeRef, findElement.enum_('E'), 'E');
@@ -911,7 +892,7 @@
]);
var element = findElement.mixin('M');
- assertElementTypes(element.superclassConstraints, [objectType]);
+ assertElementTypes(element.superclassConstraints, ['Object']);
var typeRef = findNode.typeName('void {}');
assertTypeName(typeRef, null, 'void');
@@ -923,11 +904,8 @@
mixin B on A {} // ref
''');
- var a = findElement.mixin('A');
var b = findElement.mixin('B');
- assertElementTypes(b.superclassConstraints, [
- interfaceTypeNone(a),
- ]);
+ assertElementTypes(b.superclassConstraints, ['A']);
}
test_error_undefinedSuperMethod() async {
@@ -995,16 +973,7 @@
''');
var element = findElement.mixin('M');
- assertElementTypes(element.interfaces, [
- findElement.class_('A').instantiate(
- typeArguments: const [],
- nullabilitySuffix: NullabilitySuffix.none,
- ),
- findElement.class_('B').instantiate(
- typeArguments: const [],
- nullabilitySuffix: NullabilitySuffix.none,
- ),
- ]);
+ assertElementTypes(element.interfaces, ['A', 'B']);
var aRef = findNode.typeName('A, ');
assertTypeName(aRef, findElement.class_('A'), 'A');
@@ -1092,16 +1061,7 @@
''');
var element = findElement.mixin('M');
- assertElementTypes(element.superclassConstraints, [
- findElement.class_('A').instantiate(
- typeArguments: const [],
- nullabilitySuffix: NullabilitySuffix.none,
- ),
- findElement.class_('B').instantiate(
- typeArguments: const [],
- nullabilitySuffix: NullabilitySuffix.none,
- ),
- ]);
+ assertElementTypes(element.superclassConstraints, ['A', 'B']);
var aRef = findNode.typeName('A, ');
assertTypeName(aRef, findElement.class_('A'), 'A');
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 9a340186..842b8022 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -265,21 +265,18 @@
expect(str, expected);
}
- void assertElementTypes(List<DartType> types, List<DartType> expected,
+ void assertElementTypes(List<DartType>? types, List<String> expected,
{bool ordered = false}) {
- if (ordered) {
- expect(types, expected);
- } else {
- expect(types, unorderedEquals(expected));
- }
- }
-
- void assertElementTypeStrings(List<DartType>? types, List<String> expected) {
if (types == null) {
fail('Expected types, actually null.');
}
- expect(types.map(typeString).toList(), expected);
+ var typeStrList = types.map(typeString).toList();
+ if (ordered) {
+ expect(typeStrList, expected);
+ } else {
+ expect(typeStrList, unorderedEquals(expected));
+ }
}
void assertEnclosingElement(Element element, Element expectedEnclosing) {
@@ -346,7 +343,7 @@
}) {
assertElement(node, element);
assertType(node.extendedType, extendedType);
- assertElementTypeStrings(node.typeArgumentTypes, typeArgumentTypes);
+ assertElementTypes(node.typeArgumentTypes, typeArgumentTypes);
}
void assertFunctionExpressionInvocation(
@@ -766,7 +763,7 @@
required List<String> typeArguments,
}) {
assertElement2(type.alias?.element, declaration: element);
- assertElementTypeStrings(type.alias?.typeArguments, typeArguments);
+ assertElementTypes(type.alias?.typeArguments, typeArguments);
}
/// Assert that the given [identifier] is a reference to a type alias, in the
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
index 5ba77c9..8711811 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
@@ -371,7 +371,7 @@
''');
var override = findNode.extensionOverride('E<num>(a)');
assertElement(override, findElement.extension_('E'));
- assertElementTypeStrings(override.typeArgumentTypes, ['num']);
+ assertElementTypes(override.typeArgumentTypes, ['num']);
assertType(override.extendedType, 'A<num>');
var propertyAccess = findNode.propertyAccess('.foo');
@@ -397,7 +397,7 @@
''');
var override = findNode.extensionOverride('E<num>(a)');
assertElement(override, findElement.extension_('E'));
- assertElementTypeStrings(override.typeArgumentTypes, ['num']);
+ assertElementTypes(override.typeArgumentTypes, ['num']);
assertType(override.extendedType, 'A<num>');
// TODO(scheglov) We need to instantiate "foo" fully.
@@ -450,7 +450,7 @@
''');
var override = findNode.extensionOverride('E<num>(a)');
assertElement(override, findElement.extension_('E'));
- assertElementTypeStrings(override.typeArgumentTypes, ['num']);
+ assertElementTypes(override.typeArgumentTypes, ['num']);
assertType(override.extendedType, 'A<num>');
assertAssignment(
@@ -489,7 +489,7 @@
error(CompileTimeErrorCode.COULD_NOT_INFER, 69, 1),
]);
var override = findNode.extensionOverride('E(s)');
- assertElementTypeStrings(override.typeArgumentTypes, ['String']);
+ assertElementTypes(override.typeArgumentTypes, ['String']);
assertType(override.extendedType, 'String');
}
@@ -507,7 +507,7 @@
''');
var override = findNode.extensionOverride('E(a)');
assertElement(override, findElement.extension_('E'));
- assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+ assertElementTypes(override.typeArgumentTypes, ['int']);
assertType(override.extendedType, 'A<int>');
var propertyAccess = findNode.propertyAccess('.foo');
@@ -533,7 +533,7 @@
''');
var override = findNode.extensionOverride('E(a)');
assertElement(override, findElement.extension_('E'));
- assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+ assertElementTypes(override.typeArgumentTypes, ['int']);
assertType(override.extendedType, 'A<int>');
// TODO(scheglov) We need to instantiate "foo" fully.
@@ -565,7 +565,7 @@
''');
var override = findNode.extensionOverride('E(a)');
assertElement(override, findElement.extension_('E'));
- assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+ assertElementTypes(override.typeArgumentTypes, ['int']);
assertType(override.extendedType, 'A<int>');
var propertyAccess = findNode.propertyAccess('foo;');
@@ -591,7 +591,7 @@
''');
var override = findNode.extensionOverride('E(a)');
assertElement(override, findElement.extension_('E'));
- assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+ assertElementTypes(override.typeArgumentTypes, ['int']);
assertType(override.extendedType, 'A<int>');
assertAssignment(
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
index 27c24a5..85fe012 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
@@ -145,7 +145,7 @@
assertElement(id, element);
assertType(id, type);
if (typeArguments != null) {
- assertElementTypeStrings(id.tearOffTypeArgumentTypes, typeArguments);
+ assertElementTypes(id.tearOffTypeArgumentTypes, typeArguments);
} else {
expect(id.tearOffTypeArgumentTypes, isNull);
}
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index b1317f0c..aeb8011 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -26,14 +26,9 @@
import 'package:analyzer/src/source/package_map_resolver.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
-/// Test configuration used for testing the analyzer with constant evaluation.
-final TestConfig analyzerConstantUpdate2018Config = TestConfig(
- analyzerMarker, 'analyzer with constant-update-2018',
- featureSet: FeatureSet.latestLanguageVersion());
-
-/// Test configuration used for testing the analyzer with NNBD.
-final TestConfig analyzerNnbdConfig = TestConfig(
- analyzerMarker, 'analyzer with NNBD',
+/// Test configuration used for testing the analyzer without experiments.
+final TestConfig analyzerDefaultConfig = TestConfig(
+ analyzerMarker, 'analyzer without experiments',
featureSet: FeatureSet.latestLanguageVersion());
/// A fake absolute directory used as the root of a memory-file system in ID
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index fd398ed..ac77675 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -22,8 +22,8 @@
void main() {
defineReflectiveSuite(() {
- defineReflectiveTests(DartEditBuilderImpl_PreNullSafetyTest);
defineReflectiveTests(DartEditBuilderImpl_WithNullSafetyTest);
+ defineReflectiveTests(DartEditBuilderImpl_WithoutNullSafetyTest);
defineReflectiveTests(DartFileEditBuilderImplTest);
defineReflectiveTests(DartLinkedEditBuilderImplTest);
defineReflectiveTests(ImportLibraryTest);
@@ -32,7 +32,34 @@
}
@reflectiveTest
-class DartEditBuilderImpl_PreNullSafetyTest extends DartEditBuilderImplTest {
+class DartEditBuilderImpl_WithNullSafetyTest extends DartEditBuilderImplTest {
+ Future<void> test_writeParameter_required_keyword() async {
+ var path = convertPath('$testPackageRootPath/lib/test.dart');
+ var content = 'class A {}';
+ addSource(path, content);
+
+ var builder = newBuilder();
+ await builder.addDartFileEdit(path, (builder) {
+ builder.addInsertion(content.length - 1, (builder) {
+ builder.writeParameter('a', isRequiredNamed: true);
+ });
+ });
+ var edit = getEdit(builder);
+ expect(edit.replacement, equalsIgnoringWhitespace('required a'));
+ }
+
+ Future<void> test_writeType_Never_none() async {
+ await _assertWriteType('Never');
+ }
+
+ Future<void> test_writeType_Never_question() async {
+ await _assertWriteType('Never?');
+ }
+}
+
+@reflectiveTest
+class DartEditBuilderImpl_WithoutNullSafetyTest extends DartEditBuilderImplTest
+ with WithoutNullSafetyMixin {
Future<void> test_writeParameter_covariantAndRequired() async {
var path = convertPath('$testPackageRootPath/lib/test.dart');
var content = 'class A {}';
@@ -90,33 +117,6 @@
}
}
-@reflectiveTest
-class DartEditBuilderImpl_WithNullSafetyTest extends DartEditBuilderImplTest
- with WithNullSafetyMixin {
- Future<void> test_writeParameter_required_keyword() async {
- var path = convertPath('$testPackageRootPath/lib/test.dart');
- var content = 'class A {}';
- addSource(path, content);
-
- var builder = newBuilder();
- await builder.addDartFileEdit(path, (builder) {
- builder.addInsertion(content.length - 1, (builder) {
- builder.writeParameter('a', isRequiredNamed: true);
- });
- });
- var edit = getEdit(builder);
- expect(edit.replacement, equalsIgnoringWhitespace('required a'));
- }
-
- Future<void> test_writeType_Never_none() async {
- await _assertWriteType('Never');
- }
-
- Future<void> test_writeType_Never_question() async {
- await _assertWriteType('Never?');
- }
-}
-
class DartEditBuilderImplTest extends AbstractContextTest
with DartChangeBuilderMixin {
@override
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index 6d58ad9..33577e7 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/src/dart/analysis/byte_store.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
import 'package:analyzer/src/test_utilities/mock_packages.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
@@ -51,7 +50,7 @@
String get testPackageAnalysisOptionsPath =>
convertPath('$testPackageRootPath/analysis_options.yaml');
- String? get testPackageLanguageVersion => '2.9';
+ String? get testPackageLanguageVersion => null;
/// The file system-specific `pubspec.yaml` path.
String get testPackagePubspecPath =>
@@ -162,25 +161,9 @@
}
}
-mixin WithNonFunctionTypeAliasesMixin on AbstractContextTest {
+mixin WithoutNullSafetyMixin on AbstractContextTest {
@override
- String? get testPackageLanguageVersion => null;
-
- @override
- void setUp() {
- super.setUp();
-
- createAnalysisOptionsFile(
- experiments: [
- EnableString.nonfunction_type_aliases,
- ],
- );
- }
-}
-
-mixin WithNullSafetyMixin on AbstractContextTest {
- @override
- String? get testPackageLanguageVersion => null;
+ String? get testPackageLanguageVersion => '2.9';
}
/// Wraps the given [_ElementVisitorFunction] into an instance of
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 75d5a34..6b5ada3 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -19,41 +19,12 @@
import '../support/abstract_single_unit.dart';
void main() {
- defineReflectiveTests(AnalyzerConverterNullableTest);
defineReflectiveTests(AnalyzerConverterTest);
+ defineReflectiveTests(AnalyzerConverterWithoutNullSafetyTest);
}
@reflectiveTest
-class AnalyzerConverterNullableTest extends _AnalyzerConverterTest {
- Future<void> test_convertElement_method() async {
- await resolveTestCode('''
-class A {
- static List<String> myMethod(int a, {String b, int c}) {
- return [];
- }
-}''');
- var engineElement = findElement.method('myMethod');
- // create notification Element
- var element = converter.convertElement(engineElement);
- expect(element.kind, plugin.ElementKind.METHOD);
- expect(element.name, 'myMethod');
- {
- var location = element.location!;
- expect(location.file, testFile);
- expect(location.offset, 32);
- expect(location.length, 'myGetter'.length);
- expect(location.startLine, 2);
- expect(location.startColumn, 23);
- }
- expect(element.parameters, '(int a, {String b, int c})');
- expect(element.returnType, 'List<String>');
- expect(element.flags, plugin.Element.FLAG_STATIC);
- }
-}
-
-@reflectiveTest
-class AnalyzerConverterTest extends _AnalyzerConverterTest
- with WithNonFunctionTypeAliasesMixin {
+class AnalyzerConverterTest extends _AnalyzerConverterTest {
/// Assert that the given [pluginError] matches the given [analyzerError].
void assertError(
plugin.AnalysisError pluginError, analyzer.AnalysisError analyzerError,
@@ -664,6 +635,35 @@
}
}
+@reflectiveTest
+class AnalyzerConverterWithoutNullSafetyTest extends _AnalyzerConverterTest
+ with WithoutNullSafetyMixin {
+ Future<void> test_convertElement_method() async {
+ await resolveTestCode('''
+class A {
+ static List<String> myMethod(int a, {String b, int c}) {
+ return [];
+ }
+}''');
+ var engineElement = findElement.method('myMethod');
+ // create notification Element
+ var element = converter.convertElement(engineElement);
+ expect(element.kind, plugin.ElementKind.METHOD);
+ expect(element.name, 'myMethod');
+ {
+ var location = element.location!;
+ expect(location.file, testFile);
+ expect(location.offset, 32);
+ expect(location.length, 'myGetter'.length);
+ expect(location.startLine, 2);
+ expect(location.startColumn, 23);
+ }
+ expect(element.parameters, '(int a, {String b, int c})');
+ expect(element.returnType, 'List<String>');
+ expect(element.flags, plugin.Element.FLAG_STATIC);
+ }
+}
+
class _AnalyzerConverterTest extends AbstractSingleUnitTest {
AnalyzerConverter converter = AnalyzerConverter();
late analyzer.Source source;
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 3813dd0..78b64cb 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -34,7 +34,7 @@
void f() {
g(0, 1, c: 2);
}
-void g(int a, int b, {int c}) {}
+void g(int a, int b, {int? c}) {}
''');
_assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
}
@@ -44,7 +44,7 @@
void f() {
g(0, 1, c: 2, );
}
-void g(int a, int b, {int c}) {}
+void g(int a, int b, {int? c}) {}
''');
_assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
}
@@ -54,7 +54,7 @@
void f() {
g(a: 0, b: 1, c: 2);
}
-void g({int a, int b, int c}) {}
+void g({int? a, int? b, int? c}) {}
''');
_assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
}
@@ -64,7 +64,7 @@
void f() {
g(a: 0, b: 1, c: 2, );
}
-void g({int a, int b, int c}) {}
+void g({int? a, int? b, int? c}) {}
''');
_assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
}
@@ -154,7 +154,7 @@
void f() {
g(a: 0);
}
-void g({int a}) {}
+void g({int? a}) {}
''');
_assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
}
@@ -220,7 +220,7 @@
void f() {
g(a: 1, b: 2);
}
-void g({int a, int b}) {}
+void g({int? a, int? b}) {}
''');
var list = _argumentList;
expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
@@ -242,7 +242,7 @@
void f() {
g(a: 1, b: 2);
}
-void g({int a, int b}) {}
+void g({int? a, int? b}) {}
''');
var list = _argumentList;
expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
@@ -264,7 +264,7 @@
void f() {
g(a: 1, b: 2, c: 3);
}
-void g({int a, int b, int c}) {}
+void g({int? a, int? b, int? c}) {}
''');
var list = _argumentList;
expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
@@ -286,7 +286,7 @@
void f() {
g(a: 1);
}
-void g({int a}) {}
+void g({int? a}) {}
''');
var list = _argumentList;
expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
@@ -297,7 +297,7 @@
void f() {
g(a: 1,);
}
-void g({int a}) {}
+void g({int? a}) {}
''');
var list = _argumentList;
expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
diff --git a/runtime/observatory/lib/src/models/objects/library.dart b/runtime/observatory/lib/src/models/objects/library.dart
index b02a97d..dfb3f84 100644
--- a/runtime/observatory/lib/src/models/objects/library.dart
+++ b/runtime/observatory/lib/src/models/objects/library.dart
@@ -41,5 +41,5 @@
LibraryRef get target;
/// [optional]
- String get prefix;
+ String? get prefix;
}
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index df4a4cd..9878a02 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -2479,7 +2479,7 @@
class LibraryDependency implements M.LibraryDependency {
final bool isImport;
final bool isDeferred;
- final String prefix;
+ final String? prefix;
final Library target;
bool get isExport => !isImport;
diff --git a/runtime/observatory/tests/service/constructor_tear_off_test.dart b/runtime/observatory/tests/service/constructor_tear_off_test.dart
new file mode 100644
index 0000000..672a1a1
--- /dev/null
+++ b/runtime/observatory/tests/service/constructor_tear_off_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.15
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import 'package:observatory/service_common.dart';
+import 'package:test/test.dart';
+
+import 'test_helper.dart';
+
+class Foo {
+ Foo();
+ Foo.named();
+}
+
+class Generic<T> {
+ Generic();
+}
+
+@pragma('vm:entry-point')
+Function getNamedConstructorTearoff() => Foo.named;
+
+@pragma('vm:entry-point')
+Function getDefaultConstructorTearoff() => Foo.new;
+
+@pragma('vm:entry-point')
+Function getGenericConstructorTearoff() => Generic<int>.new;
+
+Future<void> invokeConstructorTearoff(
+ Isolate isolate,
+ String name,
+ String expectedType,
+) async {
+ final lib = await isolate.rootLibrary.load() as Library;
+ final tearoff = await isolate.invokeRpc('invoke', {
+ 'targetId': lib.id,
+ 'selector': name,
+ 'argumentIds': [],
+ });
+ final result = await isolate.invokeRpc('invoke', {
+ 'targetId': tearoff.id,
+ 'selector': 'call',
+ 'argumentIds': [],
+ }) as Instance;
+ expect(result.clazz!.name, expectedType);
+}
+
+final tests = <IsolateTest>[
+ (Isolate isolate) => invokeConstructorTearoff(
+ isolate,
+ 'getNamedConstructorTearoff',
+ 'Foo',
+ ),
+ (Isolate isolate) => invokeConstructorTearoff(
+ isolate,
+ 'getDefaultConstructorTearoff',
+ 'Foo',
+ ),
+ (Isolate isolate) => invokeConstructorTearoff(
+ isolate,
+ 'getGenericConstructorTearoff',
+ 'Generic',
+ ),
+];
+
+void main(List<String> args) => runIsolateTests(
+ args,
+ tests,
+ );
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 1b05ac5..9c5acd8 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -4283,10 +4283,17 @@
// Skipping a few paths to avoid double counting:
// (deleted) - memfd dual mapping in Dart heap
// [heap] - sbrk area, should already included with malloc
- // <empty> - anonymous mappings, mostly in Dart heap
+ // <empty> - anonymous mappings, mostly in Dart heap (Linux)
+ // [anon:dart-*] - as labelled (Android)
if ((strcmp(property, "Rss:") == 0) && (size != 0) &&
(strcmp(path, "(deleted)") != 0) && (strcmp(path, "[heap]") != 0) &&
- (strcmp(path, "") != 0)) {
+ (strcmp(path, "") != 0) &&
+ (strcmp(path, "[anon:dart-newspace]") != 0) &&
+ (strcmp(path, "[anon:dart-oldspace]") != 0) &&
+ (strcmp(path, "[anon:dart-codespace]") != 0) &&
+ (strcmp(path, "[anon:dart-profiler]") != 0) &&
+ (strcmp(path, "[anon:dart-timeline]") != 0) &&
+ (strcmp(path, "[anon:dart-zone]") != 0)) {
bool updated = false;
for (intptr_t i = 0; i < mappings.length(); i++) {
if (strcmp(mappings[i].path, path) == 0) {
diff --git a/runtime/vm/virtual_memory_posix.cc b/runtime/vm/virtual_memory_posix.cc
index f5fa5ac..3191878 100644
--- a/runtime/vm/virtual_memory_posix.cc
+++ b/runtime/vm/virtual_memory_posix.cc
@@ -15,6 +15,10 @@
#include <sys/syscall.h>
#include <unistd.h>
+#if defined(DART_HOST_OS_ANDROID)
+#include <sys/prctl.h>
+#endif
+
#include "platform/assert.h"
#include "platform/utils.h"
#include "vm/heap/pages.h"
@@ -433,6 +437,10 @@
return nullptr;
}
+#if defined(DART_HOST_OS_ANDROID)
+ prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, address, size, name);
+#endif
+
MemoryRegion region(reinterpret_cast<void*>(address), size);
return new VirtualMemory(region, region);
}
diff --git a/tools/VERSION b/tools/VERSION
index 783443a..5845878 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 103
+PRERELEASE 104
PRERELEASE_PATCH 0
\ No newline at end of file