Skip to content

Commit

Permalink
Version 3.2.0-210.0.dev
Browse files Browse the repository at this point in the history
Merge df654c5 into dev
  • Loading branch information
Dart CI committed Sep 28, 2023
2 parents d0542a9 + df654c5 commit 077d768
Show file tree
Hide file tree
Showing 25 changed files with 341 additions and 37 deletions.
17 changes: 11 additions & 6 deletions pkg/analyzer/lib/src/fasta/doc_comment_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -426,12 +426,17 @@ final class DocCommentBuilder {
_pushDocDirective(parser.simpleDirective(DocDirectiveType.youtube));
return true;
}
_errorReporter?.reportErrorForOffset(
WarningCode.DOC_DIRECTIVE_UNKNOWN,
_characterSequence._offset + nameIndex,
nameEnd - nameIndex,
[name],
);
// Do not report [WarningCode.DOC_DIRECTIVE_UNKNOWN] until Flutter customer
// code is either cleaned or we support all of the directives they use.
// In particular, https://github.com/macosui/macos_ui uses `@image`.
if (1 == 2) {
_errorReporter?.reportErrorForOffset(
WarningCode.DOC_DIRECTIVE_UNKNOWN,
_characterSequence._offset + nameIndex,
nameEnd - nameIndex,
[name],
);
}
return false;
}

Expand Down
1 change: 1 addition & 0 deletions pkg/analyzer/test/src/dart/parser/doc_comment_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1753,6 +1753,7 @@ Comment
''');
}

@FailingTest(reason: 'Not reporting WarningCode.DOC_DIRECTIVE_UNKNOWN yet')
test_unknownDocDirective() {
final parseResult = parseStringWithErrors(r'''
int x = 0;
Expand Down
3 changes: 2 additions & 1 deletion pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
Original file line number Diff line number Diff line change
Expand Up @@ -991,7 +991,8 @@ class MacroApplications {
List<List<macro.ParameterDeclarationImpl>> parameters =
_createParameters(builder, builder.formals);
macro.ParameterizedTypeDeclaration definingClass =
getClassDeclaration(builder.classBuilder);
// TODO(johnniwinther): Support extension type factories.
getClassDeclaration(builder.classBuilder!);

return new macro.ConstructorDeclarationImpl(
id: macro.RemoteInstance.uniqueId,
Expand Down
17 changes: 8 additions & 9 deletions pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,7 @@ class SourceFactoryBuilder extends SourceFunctionBuilderImpl {
}

@override
SourceClassBuilder get classBuilder =>
super.classBuilder as SourceClassBuilder;
DeclarationBuilder get declarationBuilder => super.declarationBuilder!;

List<SourceFactoryBuilder>? get patchesForTesting => _patches;

Expand Down Expand Up @@ -307,7 +306,7 @@ class SourceFactoryBuilder extends SourceFunctionBuilderImpl {

@override
String get fullNameForErrors {
return "${flattenName(classBuilder.name, charOffset, fileUri)}"
return "${flattenName(declarationBuilder.name, charOffset, fileUri)}"
"${name.isEmpty ? '' : '.$name'}";
}

Expand Down Expand Up @@ -474,10 +473,10 @@ class RedirectingFactoryBuilder extends SourceFactoryBuilder {
if (typeArguments != null && typeArguments.any((t) => t is UnknownType)) {
TypeInferrer inferrer = libraryBuilder.loader.typeInferenceEngine
.createLocalTypeInferrer(
fileUri, classBuilder.thisType, libraryBuilder, null);
fileUri, declarationBuilder.thisType, libraryBuilder, null);
InferenceHelper helper = libraryBuilder.loader
.createBodyBuilderForOutlineExpression(
libraryBuilder, bodyBuilderContext, classBuilder.scope, fileUri);
.createBodyBuilderForOutlineExpression(libraryBuilder,
bodyBuilderContext, declarationBuilder.scope, fileUri);
Builder? targetBuilder = redirectionTarget.target;
if (targetBuilder is SourceMemberBuilder) {
// Ensure that target has been built.
Expand All @@ -503,7 +502,7 @@ class RedirectingFactoryBuilder extends SourceFactoryBuilder {
// Assume that the error is reported elsewhere, use 'dynamic' for
// recovery.
typeArguments = new List<DartType>.filled(
target.enclosingClass!.typeParameters.length, const DynamicType(),
declarationBuilder.typeVariablesCount, const DynamicType(),
growable: true);
}

Expand Down Expand Up @@ -736,7 +735,7 @@ class RedirectingFactoryBuilder extends SourceFactoryBuilder {
libraryBuilder.addProblemForRedirectingFactory(
this,
templateCyclicRedirectingFactoryConstructors
.withArguments("${classBuilder.name}"
.withArguments("${declarationBuilder.name}"
"${name == '' ? '' : '.${name}'}"),
charOffset,
noLength,
Expand Down Expand Up @@ -784,7 +783,7 @@ class RedirectingFactoryBuilder extends SourceFactoryBuilder {

// Redirection to generative enum constructors is forbidden and is reported
// as an error elsewhere.
if (!(classBuilder.cls.isEnum &&
if (!((classBuilder?.cls.isEnum ?? false) &&
(redirectionTarget.target?.isConstructor ?? false))) {
// Check whether [redirecteeType] <: [factoryType].
if (!typeEnvironment.isSubtypeOf(
Expand Down
8 changes: 8 additions & 0 deletions pkg/front_end/testcases/extension_types/generic_factory.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright (c) 2023, 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.

extension type const ET3<T extends num>(int id) {
const ET3.c1() : this(0);
factory ET3.f1() = ET3.c1;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
library;
import self as self;
import "dart:core" as core;

extension type ET3<T extends core::num>(core::int id) {
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
constructor c1 = self::ET3|constructor#c1;
constructor tearoff c1 = self::ET3|constructor#_#c1#tearOff;
static redirecting-factory f1 = self::ET3|constructor#f1;
static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
}
static inline-class-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#::T> /* = core::int */ #this = id;
return #this;
}
static inline-class-member method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T> /* = core::int */
return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
static inline-class-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#c1::T> /* = core::int */ #this;
#this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
return #this;
}
static inline-class-member method ET3|constructor#_#c1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#c1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<self::ET3|constructor#_#c1#tearOff::T>();
static inline-class-member method ET3|constructor#f1<T extends core::num>() → self::ET3<self::ET3|constructor#f1::T> /* = core::int */ /* redirection-target: self::ET3|constructor#c1<dynamic>*/
return self::ET3|constructor#c1<dynamic>();
static inline-class-member method ET3|constructor#_#f1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#f1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<dynamic>();
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
library;
import self as self;
import "dart:core" as core;

extension type ET3<T extends core::num>(core::int id) {
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
constructor c1 = self::ET3|constructor#c1;
constructor tearoff c1 = self::ET3|constructor#_#c1#tearOff;
static redirecting-factory f1 = self::ET3|constructor#f1;
static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
}
static inline-class-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#::T> /* = core::int */ #this = id;
return #this;
}
static inline-class-member method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T> /* = core::int */
return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
static inline-class-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#c1::T> /* = core::int */ #this;
#this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
return #this;
}
static inline-class-member method ET3|constructor#_#c1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#c1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<self::ET3|constructor#_#c1#tearOff::T>();
static inline-class-member method ET3|constructor#f1<T extends core::num>() → self::ET3<self::ET3|constructor#f1::T> /* = core::int */ /* redirection-target: self::ET3|constructor#c1<dynamic>*/
return self::ET3|constructor#c1<dynamic>();
static inline-class-member method ET3|constructor#_#f1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#f1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<dynamic>();


Extra constant evaluation status:
Evaluated: StaticInvocation @ org-dartlang-testcase:///generic_factory.dart:7:17 -> IntConstant(0)
Evaluated: StaticInvocation @ org-dartlang-testcase:///generic_factory.dart:7:11 -> IntConstant(0)
Extra constant evaluation: evaluated: 10, effectively constant: 2
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extension type const ET3<T extends num>(int id) {
const ET3.c1() : this(0);
factory ET3.f1() = ET3.c1;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extension type const ET3<T extends num>(int id) {
const ET3.c1() : this(0);
factory ET3.f1() = ET3.c1;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
library;
import self as self;
import "dart:core" as core;

extension type ET3<T extends core::num>(core::int id) {
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
constructor c1 = self::ET3|constructor#c1;
constructor tearoff c1 = self::ET3|constructor#_#c1#tearOff;
static redirecting-factory f1 = self::ET3|constructor#f1;
static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
}
static inline-class-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#::T> /* = core::int */ #this = id;
return #this;
}
static inline-class-member method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T> /* = core::int */
return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
static inline-class-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#c1::T> /* = core::int */ #this;
#this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
return #this;
}
static inline-class-member method ET3|constructor#_#c1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#c1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<self::ET3|constructor#_#c1#tearOff::T>();
static inline-class-member method ET3|constructor#f1<T extends core::num>() → self::ET3<self::ET3|constructor#f1::T> /* = core::int */ /* redirection-target: self::ET3|constructor#c1<dynamic>*/
return self::ET3|constructor#c1<dynamic>();
static inline-class-member method ET3|constructor#_#f1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#f1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<dynamic>();
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
library;
import self as self;
import "dart:core" as core;

extension type ET3<T extends core::num>(core::int id) {
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
constructor c1 = self::ET3|constructor#c1;
constructor tearoff c1 = self::ET3|constructor#_#c1#tearOff;
static redirecting-factory f1 = self::ET3|constructor#f1;
static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
}
static inline-class-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#::T> /* = core::int */ #this = id;
return #this;
}
static inline-class-member method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T> /* = core::int */
return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
static inline-class-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#c1::T> /* = core::int */ #this;
#this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
return #this;
}
static inline-class-member method ET3|constructor#_#c1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#c1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<self::ET3|constructor#_#c1#tearOff::T>();
static inline-class-member method ET3|constructor#f1<T extends core::num>() → self::ET3<self::ET3|constructor#f1::T> /* = core::int */ /* redirection-target: self::ET3|constructor#c1<dynamic>*/
return self::ET3|constructor#c1<dynamic>();
static inline-class-member method ET3|constructor#_#f1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#f1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<dynamic>();
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
library;
import self as self;
import "dart:core" as core;

extension type ET3<T extends core::num>(core::int id) {
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
constructor c1 = self::ET3|constructor#c1;
constructor tearoff c1 = self::ET3|constructor#_#c1#tearOff;
static redirecting-factory f1 = self::ET3|constructor#f1;
static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
}
static inline-class-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T> /* = core::int */
;
static inline-class-member method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T> /* = core::int */
return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
static inline-class-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T> /* = core::int */
;
static inline-class-member method ET3|constructor#_#c1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#c1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<self::ET3|constructor#_#c1#tearOff::T>();
static inline-class-member method ET3|constructor#f1<T extends core::num>() → self::ET3<self::ET3|constructor#f1::T> /* = core::int */ /* redirection-target: self::ET3|constructor#c1<dynamic>*/
return self::ET3|constructor#c1<dynamic>();
static inline-class-member method ET3|constructor#_#f1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#f1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<dynamic>();
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
library;
import self as self;
import "dart:core" as core;

extension type ET3<T extends core::num>(core::int id) {
constructor • = self::ET3|constructor#;
constructor tearoff • = self::ET3|constructor#_#new#tearOff;
constructor c1 = self::ET3|constructor#c1;
constructor tearoff c1 = self::ET3|constructor#_#c1#tearOff;
static redirecting-factory f1 = self::ET3|constructor#f1;
static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
}
static inline-class-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#::T> /* = core::int */ #this = id;
return #this;
}
static inline-class-member method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T> /* = core::int */
return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
static inline-class-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T> /* = core::int */ {
lowered final self::ET3<self::ET3|constructor#c1::T> /* = core::int */ #this;
#this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
return #this;
}
static inline-class-member method ET3|constructor#_#c1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#c1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<self::ET3|constructor#_#c1#tearOff::T>();
static inline-class-member method ET3|constructor#f1<T extends core::num>() → self::ET3<self::ET3|constructor#f1::T> /* = core::int */ /* redirection-target: self::ET3|constructor#c1<dynamic>*/
return self::ET3|constructor#c1<dynamic>();
static inline-class-member method ET3|constructor#_#f1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#f1#tearOff::T> /* = core::int */
return self::ET3|constructor#c1<dynamic>();


Extra constant evaluation status:
Evaluated: StaticInvocation @ org-dartlang-testcase:///generic_factory.dart:7:17 -> IntConstant(0)
Evaluated: StaticInvocation @ org-dartlang-testcase:///generic_factory.dart:7:11 -> IntConstant(0)
Extra constant evaluation: evaluated: 10, effectively constant: 2
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2023, 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.

void main() {
print("Success running the canary.");
}
extension type const V<T>(int id) {}

const c = const V<int>(0);
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
library;
import self as self;
import "dart:core" as core;

extension type V<T extends core::Object? = dynamic>(core::int id) {
constructor • = self::V|constructor#;
constructor tearoff • = self::V|constructor#_#new#tearOff;
}
static const field self::V<core::int> /* = core::int */ c = #C1;
static inline-class-member method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%> /* = core::int */ {
lowered final self::V<self::V|constructor#::T%> /* = core::int */ #this = id;
return #this;
}
static inline-class-member method V|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#_#new#tearOff::T%> /* = core::int */
return self::V|constructor#<self::V|constructor#_#new#tearOff::T%>(id);

constants {
#C1 = 0
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
library;
import self as self;
import "dart:core" as core;

extension type V<T extends core::Object? = dynamic>(core::int id) {
constructor • = self::V|constructor#;
constructor tearoff • = self::V|constructor#_#new#tearOff;
}
static const field self::V<core::int> /* = core::int */ c = #C1;
static inline-class-member method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%> /* = core::int */ {
lowered final self::V<self::V|constructor#::T%> /* = core::int */ #this = id;
return #this;
}
static inline-class-member method V|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#_#new#tearOff::T%> /* = core::int */
return self::V|constructor#<self::V|constructor#_#new#tearOff::T%>(id);

constants {
#C1 = 0
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
extension type const V<T>(int id) {}
const c = const V<int>(0);
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
const c = const V<int>(0);
extension type const V<T>(int id) {}
Loading

0 comments on commit 077d768

Please sign in to comment.