mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:12:08 +00:00
Sort a few files.
Change-Id: I4f1343a4b45ab2871ca7aa3a6eeb221072a3845d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/290265 Reviewed-by: Samuel Rawlins <srawlins@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
4271aaacfd
commit
c7c2be07d6
|
@ -16,8 +16,6 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
const countRuns = 2;
|
||||
|
||||
void main(List<String> args) async {
|
||||
try {
|
||||
final results = <Map<String, dynamic>>[];
|
||||
|
@ -45,6 +43,8 @@ void main(List<String> args) async {
|
|||
}
|
||||
}
|
||||
|
||||
const countRuns = 2;
|
||||
|
||||
Future<List<Map<String, dynamic>>> runBenchmarks({required bool warm}) async {
|
||||
final temperature = warm ? 'warm' : 'cold';
|
||||
final benchmarkResults = await Process.run(Platform.resolvedExecutable, [
|
||||
|
|
|
@ -2246,21 +2246,6 @@ class _InvalidAccessVerifier {
|
|||
return false;
|
||||
}
|
||||
|
||||
/// Check if @visibleForTemplate is applied to the given [Element].
|
||||
///
|
||||
/// [ClassElement] and [EnumElement] are excluded from the @visibleForTemplate
|
||||
/// access checks. Instead, the access restriction is cascaded to the
|
||||
/// corresponding class members and enum constants. For other types of
|
||||
/// elements, check if they are annotated based on `hasVisibleForTemplate`
|
||||
/// value.
|
||||
bool _isVisibleForTemplateApplied(Element? element) {
|
||||
if (element is ClassElement || element is EnumElement) {
|
||||
return false;
|
||||
} else {
|
||||
return _hasVisibleForTemplate(element);
|
||||
}
|
||||
}
|
||||
|
||||
bool _hasVisibleForTemplate(Element? element) {
|
||||
if (element == null) {
|
||||
return false;
|
||||
|
@ -2309,6 +2294,21 @@ class _InvalidAccessVerifier {
|
|||
}
|
||||
return _workspacePackage!.contains(library.source);
|
||||
}
|
||||
|
||||
/// Check if @visibleForTemplate is applied to the given [Element].
|
||||
///
|
||||
/// [ClassElement] and [EnumElement] are excluded from the @visibleForTemplate
|
||||
/// access checks. Instead, the access restriction is cascaded to the
|
||||
/// corresponding class members and enum constants. For other types of
|
||||
/// elements, check if they are annotated based on `hasVisibleForTemplate`
|
||||
/// value.
|
||||
bool _isVisibleForTemplateApplied(Element? element) {
|
||||
if (element is ClassElement || element is EnumElement) {
|
||||
return false;
|
||||
} else {
|
||||
return _hasVisibleForTemplate(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A visitor that determines, upon visiting a function body and/or a
|
||||
|
|
|
@ -39,6 +39,129 @@ class _VisibleForTemplate {
|
|||
);
|
||||
}
|
||||
|
||||
test_cascadingClassMember() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
int _x;
|
||||
|
||||
A(this._x);
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
new A(0);
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart', [
|
||||
error(HintCode.UNUSED_FIELD, 86, 2),
|
||||
]);
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 41, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_cascadingEnumConstant() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
enum SomeEnum {
|
||||
optionA,
|
||||
optionB,
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var allOptions = SomeEnum.optionA;
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 10),
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 63, 7),
|
||||
]);
|
||||
}
|
||||
|
||||
test_classConstructor() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var second = new A();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 6),
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 54, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_classDeclaration() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
static bool isItTrue() => false;
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var foo = A;
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 3),
|
||||
]);
|
||||
}
|
||||
|
||||
test_enumDeclaration() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
enum SomeEnum {
|
||||
optionA,
|
||||
optionB,
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var allOptions = SomeEnum;
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 10),
|
||||
]);
|
||||
}
|
||||
|
||||
test_export() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
@ -54,6 +177,108 @@ export 'lib1.dart' show fn0;
|
|||
await _resolveFile('$testPackageLibPath/lib2.dart');
|
||||
}
|
||||
|
||||
test_extendClass() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
}
|
||||
void main() {
|
||||
var second = B();
|
||||
second.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 86, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_extendClass_super() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
void q() => super.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 61, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_extendClass_withOverride() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
@override
|
||||
void p() => print('world');
|
||||
}
|
||||
void main() {
|
||||
var second = B();
|
||||
second.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart');
|
||||
}
|
||||
|
||||
test_extendingClass_withProtected() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
@protected
|
||||
void p() => print('hello');
|
||||
}
|
||||
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
void p() => super.p();
|
||||
}
|
||||
void main() {
|
||||
var second = B();
|
||||
second.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart');
|
||||
}
|
||||
|
||||
test_functionInExtension() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
@ -231,6 +456,26 @@ void main() {
|
|||
await _resolveFile('$testPackageLibPath/lib1.template.dart');
|
||||
}
|
||||
|
||||
test_supertype_method() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {}
|
||||
var a = A();
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
print(a.hashCode);
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart');
|
||||
}
|
||||
|
||||
test_topLevelFunction() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
@ -298,251 +543,6 @@ void main() {
|
|||
]);
|
||||
}
|
||||
|
||||
test_classDeclaration() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
static bool isItTrue() => false;
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var foo = A;
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 3),
|
||||
]);
|
||||
}
|
||||
|
||||
test_cascadingClassMember() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
int _x;
|
||||
|
||||
A(this._x);
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
new A(0);
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart', [
|
||||
error(HintCode.UNUSED_FIELD, 86, 2),
|
||||
]);
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 41, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_enumDeclaration() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
enum SomeEnum {
|
||||
optionA,
|
||||
optionB,
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var allOptions = SomeEnum;
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 10),
|
||||
]);
|
||||
}
|
||||
|
||||
test_cascadingEnumConstant() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
enum SomeEnum {
|
||||
optionA,
|
||||
optionB,
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var allOptions = SomeEnum.optionA;
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 10),
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 63, 7),
|
||||
]);
|
||||
}
|
||||
|
||||
test_classConstructor() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
var second = new A();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 6),
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 54, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_extendClass() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
}
|
||||
void main() {
|
||||
var second = B();
|
||||
second.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 86, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_extendClass_super() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
void q() => super.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart', [
|
||||
error(WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER, 61, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_extendClass_withOverride() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
void p() => print('hello');
|
||||
}
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
@override
|
||||
void p() => print('world');
|
||||
}
|
||||
void main() {
|
||||
var second = B();
|
||||
second.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart');
|
||||
}
|
||||
|
||||
test_extendingClass_withProtected() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {
|
||||
@protected
|
||||
void p() => print('hello');
|
||||
}
|
||||
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
class B extends A {
|
||||
void p() => super.p();
|
||||
}
|
||||
void main() {
|
||||
var second = B();
|
||||
second.p();
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart');
|
||||
}
|
||||
|
||||
test_supertype_method() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', r'''
|
||||
import 'package:angular_meta/angular_meta.dart';
|
||||
|
||||
@visibleForTemplate
|
||||
class A {}
|
||||
var a = A();
|
||||
''');
|
||||
newFile('$testPackageLibPath/lib2.dart', r'''
|
||||
import 'lib1.dart';
|
||||
|
||||
void main() {
|
||||
print(a.hashCode);
|
||||
}
|
||||
''');
|
||||
|
||||
await _resolveFile('$testPackageLibPath/lib1.dart');
|
||||
await _resolveFile('$testPackageLibPath/lib2.dart');
|
||||
}
|
||||
|
||||
/// Resolve the file with the given [path].
|
||||
///
|
||||
/// Similar to ResolutionTest.resolveTestFile, but a custom path is supported.
|
||||
|
|
Loading…
Reference in a new issue