Version 2.10.0-135.0.dev
Merge commit '623a9bda6798f0196513ceee40c072bc846f1ad6' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 9e55d9d21..3708c2d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -1142,6 +1142,8 @@
if (declaredMember == interfaceMember) {
return;
}
+ Member interfaceMemberOrigin =
+ interfaceMember.memberSignatureOrigin ?? interfaceMember;
if (declaredMember is Constructor || interfaceMember is Constructor) {
unimplemented(
"Constructor in override check.", declaredMember.fileOffset, fileUri);
@@ -1150,18 +1152,18 @@
if (declaredMember.kind == interfaceMember.kind) {
if (declaredMember.kind == ProcedureKind.Method ||
declaredMember.kind == ProcedureKind.Operator) {
- bool seenCovariant = checkMethodOverride(
- types, declaredMember, interfaceMember, isInterfaceCheck);
+ bool seenCovariant = checkMethodOverride(types, declaredMember,
+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
if (seenCovariant) {
handleSeenCovariant(
types, declaredMember, interfaceMember, isSetter, callback);
}
} else if (declaredMember.kind == ProcedureKind.Getter) {
- checkGetterOverride(
- types, declaredMember, interfaceMember, isInterfaceCheck);
+ checkGetterOverride(types, declaredMember, interfaceMember,
+ interfaceMemberOrigin, isInterfaceCheck);
} else if (declaredMember.kind == ProcedureKind.Setter) {
- bool seenCovariant = checkSetterOverride(
- types, declaredMember, interfaceMember, isInterfaceCheck);
+ bool seenCovariant = checkSetterOverride(types, declaredMember,
+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
if (seenCovariant) {
handleSeenCovariant(
types, declaredMember, interfaceMember, isSetter, callback);
@@ -1187,12 +1189,12 @@
!interfaceMember.isConst) ||
interfaceMember is Procedure && interfaceMember.isSetter;
if (declaredMemberHasGetter && interfaceMemberHasGetter) {
- checkGetterOverride(
- types, declaredMember, interfaceMember, isInterfaceCheck);
+ checkGetterOverride(types, declaredMember, interfaceMember,
+ interfaceMemberOrigin, isInterfaceCheck);
}
if (declaredMemberHasSetter && interfaceMemberHasSetter) {
- bool seenCovariant = checkSetterOverride(
- types, declaredMember, interfaceMember, isInterfaceCheck);
+ bool seenCovariant = checkSetterOverride(types, declaredMember,
+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
if (seenCovariant) {
handleSeenCovariant(
types, declaredMember, interfaceMember, isSetter, callback);
@@ -1214,6 +1216,7 @@
Types types,
Member declaredMember,
Member interfaceMember,
+ Member interfaceMemberOrigin,
FunctionNode declaredFunction,
FunctionNode interfaceFunction,
bool isInterfaceCheck) {
@@ -1234,15 +1237,15 @@
templateOverrideTypeVariablesMismatch.withArguments(
"${declaredMember.enclosingClass.name}."
"${declaredMember.name.name}",
- "${interfaceMember.enclosingClass.name}."
- "${interfaceMember.name.name}"),
+ "${interfaceMemberOrigin.enclosingClass.name}."
+ "${interfaceMemberOrigin.name.name}"),
declaredMember.fileOffset,
noLength,
context: [
templateOverriddenMethodCause
- .withArguments(interfaceMember.name.name)
- .withLocation(_getMemberUri(interfaceMember),
- interfaceMember.fileOffset, noLength)
+ .withArguments(interfaceMemberOrigin.name.name)
+ .withLocation(_getMemberUri(interfaceMemberOrigin),
+ interfaceMemberOrigin.fileOffset, noLength)
]);
} else if (declaredFunction?.typeParameters != null) {
Map<TypeParameter, DartType> substitutionMap =
@@ -1283,16 +1286,16 @@
"${declaredMember.enclosingClass.name}."
"${declaredMember.name.name}",
computedBound,
- "${interfaceMember.enclosingClass.name}."
- "${interfaceMember.name.name}",
+ "${interfaceMemberOrigin.enclosingClass.name}."
+ "${interfaceMemberOrigin.name.name}",
library.isNonNullableByDefault),
declaredMember.fileOffset,
noLength,
context: [
templateOverriddenMethodCause
- .withArguments(interfaceMember.name.name)
- .withLocation(_getMemberUri(interfaceMember),
- interfaceMember.fileOffset, noLength)
+ .withArguments(interfaceMemberOrigin.name.name)
+ .withLocation(_getMemberUri(interfaceMemberOrigin),
+ interfaceMemberOrigin.fileOffset, noLength)
]);
}
}
@@ -1322,6 +1325,7 @@
Substitution declaredSubstitution,
Member declaredMember,
Member interfaceMember,
+ Member interfaceMemberOrigin,
DartType declaredType,
DartType interfaceType,
bool isCovariant,
@@ -1365,8 +1369,9 @@
if (isErrorInNnbdOptedOutMode || library.isNonNullableByDefault) {
String declaredMemberName = '${declaredMember.enclosingClass.name}'
'.${declaredMember.name.name}';
- String interfaceMemberName = '${interfaceMember.enclosingClass.name}'
- '.${interfaceMember.name.name}';
+ String interfaceMemberName =
+ '${interfaceMemberOrigin.enclosingClass.name}'
+ '.${interfaceMemberOrigin.name.name}';
Message message;
int fileOffset;
if (declaredParameter == null) {
@@ -1401,18 +1406,28 @@
isInterfaceCheck, declaredMember, message, fileOffset, noLength,
context: [
templateOverriddenMethodCause
- .withArguments(interfaceMember.name.name)
- .withLocation(_getMemberUri(interfaceMember),
- interfaceMember.fileOffset, noLength)
+ .withArguments(interfaceMemberOrigin.name.name)
+ .withLocation(_getMemberUri(interfaceMemberOrigin),
+ interfaceMemberOrigin.fileOffset, noLength)
]);
}
}
}
+ /// Checks whether [declaredMember] correctly overrides [interfaceMember].
+ ///
+ /// If an error is reporter [interfaceMemberOrigin] is used as the context
+ /// for where [interfaceMember] was declared, since [interfaceMember] might
+ /// itself be synthesized.
+ ///
/// Returns whether a covariant parameter was seen and more methods thus have
/// to be checked.
- bool checkMethodOverride(Types types, Procedure declaredMember,
- Procedure interfaceMember, bool isInterfaceCheck) {
+ bool checkMethodOverride(
+ Types types,
+ Procedure declaredMember,
+ Procedure interfaceMember,
+ Member interfaceMemberOrigin,
+ bool isInterfaceCheck) {
assert(declaredMember.kind == interfaceMember.kind);
assert(declaredMember.kind == ProcedureKind.Method ||
declaredMember.kind == ProcedureKind.Operator);
@@ -1424,6 +1439,7 @@
types,
declaredMember,
interfaceMember,
+ interfaceMemberOrigin,
declaredFunction,
interfaceFunction,
isInterfaceCheck);
@@ -1437,6 +1453,7 @@
declaredSubstitution,
declaredMember,
interfaceMember,
+ interfaceMemberOrigin,
declaredFunction.returnType,
interfaceFunction.returnType,
false,
@@ -1505,6 +1522,7 @@
declaredSubstitution,
declaredMember,
interfaceMember,
+ interfaceMemberOrigin,
declaredParameter.type,
interfaceParameter.type,
declaredParameter.isCovariant || interfaceParameter.isCovariant,
@@ -1524,15 +1542,15 @@
templateOverrideFewerNamedArguments.withArguments(
"${declaredMember.enclosingClass.name}."
"${declaredMember.name.name}",
- "${interfaceMember.enclosingClass.name}."
- "${interfaceMember.name.name}"),
+ "${interfaceMemberOrigin.enclosingClass.name}."
+ "${interfaceMemberOrigin.name.name}"),
declaredMember.fileOffset,
noLength,
context: [
templateOverriddenMethodCause
- .withArguments(interfaceMember.name.name)
- .withLocation(interfaceMember.fileUri,
- interfaceMember.fileOffset, noLength)
+ .withArguments(interfaceMemberOrigin.name.name)
+ .withLocation(interfaceMemberOrigin.fileUri,
+ interfaceMemberOrigin.fileOffset, noLength)
]);
}
int compareNamedParameters(VariableDeclaration p0, VariableDeclaration p1) {
@@ -1582,6 +1600,7 @@
declaredSubstitution,
declaredMember,
interfaceMember,
+ interfaceMemberOrigin,
declaredParameter.type,
interfaceNamedParameters.current.type,
declaredParameter.isCovariant,
@@ -1604,9 +1623,9 @@
noLength,
context: [
templateOverriddenMethodCause
- .withArguments(interfaceMember.name.name)
- .withLocation(_getMemberUri(interfaceMember),
- interfaceMember.fileOffset, noLength)
+ .withArguments(interfaceMemberOrigin.name.name)
+ .withLocation(_getMemberUri(interfaceMemberOrigin),
+ interfaceMemberOrigin.fileOffset, noLength)
]);
}
if (declaredParameter.isCovariant) seenCovariant = true;
@@ -1614,10 +1633,25 @@
return seenCovariant;
}
- void checkGetterOverride(Types types, Member declaredMember,
- Member interfaceMember, bool isInterfaceCheck) {
+ /// Checks whether [declaredMember] correctly overrides [interfaceMember].
+ ///
+ /// If an error is reporter [interfaceMemberOrigin] is used as the context
+ /// for where [interfaceMember] was declared, since [interfaceMember] might
+ /// itself be synthesized.
+ void checkGetterOverride(
+ Types types,
+ Member declaredMember,
+ Member interfaceMember,
+ Member interfaceMemberOrigin,
+ bool isInterfaceCheck) {
Substitution interfaceSubstitution = _computeInterfaceSubstitution(
- types, declaredMember, interfaceMember, null, null, isInterfaceCheck);
+ types,
+ declaredMember,
+ interfaceMember,
+ interfaceMemberOrigin,
+ /* declaredFunction = */ null,
+ /* interfaceFunction = */ null,
+ isInterfaceCheck);
Substitution declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
DartType declaredType = declaredMember.getterType;
@@ -1628,19 +1662,36 @@
declaredSubstitution,
declaredMember,
interfaceMember,
+ interfaceMemberOrigin,
declaredType,
interfaceType,
- false,
- null,
+ /* isCovariant = */ false,
+ /* declaredParameter = */ null,
isInterfaceCheck);
}
+ /// Checks whether [declaredMember] correctly overrides [interfaceMember].
+ ///
+ /// If an error is reporter [interfaceMemberOrigin] is used as the context
+ /// for where [interfaceMember] was declared, since [interfaceMember] might
+ /// itself be synthesized.
+ ///
/// Returns whether a covariant parameter was seen and more methods thus have
/// to be checked.
- bool checkSetterOverride(Types types, Member declaredMember,
- Member interfaceMember, bool isInterfaceCheck) {
+ bool checkSetterOverride(
+ Types types,
+ Member declaredMember,
+ Member interfaceMember,
+ Member interfaceMemberOrigin,
+ bool isInterfaceCheck) {
Substitution interfaceSubstitution = _computeInterfaceSubstitution(
- types, declaredMember, interfaceMember, null, null, isInterfaceCheck);
+ types,
+ declaredMember,
+ interfaceMember,
+ interfaceMemberOrigin,
+ /* declaredFunction = */ null,
+ /* interfaceFunction = */ null,
+ isInterfaceCheck);
Substitution declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
DartType declaredType = declaredMember.setterType;
@@ -1660,6 +1711,7 @@
declaredSubstitution,
declaredMember,
interfaceMember,
+ interfaceMemberOrigin,
declaredType,
interfaceType,
isCovariant,
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 6df5e4c..be090da 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -1903,7 +1903,9 @@
isMixinDeclaration ? null : supertype,
isNamedMixinApplication
? interfaces
- : isMixinDeclaration ? [supertype, mixin] : null,
+ : isMixinDeclaration
+ ? [supertype, mixin]
+ : null,
null, // No `on` clause types.
new Scope(
local: <String, MemberBuilder>{},
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
index ff8a429..874d7be 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
@@ -511,11 +511,28 @@
// If Q is a legacy type Q0* then the match holds under constraint set C:
//
- // Only if P is a subtype match for Q? under constraint set C.
+ // If P is dynamic or void and P is a subtype match for Q0 under constraint
+ // set C.
+ // Or if P is not dynamic or void and P is a subtype match for Q0? under
+ // constraint set C.
if (_isLegacyTypeConstructorApplication(q)) {
- return _isNullabilityAwareSubtypeMatch(
- p, q.withDeclaredNullability(Nullability.nullable),
- constrainSupertype: constrainSupertype);
+ final int baseConstraintCount = _protoConstraints.length;
+
+ if ((p is DynamicType || p is VoidType) &&
+ _isNullabilityAwareSubtypeMatch(p, _computeRawType(q),
+ constrainSupertype: constrainSupertype)) {
+ return true;
+ }
+ _protoConstraints.length = baseConstraintCount;
+
+ if (p is! DynamicType &&
+ p is! VoidType &&
+ _isNullabilityAwareSubtypeMatch(
+ p, q.withDeclaredNullability(Nullability.nullable),
+ constrainSupertype: constrainSupertype)) {
+ return true;
+ }
+ _protoConstraints.length = baseConstraintCount;
}
// If Q is FutureOr<Q0> the match holds under constraint set C:
@@ -560,6 +577,8 @@
// If Q is Q0? the match holds under constraint set C:
//
// If P is P0? and P0 is a subtype match for Q0 under constraint set C.
+ // Or if P is dynamic or void and Object is a subtype match for Q0 under
+ // constraint set C.
// Or if P is a subtype match for Q0 under non-empty constraint set C.
// Or if P is a subtype match for Null under constraint set C.
// Or if P is a subtype match for Q0 under empty constraint set C.
@@ -575,6 +594,14 @@
}
_protoConstraints.length = baseConstraintCount;
+ if ((p is DynamicType || p is VoidType) &&
+ _isNullabilityAwareSubtypeMatch(
+ coreTypes.objectNonNullableRawType, rawQ,
+ constrainSupertype: constrainSupertype)) {
+ return true;
+ }
+ _protoConstraints.length = baseConstraintCount;
+
bool isMatchWithRawQ = _isNullabilityAwareSubtypeMatch(p, rawQ,
constrainSupertype: constrainSupertype);
bool matchWithRawQAddsConstraints =
diff --git a/pkg/front_end/test/incremental_compiler_leak_test.dart b/pkg/front_end/test/incremental_compiler_leak_test.dart
index e8927d1..e526d98 100644
--- a/pkg/front_end/test/incremental_compiler_leak_test.dart
+++ b/pkg/front_end/test/incremental_compiler_leak_test.dart
@@ -36,15 +36,22 @@
new Map<vmService.ClassRef, vmService.Class>();
Completer<String> cTimeout = new Completer();
- Timer timer = new Timer(new Duration(minutes: 4), () {
+ Timer timer = new Timer(new Duration(minutes: 6), () {
cTimeout.complete("Timeout");
killProcess();
});
Completer<String> cRunDone = new Completer();
// ignore: unawaited_futures
- runInternal(isolateRef, classInfo, instanceCounts,
- () => cTimeout.isCompleted || cProcessExited.isCompleted).then((value) {
+ runInternal(
+ isolateRef,
+ classInfo,
+ instanceCounts,
+ (int iteration) =>
+ // Subtract 2 as it's logically one ahead and asks _before_ the run.
+ (iteration - 2) > limit ||
+ cTimeout.isCompleted ||
+ cProcessExited.isCompleted).then((value) {
cRunDone.complete("Done");
});
@@ -54,6 +61,9 @@
print("\n\n======================\n\n");
findPossibleLeaks(instanceCounts, classInfo);
+
+ // Make sure the process doesn't hang.
+ killProcess();
}
void findPossibleLeaks(Map<vmService.ClassRef, List<int>> instanceCounts,
@@ -115,11 +125,11 @@
vmService.IsolateRef isolateRef,
Map<vmService.ClassRef, vmService.Class> classInfo,
Map<vmService.ClassRef, List<int>> instanceCounts,
- bool Function() shouldBail) async {
+ bool Function(int iteration) shouldBail) async {
int iterationNumber = 1;
try {
while (true) {
- if (shouldBail()) break;
+ if (shouldBail(iterationNumber)) break;
if (!await waitUntilPaused(isolateRef.id)) break;
print("\n\n====================\n\nIteration #$iterationNumber");
iterationNumber++;
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index d047ab7..23b1f6b 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -30,12 +30,18 @@
import 'package:testing/testing.dart'
show Chain, ChainContext, Result, Step, TestDescription, runMe;
+import 'testing_utils.dart' show checkEnvironment, getGitFiles;
+
main([List<String> arguments = const []]) =>
runMe(arguments, createContext, configurationPath: "../testing.json");
Future<Context> createContext(
Chain suite, Map<String, String> environment) async {
- return new Context();
+ const Set<String> knownEnvironmentKeys = {"onlyInGit"};
+ checkEnvironment(environment, knownEnvironmentKeys);
+
+ bool onlyInGit = environment["onlyInGit"] != "false";
+ return new Context(onlyInGit: onlyInGit);
}
class LintTestDescription extends TestDescription {
@@ -70,6 +76,9 @@
}
class Context extends ChainContext {
+ final bool onlyInGit;
+ Context({this.onlyInGit});
+
final List<Step> steps = const <Step>[
const LintStep(),
];
@@ -82,6 +91,11 @@
}
Stream<LintTestDescription> list(Chain suite) async* {
+ Set<Uri> gitFiles;
+ if (onlyInGit) {
+ gitFiles = await getGitFiles(suite);
+ }
+
Directory testRoot = new Directory.fromUri(suite.uri);
if (await testRoot.exists()) {
Stream<FileSystemEntity> files =
@@ -91,6 +105,7 @@
String path = entity.uri.path;
if (suite.exclude.any((RegExp r) => path.contains(r))) continue;
if (suite.pattern.any((RegExp r) => path.contains(r))) {
+ if (onlyInGit && !gitFiles.contains(entity.uri)) continue;
Uri root = suite.uri;
String baseName = "${entity.uri}".substring("$root".length);
baseName = baseName.substring(0, baseName.length - ".dart".length);
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index e985d0b..519403a 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -188,6 +188,7 @@
doctype
doesnt
dog
+donly
doo
downstream
draw
@@ -429,6 +430,7 @@
observable
oh
okay
+onull
ooo
operate
ops
@@ -535,6 +537,7 @@
sigwinch
slight
smoke
+snull
somehow
spans
spawn
diff --git a/pkg/front_end/test/spelling_test_base.dart b/pkg/front_end/test/spelling_test_base.dart
index 056d0e7..9879c8c 100644
--- a/pkg/front_end/test/spelling_test_base.dart
+++ b/pkg/front_end/test/spelling_test_base.dart
@@ -24,18 +24,21 @@
import 'package:kernel/kernel.dart';
import 'package:testing/testing.dart'
- show ChainContext, Result, Step, TestDescription;
+ show Chain, ChainContext, Result, Step, TestDescription;
import 'spell_checking_utils.dart' as spell;
+import 'testing_utils.dart' show filterList;
+
abstract class SpellContext extends ChainContext {
final List<Step> steps = const <Step>[
const SpellTest(),
];
final bool interactive;
+ final bool onlyInGit;
- SpellContext({this.interactive});
+ SpellContext({this.interactive, this.onlyInGit});
// Override special handling of negative tests.
@override
@@ -52,6 +55,11 @@
Set<String> reportedWordsDenylisted = {};
@override
+ Stream<TestDescription> list(Chain suite) {
+ return filterList(suite, onlyInGit, super.list(suite));
+ }
+
+ @override
Future<void> postRun() {
if (reportedWordsDenylisted.isNotEmpty) {
print("\n\n\n");
@@ -152,7 +160,8 @@
print("");
print("To add words easily, try to run this script in interactive "
"mode via the command");
- print("dart ${Platform.script.toFilePath()} -Dinteractive=true");
+ print("dart ${Platform.script.toFilePath()} "
+ "-DonlyInGit=$onlyInGit -Dinteractive=true");
}
}
print("================");
diff --git a/pkg/front_end/test/spelling_test_external_targets.dart b/pkg/front_end/test/spelling_test_external_targets.dart
index 98faa82..f339a46 100644
--- a/pkg/front_end/test/spelling_test_external_targets.dart
+++ b/pkg/front_end/test/spelling_test_external_targets.dart
@@ -13,17 +13,25 @@
import 'spell_checking_utils.dart' as spell;
+import 'testing_utils.dart' show checkEnvironment;
+
main([List<String> arguments = const []]) =>
runMe(arguments, createContext, configurationPath: "../testing.json");
Future<SpellContext> createContext(
Chain suite, Map<String, String> environment) async {
+ const Set<String> knownEnvironmentKeys = {"interactive", "onlyInGit"};
+ checkEnvironment(environment, knownEnvironmentKeys);
+
bool interactive = environment["interactive"] == "true";
- return new SpellContextExternal(interactive: interactive);
+ bool onlyInGit = environment["onlyInGit"] != "false";
+ return new SpellContextExternal(
+ interactive: interactive, onlyInGit: onlyInGit);
}
class SpellContextExternal extends SpellContext {
- SpellContextExternal({bool interactive}) : super(interactive: interactive);
+ SpellContextExternal({bool interactive, bool onlyInGit})
+ : super(interactive: interactive, onlyInGit: onlyInGit);
@override
List<spell.Dictionaries> get dictionaries => const <spell.Dictionaries>[];
diff --git a/pkg/front_end/test/spelling_test_not_src_suite.dart b/pkg/front_end/test/spelling_test_not_src_suite.dart
index 32627a6..28d5262 100644
--- a/pkg/front_end/test/spelling_test_not_src_suite.dart
+++ b/pkg/front_end/test/spelling_test_not_src_suite.dart
@@ -10,17 +10,24 @@
import 'spell_checking_utils.dart' as spell;
+import 'testing_utils.dart' show checkEnvironment;
+
main([List<String> arguments = const []]) =>
runMe(arguments, createContext, configurationPath: "../testing.json");
Future<SpellContext> createContext(
Chain suite, Map<String, String> environment) async {
+ const Set<String> knownEnvironmentKeys = {"interactive", "onlyInGit"};
+ checkEnvironment(environment, knownEnvironmentKeys);
+
bool interactive = environment["interactive"] == "true";
- return new SpellContextTest(interactive: interactive);
+ bool onlyInGit = environment["onlyInGit"] != "false";
+ return new SpellContextTest(interactive: interactive, onlyInGit: onlyInGit);
}
class SpellContextTest extends SpellContext {
- SpellContextTest({bool interactive}) : super(interactive: interactive);
+ SpellContextTest({bool interactive, bool onlyInGit})
+ : super(interactive: interactive, onlyInGit: onlyInGit);
@override
List<spell.Dictionaries> get dictionaries => const <spell.Dictionaries>[
diff --git a/pkg/front_end/test/spelling_test_src_suite.dart b/pkg/front_end/test/spelling_test_src_suite.dart
index 3e4f1f5..4fe9568 100644
--- a/pkg/front_end/test/spelling_test_src_suite.dart
+++ b/pkg/front_end/test/spelling_test_src_suite.dart
@@ -10,17 +10,24 @@
import 'spell_checking_utils.dart' as spell;
+import 'testing_utils.dart' show checkEnvironment;
+
main([List<String> arguments = const []]) =>
runMe(arguments, createContext, configurationPath: "../testing.json");
Future<SpellContext> createContext(
Chain suite, Map<String, String> environment) async {
+ const Set<String> knownEnvironmentKeys = {"interactive", "onlyInGit"};
+ checkEnvironment(environment, knownEnvironmentKeys);
+
bool interactive = environment["interactive"] == "true";
- return new SpellContextSource(interactive: interactive);
+ bool onlyInGit = environment["onlyInGit"] != "false";
+ return new SpellContextSource(interactive: interactive, onlyInGit: onlyInGit);
}
class SpellContextSource extends SpellContext {
- SpellContextSource({bool interactive}) : super(interactive: interactive);
+ SpellContextSource({bool interactive, bool onlyInGit})
+ : super(interactive: interactive, onlyInGit: onlyInGit);
@override
List<spell.Dictionaries> get dictionaries => const <spell.Dictionaries>[
diff --git a/pkg/front_end/test/testing_utils.dart b/pkg/front_end/test/testing_utils.dart
new file mode 100644
index 0000000..0ab71ff
--- /dev/null
+++ b/pkg/front_end/test/testing_utils.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2020, 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.
+
+import 'dart:io' show Directory, Process, ProcessResult;
+
+import 'package:testing/testing.dart' show Chain, TestDescription;
+
+Stream<TestDescription> filterList(
+ Chain suite, bool onlyInGit, Stream<TestDescription> base) async* {
+ Set<Uri> gitFiles;
+ if (onlyInGit) {
+ gitFiles = await getGitFiles(suite);
+ }
+ await for (TestDescription description in base) {
+ if (onlyInGit && !gitFiles.contains(description.uri)) {
+ continue;
+ }
+ yield description;
+ }
+}
+
+Future<Set<Uri>> getGitFiles(Chain suite) async {
+ ProcessResult result = await Process.run("git", ["ls-files", "."],
+ workingDirectory: new Directory.fromUri(suite.uri).absolute.path,
+ runInShell: true);
+ String stdout = result.stdout;
+ return stdout
+ .split(new RegExp('^', multiLine: true))
+ .map((line) => suite.uri.resolve(line.trimRight()))
+ .toSet();
+}
+
+void checkEnvironment(
+ Map<String, String> environment, Set<String> knownEnvironmentKeys) {
+ Set<String> environmentKeys = environment.keys.toSet();
+ environmentKeys.removeAll(knownEnvironmentKeys);
+ if (environmentKeys.isNotEmpty) {
+ throw "Unknown environment(s) given: ${environmentKeys.toList()}.\n"
+ "Knows about ${knownEnvironmentKeys.toList()}";
+ }
+}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart
new file mode 100644
index 0000000..71068db
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2020, 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.
+
+T f<T>(T t) => t;
+
+T g<T>(T? t) => t!;
+
+T h<T extends Object>(T? t) => t!;
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {
+ f(d);
+ f(v);
+ f(onull);
+ f(o);
+ f(snull);
+ f(s);
+
+ g(d);
+ g(v);
+ g(onull);
+ g(o);
+ g(snull);
+ g(s);
+
+ h(d);
+ h(v);
+ h(onull);
+ h(o);
+ h(snull);
+ h(s);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.outline.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.outline.expect
new file mode 100644
index 0000000..4238908
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+ ;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+ ;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+ ;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+// g(v);
+// ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+// h(v);
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+ return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+ return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+ return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+ self::f<dynamic>(d);
+ self::f<void>(v);
+ self::f<core::Object?>(onull);
+ self::f<core::Object>(o);
+ self::f<core::String?>(snull);
+ self::f<core::String>(s);
+ self::g<core::Object>(d);
+ self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+ g(v);
+ ^" in v);
+ self::g<core::Object>(onull);
+ self::g<core::Object>(o);
+ self::g<core::String>(snull);
+ self::g<core::String>(s);
+ self::h<core::Object>(d);
+ self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+ h(v);
+ ^" in v);
+ self::h<core::Object>(onull);
+ self::h<core::Object>(o);
+ self::h<core::String>(snull);
+ self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+// g(v);
+// ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+// h(v);
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+ return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+ return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+ return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+ self::f<dynamic>(d);
+ self::f<void>(v);
+ self::f<core::Object?>(onull);
+ self::f<core::Object>(o);
+ self::f<core::String?>(snull);
+ self::f<core::String>(s);
+ self::g<core::Object>(d);
+ self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+ g(v);
+ ^" in v);
+ self::g<core::Object>(onull);
+ self::g<core::Object>(o);
+ self::g<core::String>(snull);
+ self::g<core::String>(s);
+ self::h<core::Object>(d);
+ self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+ h(v);
+ ^" in v);
+ self::h<core::Object>(onull);
+ self::h<core::Object>(o);
+ self::h<core::String>(snull);
+ self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline.expect
new file mode 100644
index 0000000..51fed79
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+T f<T>(T t) => t;
+T g<T>(T? t) => t!;
+T h<T extends Object>(T? t) => t!;
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..51fed79
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+T f<T>(T t) => t;
+T g<T>(T? t) => t!;
+T h<T extends Object>(T? t) => t!;
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+// g(v);
+// ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+// h(v);
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+ return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+ return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+ return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+ self::f<dynamic>(d);
+ self::f<void>(v);
+ self::f<core::Object?>(onull);
+ self::f<core::Object>(o);
+ self::f<core::String?>(snull);
+ self::f<core::String>(s);
+ self::g<core::Object>(d);
+ self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+ g(v);
+ ^" in v);
+ self::g<core::Object>(onull);
+ self::g<core::Object>(o);
+ self::g<core::String>(snull);
+ self::g<core::String>(s);
+ self::h<core::Object>(d);
+ self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+ h(v);
+ ^" in v);
+ self::h<core::Object>(onull);
+ self::h<core::Object>(o);
+ self::h<core::String>(snull);
+ self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+// g(v);
+// ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+// h(v);
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+ return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+ return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+ return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+ self::f<dynamic>(d);
+ self::f<void>(v);
+ self::f<core::Object?>(onull);
+ self::f<core::Object>(o);
+ self::f<core::String?>(snull);
+ self::f<core::String>(s);
+ self::g<core::Object>(d);
+ self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+ g(v);
+ ^" in v);
+ self::g<core::Object>(onull);
+ self::g<core::Object>(o);
+ self::g<core::String>(snull);
+ self::g<core::String>(s);
+ self::h<core::Object>(d);
+ self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+ h(v);
+ ^" in v);
+ self::h<core::Object>(onull);
+ self::h<core::Object>(o);
+ self::h<core::String>(snull);
+ self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
index 2571ea6..433878f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
@@ -2,15 +2,15 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart:11:27: Error: The parameter 'cls' of the method 'SubClass.invariant' has type 'SubClass', which does not match the corresponding type, 'Class', in the overridden method, 'Class with Mixin.invariant'.
+// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart:11:27: Error: The parameter 'cls' of the method 'SubClass.invariant' has type 'SubClass', which does not match the corresponding type, 'Class', in the overridden method, 'Class.invariant'.
// - 'SubClass' is from 'pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart'.
// - 'Class' is from 'pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in_lib.dart'.
// Change to a supertype of 'Class', or, for a covariant parameter, a subtype.
// void invariant(SubClass cls) {} // error
// ^
-// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart:9:7: Context: This is the overridden method ('invariant').
-// class SubClass extends Class with Mixin {
-// ^
+// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in_lib.dart:9:8: Context: This is the overridden method ('invariant').
+// void invariant(Class cls);
+// ^
//
import self as self;
import "covariant_from_opt_in_lib.dart" as cov;
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart
new file mode 100644
index 0000000..0e43b03
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2020, 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.
+
+import './opt_out_lib.dart';
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {
+ f(d);
+ f(v);
+ f(onull);
+ f(o);
+ f(snull);
+ f(s);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline.expect
new file mode 100644
index 0000000..7188a11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+import './opt_out_lib.dart';
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7188a11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+import './opt_out_lib.dart';
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.expect
new file mode 100644
index 0000000..216a6b7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "opt_out_lib.dart" as opt;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+ opt::f<dynamic>(d);
+ opt::f<void>(v);
+ opt::f<core::Object?>(onull);
+ opt::f<core::Object>(o);
+ opt::f<core::String?>(snull);
+ opt::f<core::String>(s);
+}
+static method main() → dynamic {}
+
+library;
+import self as opt;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(opt::f::T* a) → opt::f::T*
+ return a;
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..216a6b7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.transformed.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "opt_out_lib.dart" as opt;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+ opt::f<dynamic>(d);
+ opt::f<void>(v);
+ opt::f<core::Object?>(onull);
+ opt::f<core::Object>(o);
+ opt::f<core::String?>(snull);
+ opt::f<core::String>(s);
+}
+static method main() → dynamic {}
+
+library;
+import self as opt;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(opt::f::T* a) → opt::f::T*
+ return a;
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/opt_out_lib.dart b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/opt_out_lib.dart
new file mode 100644
index 0000000..1b2aaa8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/opt_out_lib.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2020, 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.8
+
+T f<T>(T a) => a;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index bbde631..74ef5a2 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -3790,13 +3790,16 @@
factory Arguments.forwarded(FunctionNode function, Library library) {
return new Arguments(
- function.positionalParameters.map((p) => new VariableGet(p)).toList(),
+ function.positionalParameters
+ .map<Expression>((p) => new VariableGet(p))
+ .toList(),
named: function.namedParameters
.map((p) => new NamedExpression(p.name, new VariableGet(p)))
.toList(),
types: function.typeParameters
- .map((p) => new TypeParameterType.withDefaultNullabilityForLibrary(
- p, library))
+ .map<DartType>((p) =>
+ new TypeParameterType.withDefaultNullabilityForLibrary(
+ p, library))
.toList());
}
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index 314803a..f075b34 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -325,7 +325,9 @@
hierarchy.getDispatchTarget(lookupClass, new Name("noSuchMethod"));
String methodNameUsed = (isGetter)
? "get:$methodName"
- : (isSetter) ? "set:$methodName=" : methodName;
+ : (isSetter)
+ ? "set:$methodName="
+ : methodName;
if (noSuchMethod != null &&
noSuchMethod.function.positionalParameters.length == 1 &&
noSuchMethod.function.namedParameters.isEmpty) {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 70955b1..6391890 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -85,7 +85,7 @@
front_end/test/fasta/text_serialization_test: Pass, ExtraSlow
front_end/test/fasta/types/dart2js_benchmark_test: Pass, Slow
front_end/test/fasta/types/large_app_benchmark_test: Pass, ExtraSlow
-front_end/test/incremental_compiler_leak_test: Pass, Slow
+front_end/test/incremental_compiler_leak_test: Pass, ExtraSlow
front_end/test/incremental_dart2js_test: Pass, Slow
front_end/test/minimal_incremental_kernel_generator_test: Slow, Pass
front_end/testcases/*: Skip # These are not tests but input for tests.
diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart
index 02d1f3e..25709e2 100644
--- a/pkg/test_runner/lib/src/test_suite.dart
+++ b/pkg/test_runner/lib/src/test_suite.dart
@@ -678,7 +678,7 @@
for (var name in testFile.otherResources) {
var namePath = Path(name);
var fromPath = testFile.path.directoryPath.join(namePath);
- File('$tempDir/$name').parent.createSync(recursive: true);
+ File('$tempDir/$name').createSync(recursive: true);
File(fromPath.toNativePath()).copySync('$tempDir/$name');
}
}
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 9ba04b2..8ec1805 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -406,7 +406,9 @@
// _fromAddress<Int8>(_loadIntPtr(pointer, offset));
final loadMethod = isPointer
? loadMethods[NativeType.kIntptr]
- : optimizedTypes.contains(type) ? loadMethods[type] : loadStructMethod;
+ : optimizedTypes.contains(type)
+ ? loadMethods[type]
+ : loadStructMethod;
Expression getterReturnValue = StaticInvocation(
loadMethod,
Arguments([
diff --git a/tests/language/async/await_test.dart b/tests/language/async/await_test.dart
index eca75a8..07c3dad 100644
--- a/tests/language/async/await_test.dart
+++ b/tests/language/async/await_test.dart
@@ -1367,7 +1367,7 @@
group("if", () {
test("await in test", () {
- f(v) async {
+ f(bool v) async {
if (await new Future.value(v)) {
return 42;
} else {
@@ -1379,7 +1379,7 @@
});
test("await err in test", () {
- f(v) async {
+ f(bool v) async {
if (await new Future.error("err")) {
return 42;
} else {
@@ -1391,7 +1391,7 @@
});
test("await in then", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return await new Future.value(42);
}
@@ -1402,7 +1402,7 @@
});
test("await err in then", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return await new Future.error("err");
}
@@ -1413,7 +1413,7 @@
});
test("await in then with else", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return await new Future.value(42);
} else {
@@ -1426,7 +1426,7 @@
});
test("await err in then with else", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return await new Future.error("err");
} else {
@@ -1439,7 +1439,7 @@
});
test("await in else", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return 37;
} else {
@@ -1452,7 +1452,7 @@
});
test("await err in else", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return 37;
} else {
@@ -1465,7 +1465,7 @@
});
test("await in else-if test", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return 37;
} else if (!await new Future.value(v)) {
@@ -1480,7 +1480,7 @@
});
test("await in else-if then", () {
- f(v) async {
+ f(bool v) async {
if (v) {
return 37;
} else if (!v) {
@@ -1497,7 +1497,7 @@
group("conditional operator", () {
test("await in test", () {
- f(v) async {
+ f(bool v) async {
return (await new Future.value(v)) ? 42 : 37;
}
@@ -1505,7 +1505,7 @@
});
test("await err in test", () {
- f(v) async {
+ f(bool v) async {
return (await new Future.error("err")) ? 42 : 37;
}
@@ -1513,7 +1513,7 @@
});
test("await in then", () {
- f(v) async {
+ f(bool v) async {
return v ? (await new Future.value(42)) : 37;
}
@@ -1521,7 +1521,7 @@
});
test("await err in then", () {
- f(v) async {
+ f(bool v) async {
return v ? (await new Future.error("err")) : 37;
}
@@ -1529,7 +1529,7 @@
});
test("await in else", () {
- f(v) async {
+ f(bool v) async {
return v ? 37 : (await new Future.value(42));
}
@@ -1537,7 +1537,7 @@
});
test("await err in else", () {
- f(v) async {
+ f(bool v) async {
return v ? 37 : (await new Future.error("err"));
}
diff --git a/tests/language/function/call_generic_test.dart b/tests/language/function/call_generic_test.dart
index de3b0bd..19ea8ba 100644
--- a/tests/language/function/call_generic_test.dart
+++ b/tests/language/function/call_generic_test.dart
@@ -35,7 +35,7 @@
}
main() {
- check([dynamic, 1, 2, 3, null, null], staticFn(1 as dynamic, 2, 3));
+ check([Object, 1, 2, 3, null, null], staticFn(1 as dynamic, 2, 3));
check([Object, 'Z', 2, 4, null, null], staticFn('Z', 2, 4));
@@ -53,13 +53,13 @@
var c = new C();
- check([dynamic, 8, 2, 3, null, null], c.memberFn(8 as dynamic, 2, 3));
+ check([Object, 8, 2, 3, null, null], c.memberFn(8 as dynamic, 2, 3));
check([Object, 'A', 2, 3, null, null], c.memberFn('A', 2, 3));
check([int, 9, 2, 3, null, null], c.memberFn<int>(9, 2, 3));
- check([dynamic, 10, 2, 3, null, null], c.map(10 as dynamic, 2, 3));
+ check([Object, 10, 2, 3, null, null], c.map(10 as dynamic, 2, 3));
check([Object, 'B', 2, 3, null, null], c.map('B', 2, 3));
diff --git a/tests/language/inference/dynamic_nullable_test.dart b/tests/language/inference/dynamic_nullable_test.dart
index 6bcb121..46b6591 100644
--- a/tests/language/inference/dynamic_nullable_test.dart
+++ b/tests/language/inference/dynamic_nullable_test.dart
@@ -55,7 +55,7 @@
var c = C.list(o);
var f = bar(o);
- var l = o.whereNotNull;
+ var l = o.whereNotNull();
c.expectStaticType<Exactly<C<Object>>>();
Expect.type<C<Object>>(c); // Run-time type is subtype of C<Object>.
diff --git a/tools/VERSION b/tools/VERSION
index 66e08aa..6597a0f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 10
PATCH 0
-PRERELEASE 134
+PRERELEASE 135
PRERELEASE_PATCH 0
\ No newline at end of file