mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 21:40:07 +00:00
[kernel] Make Member.name non-nullable
Change-Id: Id2befd868e93985d6af463c2ccd410cd56b68187 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/194721 Reviewed-by: Jens Johansen <jensj@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
d30d9ed839
commit
64460ec47f
|
@ -142,6 +142,7 @@ class ConstructorBuilderImpl extends FunctionBuilderImpl
|
|||
Member referenceFrom,
|
||||
[String nativeMethodName])
|
||||
: _constructor = new Constructor(null,
|
||||
name: new Name(name, compilationUnit.library),
|
||||
fileUri: compilationUnit.fileUri,
|
||||
reference: referenceFrom?.reference)
|
||||
..startFileOffset = startCharOffset
|
||||
|
@ -196,9 +197,11 @@ class ConstructorBuilderImpl extends FunctionBuilderImpl
|
|||
f(member, BuiltMemberKind.Constructor);
|
||||
}
|
||||
|
||||
bool _hasBeenBuilt = false;
|
||||
|
||||
@override
|
||||
Constructor build(SourceLibraryBuilder libraryBuilder) {
|
||||
if (_constructor.name == null) {
|
||||
if (!_hasBeenBuilt) {
|
||||
_constructor.function = buildFunction(libraryBuilder);
|
||||
_constructor.function.parent = _constructor;
|
||||
_constructor.function.fileOffset = charOpenParenOffset;
|
||||
|
@ -206,7 +209,8 @@ class ConstructorBuilderImpl extends FunctionBuilderImpl
|
|||
_constructor.function.typeParameters = const <TypeParameter>[];
|
||||
_constructor.isConst = isConst;
|
||||
_constructor.isExternal = isExternal;
|
||||
_constructor.name = new Name(name, libraryBuilder.library);
|
||||
updatePrivateMemberName(_constructor, libraryBuilder);
|
||||
_hasBeenBuilt = true;
|
||||
}
|
||||
if (formals != null) {
|
||||
bool needsInference = false;
|
||||
|
|
|
@ -172,6 +172,33 @@ class EnumBuilder extends SourceClassBuilder {
|
|||
/// static const List<E> values = const <E>[id0, ..., idn-1];
|
||||
/// String toString() => _name;
|
||||
/// }
|
||||
|
||||
FieldNameScheme instanceFieldNameScheme = new FieldNameScheme(
|
||||
isInstanceMember: true,
|
||||
className: name,
|
||||
isExtensionMember: false,
|
||||
extensionName: null,
|
||||
libraryReference: referencesFrom != null
|
||||
? referencesFromIndexed.library.reference
|
||||
: parent.library.reference);
|
||||
|
||||
FieldNameScheme staticFieldNameScheme = new FieldNameScheme(
|
||||
isInstanceMember: false,
|
||||
className: name,
|
||||
isExtensionMember: false,
|
||||
extensionName: null,
|
||||
libraryReference: referencesFrom != null
|
||||
? referencesFromIndexed.library.reference
|
||||
: parent.library.reference);
|
||||
|
||||
ProcedureNameScheme procedureNameScheme = new ProcedureNameScheme(
|
||||
isStatic: false,
|
||||
isExtensionMember: false,
|
||||
extensionName: null,
|
||||
libraryReference: referencesFrom != null
|
||||
? referencesFromIndexed.library.reference
|
||||
: parent.library.reference);
|
||||
|
||||
Constructor constructorReference;
|
||||
Reference toStringReference;
|
||||
Reference indexGetterReference;
|
||||
|
@ -210,6 +237,8 @@ class EnumBuilder extends SourceClassBuilder {
|
|||
parent,
|
||||
charOffset,
|
||||
charOffset,
|
||||
instanceFieldNameScheme,
|
||||
isInstanceMember: true,
|
||||
fieldGetterReference: indexGetterReference,
|
||||
fieldSetterReference: indexSetterReference);
|
||||
members["_name"] = new SourceFieldBuilder(
|
||||
|
@ -221,6 +250,8 @@ class EnumBuilder extends SourceClassBuilder {
|
|||
parent,
|
||||
charOffset,
|
||||
charOffset,
|
||||
instanceFieldNameScheme,
|
||||
isInstanceMember: true,
|
||||
fieldGetterReference: _nameGetterReference,
|
||||
fieldSetterReference: _nameSetterReference);
|
||||
ConstructorBuilder constructorBuilder = new ConstructorBuilderImpl(
|
||||
|
@ -251,6 +282,8 @@ class EnumBuilder extends SourceClassBuilder {
|
|||
parent,
|
||||
charOffset,
|
||||
charOffset,
|
||||
staticFieldNameScheme,
|
||||
isInstanceMember: false,
|
||||
fieldGetterReference: valuesGetterReference,
|
||||
fieldSetterReference: valuesSetterReference);
|
||||
members["values"] = valuesBuilder;
|
||||
|
@ -263,8 +296,8 @@ class EnumBuilder extends SourceClassBuilder {
|
|||
0,
|
||||
stringType,
|
||||
"toString",
|
||||
null,
|
||||
null,
|
||||
/* typeVariables = */ null,
|
||||
/* formals = */ null,
|
||||
ProcedureKind.Method,
|
||||
parent,
|
||||
charOffset,
|
||||
|
@ -272,9 +305,11 @@ class EnumBuilder extends SourceClassBuilder {
|
|||
charOffset,
|
||||
charEndOffset,
|
||||
toStringReference,
|
||||
null,
|
||||
/* tearOffReference = */ null,
|
||||
AsyncMarker.Sync,
|
||||
/* isExtensionInstanceMember = */ false);
|
||||
procedureNameScheme,
|
||||
isExtensionMember: false,
|
||||
isInstanceMember: true);
|
||||
members["toString"] = toStringBuilder;
|
||||
String className = name;
|
||||
if (enumConstantInfos != null) {
|
||||
|
@ -329,6 +364,8 @@ class EnumBuilder extends SourceClassBuilder {
|
|||
parent,
|
||||
enumConstantInfo.charOffset,
|
||||
enumConstantInfo.charOffset,
|
||||
staticFieldNameScheme,
|
||||
isInstanceMember: false,
|
||||
fieldGetterReference: getterReference,
|
||||
fieldSetterReference: setterReference);
|
||||
members[name] = fieldBuilder..next = existing;
|
||||
|
|
|
@ -38,7 +38,6 @@ import '../type_inference/type_inference_engine.dart'
|
|||
import '../util/helpers.dart' show DelayedActionPerformer;
|
||||
|
||||
import 'class_builder.dart';
|
||||
import 'extension_builder.dart';
|
||||
import 'library_builder.dart';
|
||||
import 'member_builder.dart';
|
||||
import 'metadata_builder.dart';
|
||||
|
@ -121,25 +120,36 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
SourceLibraryBuilder libraryBuilder,
|
||||
int charOffset,
|
||||
int charEndOffset,
|
||||
{Reference fieldGetterReference,
|
||||
FieldNameScheme fieldNameScheme,
|
||||
{bool isInstanceMember,
|
||||
Reference fieldGetterReference,
|
||||
Reference fieldSetterReference,
|
||||
Reference lateIsSetGetterReference,
|
||||
Reference lateIsSetSetterReference,
|
||||
Reference lateGetterReference,
|
||||
Reference lateSetterReference})
|
||||
: super(libraryBuilder, charOffset) {
|
||||
assert(isInstanceMember != null);
|
||||
|
||||
Uri fileUri = libraryBuilder?.fileUri;
|
||||
// If in mixed mode, late lowerings cannot use `null` as a sentinel on
|
||||
// non-nullable fields since they can be assigned from legacy code.
|
||||
late_lowering.IsSetStrategy isSetStrategy =
|
||||
late_lowering.computeIsSetStrategy(libraryBuilder);
|
||||
|
||||
if (isAbstract || isExternal) {
|
||||
assert(lateIsSetGetterReference == null);
|
||||
assert(lateIsSetSetterReference == null);
|
||||
assert(lateGetterReference == null);
|
||||
assert(lateSetterReference == null);
|
||||
_fieldEncoding = new AbstractOrExternalFieldEncoding(fileUri, charOffset,
|
||||
charEndOffset, fieldGetterReference, fieldSetterReference,
|
||||
_fieldEncoding = new AbstractOrExternalFieldEncoding(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
fieldGetterReference,
|
||||
fieldSetterReference,
|
||||
isAbstract: isAbstract,
|
||||
isExternal: isExternal,
|
||||
isFinal: isFinal,
|
||||
|
@ -149,11 +159,12 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
libraryBuilder.loader.target.backendTarget.isLateFieldLoweringEnabled(
|
||||
hasInitializer: hasInitializer,
|
||||
isFinal: isFinal,
|
||||
isStatic: (isStatic || isTopLevel))) {
|
||||
isStatic: !isInstanceMember)) {
|
||||
if (hasInitializer) {
|
||||
if (isFinal) {
|
||||
_fieldEncoding = new LateFinalFieldWithInitializerEncoding(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -168,6 +179,7 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
} else {
|
||||
_fieldEncoding = new LateFieldWithInitializerEncoding(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -184,6 +196,7 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
if (isFinal) {
|
||||
_fieldEncoding = new LateFinalFieldWithoutInitializerEncoding(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -198,6 +211,7 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
} else {
|
||||
_fieldEncoding = new LateFieldWithoutInitializerEncoding(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -213,12 +227,13 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
}
|
||||
} else if (libraryBuilder.isNonNullableByDefault &&
|
||||
libraryBuilder.loader.target.backendTarget.useStaticFieldLowering &&
|
||||
(isStatic || isTopLevel) &&
|
||||
!isInstanceMember &&
|
||||
!isConst &&
|
||||
hasInitializer) {
|
||||
if (isFinal) {
|
||||
_fieldEncoding = new LateFinalFieldWithInitializerEncoding(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -233,6 +248,7 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
} else {
|
||||
_fieldEncoding = new LateFieldWithInitializerEncoding(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -251,7 +267,7 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
assert(lateGetterReference == null);
|
||||
assert(lateSetterReference == null);
|
||||
_fieldEncoding = new RegularFieldEncoding(
|
||||
fileUri, charOffset, charEndOffset,
|
||||
name, fieldNameScheme, fileUri, charOffset, charEndOffset,
|
||||
isFinal: isFinal,
|
||||
isConst: isConst,
|
||||
isLate: isLate,
|
||||
|
@ -551,6 +567,36 @@ class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
|
|||
|
||||
enum FieldNameType { Field, Getter, Setter, IsSetField }
|
||||
|
||||
class FieldNameScheme {
|
||||
final bool isInstanceMember;
|
||||
final String className;
|
||||
final bool isExtensionMember;
|
||||
final String extensionName;
|
||||
final Reference libraryReference;
|
||||
|
||||
FieldNameScheme(
|
||||
{this.isInstanceMember,
|
||||
this.className,
|
||||
this.isExtensionMember,
|
||||
this.extensionName,
|
||||
this.libraryReference})
|
||||
: assert(isInstanceMember != null),
|
||||
assert(isExtensionMember != null),
|
||||
assert(!isExtensionMember || extensionName != null),
|
||||
assert(libraryReference != null);
|
||||
|
||||
Name getName(FieldNameType type, String name, {bool isSynthesized}) {
|
||||
assert(isSynthesized != null);
|
||||
String text = SourceFieldBuilder.createFieldName(type, name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: isSynthesized);
|
||||
return new Name.byReference(text, libraryReference);
|
||||
}
|
||||
}
|
||||
|
||||
/// Strategy pattern for creating different encodings of a declared field.
|
||||
///
|
||||
/// This is used to provide lowerings for late fields using synthesized getters
|
||||
|
@ -621,7 +667,8 @@ abstract class FieldEncoding {
|
|||
class RegularFieldEncoding implements FieldEncoding {
|
||||
Field _field;
|
||||
|
||||
RegularFieldEncoding(Uri fileUri, int charOffset, int charEndOffset,
|
||||
RegularFieldEncoding(String name, FieldNameScheme fieldNameScheme,
|
||||
Uri fileUri, int charOffset, int charEndOffset,
|
||||
{bool isFinal,
|
||||
bool isConst,
|
||||
bool isLate,
|
||||
|
@ -636,13 +683,17 @@ class RegularFieldEncoding implements FieldEncoding {
|
|||
bool isImmutable =
|
||||
isLate ? (isFinal && hasInitializer) : (isFinal || isConst);
|
||||
_field = isImmutable
|
||||
? new Field.immutable(null,
|
||||
? new Field.immutable(
|
||||
fieldNameScheme.getName(FieldNameType.Field, name,
|
||||
isSynthesized: false),
|
||||
isFinal: isFinal,
|
||||
isConst: isConst,
|
||||
isLate: isLate,
|
||||
fileUri: fileUri,
|
||||
getterReference: getterReference)
|
||||
: new Field.mutable(null,
|
||||
: new Field.mutable(
|
||||
fieldNameScheme.getName(FieldNameType.Field, name,
|
||||
isSynthesized: false),
|
||||
isFinal: isFinal,
|
||||
isLate: isLate,
|
||||
fileUri: fileUri,
|
||||
|
@ -687,30 +738,19 @@ class RegularFieldEncoding implements FieldEncoding {
|
|||
void build(
|
||||
SourceLibraryBuilder libraryBuilder, SourceFieldBuilder fieldBuilder) {
|
||||
_field..isCovariant = fieldBuilder.isCovariant;
|
||||
String fieldName;
|
||||
if (fieldBuilder.isExtensionMember) {
|
||||
ExtensionBuilder extension = fieldBuilder.parent;
|
||||
fieldName = SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Field, fieldBuilder.name,
|
||||
isExtensionMethod: true, extensionName: extension.name);
|
||||
_field
|
||||
..isStatic = true
|
||||
..isExtensionMember = true;
|
||||
} else {
|
||||
bool isInstanceMember =
|
||||
!fieldBuilder.isStatic && !fieldBuilder.isTopLevel;
|
||||
String className =
|
||||
isInstanceMember ? fieldBuilder.classBuilder.name : null;
|
||||
fieldName = SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Field, fieldBuilder.name,
|
||||
isInstanceMember: isInstanceMember, className: className);
|
||||
_field
|
||||
..isStatic = !isInstanceMember
|
||||
..isExtensionMember = false;
|
||||
}
|
||||
// TODO(johnniwinther): How can the name already have been computed?
|
||||
_field.name ??= new Name(fieldName, libraryBuilder.library);
|
||||
_field.isLate = fieldBuilder.isLate;
|
||||
updatePrivateMemberName(_field, libraryBuilder);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -835,6 +875,7 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
|
||||
AbstractLateFieldEncoding(
|
||||
this.name,
|
||||
FieldNameScheme fieldNameScheme,
|
||||
Uri fileUri,
|
||||
int charOffset,
|
||||
int charEndOffset,
|
||||
|
@ -851,7 +892,8 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
_isSetStrategy = isSetStrategy,
|
||||
_forceIncludeIsSetField =
|
||||
isSetStrategy == late_lowering.IsSetStrategy.forceUseIsSetField {
|
||||
_field = new Field.mutable(null,
|
||||
_field = new Field.mutable(
|
||||
fieldNameScheme.getName(FieldNameType.Field, name, isSynthesized: true),
|
||||
fileUri: fileUri,
|
||||
getterReference: fieldGetterReference,
|
||||
setterReference: fieldSetterReference)
|
||||
|
@ -866,7 +908,9 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
break;
|
||||
case late_lowering.IsSetStrategy.forceUseIsSetField:
|
||||
case late_lowering.IsSetStrategy.useIsSetFieldOrNull:
|
||||
_lateIsSetField = new Field.mutable(null,
|
||||
_lateIsSetField = new Field.mutable(
|
||||
fieldNameScheme.getName(FieldNameType.IsSetField, name,
|
||||
isSynthesized: true),
|
||||
fileUri: fileUri,
|
||||
getterReference: lateIsSetGetterReference,
|
||||
setterReference: lateIsSetSetterReference)
|
||||
|
@ -877,7 +921,8 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
break;
|
||||
}
|
||||
_lateGetter = new Procedure(
|
||||
null,
|
||||
fieldNameScheme.getName(FieldNameType.Getter, name,
|
||||
isSynthesized: true),
|
||||
ProcedureKind.Getter,
|
||||
new FunctionNode(null)
|
||||
..fileOffset = charOffset
|
||||
|
@ -887,7 +932,12 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
..fileOffset = charOffset
|
||||
..fileEndOffset = charEndOffset
|
||||
..isNonNullableByDefault = true;
|
||||
_lateSetter = _createSetter(name, fileUri, charOffset, lateSetterReference,
|
||||
_lateSetter = _createSetter(
|
||||
fieldNameScheme.getName(FieldNameType.Setter, name,
|
||||
isSynthesized: true),
|
||||
fileUri,
|
||||
charOffset,
|
||||
lateSetterReference,
|
||||
isCovariant: isCovariant);
|
||||
}
|
||||
|
||||
|
@ -997,14 +1047,14 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
Expression initializer, bool useNewMethodInvocationEncoding);
|
||||
|
||||
Procedure _createSetter(
|
||||
String name, Uri fileUri, int charOffset, Reference reference,
|
||||
Name name, Uri fileUri, int charOffset, Reference reference,
|
||||
{bool isCovariant}) {
|
||||
assert(isCovariant != null);
|
||||
VariableDeclaration parameter = new VariableDeclaration(null)
|
||||
..isCovariant = isCovariant
|
||||
..fileOffset = fileOffset;
|
||||
return new Procedure(
|
||||
null,
|
||||
name,
|
||||
ProcedureKind.Setter,
|
||||
new FunctionNode(null,
|
||||
positionalParameters: [parameter], returnType: const VoidType())
|
||||
|
@ -1081,12 +1131,8 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
void build(
|
||||
SourceLibraryBuilder libraryBuilder, SourceFieldBuilder fieldBuilder) {
|
||||
bool isInstanceMember;
|
||||
String className;
|
||||
bool isExtensionMember = fieldBuilder.isExtensionMember;
|
||||
String extensionName;
|
||||
if (isExtensionMember) {
|
||||
ExtensionBuilder extension = fieldBuilder.parent;
|
||||
extensionName = extension.name;
|
||||
_field
|
||||
..isStatic = true
|
||||
..isExtensionMember = isExtensionMember;
|
||||
|
@ -1096,59 +1142,24 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
|
|||
_field
|
||||
..isStatic = !isInstanceMember
|
||||
..isExtensionMember = false;
|
||||
if (isInstanceMember) {
|
||||
className = fieldBuilder.classBuilder.name;
|
||||
}
|
||||
}
|
||||
_field.name ??= new Name(
|
||||
SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Field, fieldBuilder.name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: true),
|
||||
libraryBuilder.library);
|
||||
updatePrivateMemberName(_field, libraryBuilder);
|
||||
if (_lateIsSetField != null) {
|
||||
_lateIsSetField
|
||||
..name = new Name(
|
||||
SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.IsSetField, fieldBuilder.name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: true),
|
||||
libraryBuilder.library)
|
||||
..isStatic = !isInstanceMember
|
||||
..isStatic = _field.isStatic
|
||||
..isExtensionMember = isExtensionMember;
|
||||
updatePrivateMemberName(_lateIsSetField, libraryBuilder);
|
||||
}
|
||||
_lateGetter
|
||||
..name = new Name(
|
||||
SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Getter, fieldBuilder.name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: true),
|
||||
libraryBuilder.library)
|
||||
..isStatic = !isInstanceMember
|
||||
..isExtensionMember = isExtensionMember;
|
||||
updatePrivateMemberName(_lateGetter, libraryBuilder);
|
||||
if (_lateSetter != null) {
|
||||
_lateSetter
|
||||
..name = new Name(
|
||||
SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Setter, fieldBuilder.name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: true),
|
||||
libraryBuilder.library)
|
||||
..isStatic = !isInstanceMember
|
||||
..isExtensionMember = isExtensionMember;
|
||||
updatePrivateMemberName(_lateSetter, libraryBuilder);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1248,6 +1259,7 @@ class LateFieldWithoutInitializerEncoding extends AbstractLateFieldEncoding
|
|||
with NonFinalLate, LateWithoutInitializer {
|
||||
LateFieldWithoutInitializerEncoding(
|
||||
String name,
|
||||
FieldNameScheme fieldNameScheme,
|
||||
Uri fileUri,
|
||||
int charOffset,
|
||||
int charEndOffset,
|
||||
|
@ -1261,6 +1273,7 @@ class LateFieldWithoutInitializerEncoding extends AbstractLateFieldEncoding
|
|||
late_lowering.IsSetStrategy isSetStrategy)
|
||||
: super(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -1278,6 +1291,7 @@ class LateFieldWithInitializerEncoding extends AbstractLateFieldEncoding
|
|||
with NonFinalLate {
|
||||
LateFieldWithInitializerEncoding(
|
||||
String name,
|
||||
FieldNameScheme fieldNameScheme,
|
||||
Uri fileUri,
|
||||
int charOffset,
|
||||
int charEndOffset,
|
||||
|
@ -1291,6 +1305,7 @@ class LateFieldWithInitializerEncoding extends AbstractLateFieldEncoding
|
|||
late_lowering.IsSetStrategy isSetStrategy)
|
||||
: super(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -1323,6 +1338,7 @@ class LateFinalFieldWithoutInitializerEncoding extends AbstractLateFieldEncoding
|
|||
with LateWithoutInitializer {
|
||||
LateFinalFieldWithoutInitializerEncoding(
|
||||
String name,
|
||||
FieldNameScheme fieldNameScheme,
|
||||
Uri fileUri,
|
||||
int charOffset,
|
||||
int charEndOffset,
|
||||
|
@ -1336,6 +1352,7 @@ class LateFinalFieldWithoutInitializerEncoding extends AbstractLateFieldEncoding
|
|||
late_lowering.IsSetStrategy isSetStrategy)
|
||||
: super(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -1369,6 +1386,7 @@ class LateFinalFieldWithoutInitializerEncoding extends AbstractLateFieldEncoding
|
|||
class LateFinalFieldWithInitializerEncoding extends AbstractLateFieldEncoding {
|
||||
LateFinalFieldWithInitializerEncoding(
|
||||
String name,
|
||||
FieldNameScheme fieldNameScheme,
|
||||
Uri fileUri,
|
||||
int charOffset,
|
||||
int charEndOffset,
|
||||
|
@ -1382,6 +1400,7 @@ class LateFinalFieldWithInitializerEncoding extends AbstractLateFieldEncoding {
|
|||
late_lowering.IsSetStrategy isSetStrategy)
|
||||
: super(
|
||||
name,
|
||||
fieldNameScheme,
|
||||
fileUri,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
|
@ -1411,7 +1430,7 @@ class LateFinalFieldWithInitializerEncoding extends AbstractLateFieldEncoding {
|
|||
|
||||
@override
|
||||
Procedure _createSetter(
|
||||
String name, Uri fileUri, int charOffset, Reference reference,
|
||||
Name name, Uri fileUri, int charOffset, Reference reference,
|
||||
{bool isCovariant}) =>
|
||||
null;
|
||||
|
||||
|
@ -1570,8 +1589,14 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
|
|||
Procedure _getter;
|
||||
Procedure _setter;
|
||||
|
||||
AbstractOrExternalFieldEncoding(Uri fileUri, int charOffset,
|
||||
int charEndOffset, Reference getterReference, Reference setterReference,
|
||||
AbstractOrExternalFieldEncoding(
|
||||
String name,
|
||||
FieldNameScheme fieldNameScheme,
|
||||
Uri fileUri,
|
||||
int charOffset,
|
||||
int charEndOffset,
|
||||
Reference getterReference,
|
||||
Reference setterReference,
|
||||
{this.isAbstract,
|
||||
this.isExternal,
|
||||
bool isFinal,
|
||||
|
@ -1582,8 +1607,13 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
|
|||
assert(isFinal != null),
|
||||
assert(isCovariant != null),
|
||||
assert(isNonNullableByDefault != null) {
|
||||
_getter = new Procedure(null, ProcedureKind.Getter, new FunctionNode(null),
|
||||
fileUri: fileUri, reference: getterReference)
|
||||
_getter = new Procedure(
|
||||
fieldNameScheme.getName(FieldNameType.Getter, name,
|
||||
isSynthesized: true),
|
||||
ProcedureKind.Getter,
|
||||
new FunctionNode(null),
|
||||
fileUri: fileUri,
|
||||
reference: getterReference)
|
||||
..fileOffset = charOffset
|
||||
..fileEndOffset = charEndOffset
|
||||
..isNonNullableByDefault = isNonNullableByDefault;
|
||||
|
@ -1593,7 +1623,8 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
|
|||
..isCovariant = isCovariant
|
||||
..fileOffset = charOffset;
|
||||
_setter = new Procedure(
|
||||
null,
|
||||
fieldNameScheme.getName(FieldNameType.Setter, name,
|
||||
isSynthesized: true),
|
||||
ProcedureKind.Setter,
|
||||
new FunctionNode(null,
|
||||
positionalParameters: [parameter], returnType: const VoidType())
|
||||
|
@ -1636,51 +1667,25 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
|
|||
@override
|
||||
void build(
|
||||
SourceLibraryBuilder libraryBuilder, SourceFieldBuilder fieldBuilder) {
|
||||
bool isExtensionMember = false;
|
||||
String extensionName;
|
||||
bool isInstanceMember = false;
|
||||
String className;
|
||||
if (fieldBuilder.isExtensionMember) {
|
||||
isExtensionMember = true;
|
||||
ExtensionBuilder extension = fieldBuilder.parent;
|
||||
extensionName = extension.name;
|
||||
} else {
|
||||
isInstanceMember = !fieldBuilder.isStatic && !fieldBuilder.isTopLevel;
|
||||
className = isInstanceMember ? fieldBuilder.classBuilder.name : null;
|
||||
}
|
||||
bool isExtensionMember = fieldBuilder.isExtensionMember;
|
||||
bool isInstanceMember = !fieldBuilder.isExtensionMember &&
|
||||
!fieldBuilder.isStatic &&
|
||||
!fieldBuilder.isTopLevel;
|
||||
_getter..isConst = fieldBuilder.isConst;
|
||||
String getterName = SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Getter, fieldBuilder.name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: true);
|
||||
_getter
|
||||
..isStatic = !isInstanceMember
|
||||
..isExtensionMember = isExtensionMember
|
||||
..isAbstract = isAbstract && !isExternal
|
||||
..isExternal = isExternal;
|
||||
// TODO(johnniwinther): How can the name already have been computed?
|
||||
_getter.name ??= new Name(getterName, libraryBuilder.library);
|
||||
updatePrivateMemberName(_getter, libraryBuilder);
|
||||
|
||||
if (_setter != null) {
|
||||
String setterName = SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Setter,
|
||||
fieldBuilder.name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: true,
|
||||
);
|
||||
_setter
|
||||
..isStatic = !isInstanceMember
|
||||
..isExtensionMember = isExtensionMember
|
||||
..isAbstract = isAbstract && !isExternal
|
||||
..isExternal = isExternal;
|
||||
// TODO(johnniwinther): How can the name already have been computed?
|
||||
_setter?.name ??= new Name(setterName, libraryBuilder.library);
|
||||
updatePrivateMemberName(_setter, libraryBuilder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -297,3 +297,13 @@ abstract class BuilderClassMember implements ClassMember {
|
|||
@override
|
||||
String toString() => '$runtimeType($fullName,forSetter=${forSetter})';
|
||||
}
|
||||
|
||||
/// If the name of [member] is private, update it to use the library reference
|
||||
/// of [libraryBuilder].
|
||||
// TODO(johnniwinther): Avoid having to update private names by setting
|
||||
// the correct library reference when creating parts.
|
||||
void updatePrivateMemberName(Member member, LibraryBuilder libraryBuilder) {
|
||||
if (member.name.isPrivate) {
|
||||
member.name = new Name(member.name.text, libraryBuilder.library);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ abstract class ProcedureBuilder implements FunctionBuilder {
|
|||
|
||||
abstract class ProcedureBuilderImpl extends FunctionBuilderImpl
|
||||
implements ProcedureBuilder {
|
||||
final Procedure _procedure;
|
||||
Procedure _procedure;
|
||||
|
||||
@override
|
||||
final int charOpenParenOffset;
|
||||
|
@ -92,23 +92,29 @@ abstract class ProcedureBuilderImpl extends FunctionBuilderImpl
|
|||
List<TypeVariableBuilder> typeVariables,
|
||||
List<FormalParameterBuilder> formals,
|
||||
this.kind,
|
||||
SourceLibraryBuilder compilationUnit,
|
||||
SourceLibraryBuilder libraryBuilder,
|
||||
int startCharOffset,
|
||||
int charOffset,
|
||||
this.charOpenParenOffset,
|
||||
int charEndOffset,
|
||||
Reference procedureReference,
|
||||
this.isExtensionInstanceMember,
|
||||
[String nativeMethodName])
|
||||
: _procedure = new Procedure(
|
||||
null, isExtensionInstanceMember ? ProcedureKind.Method : kind, null,
|
||||
fileUri: compilationUnit.fileUri, reference: procedureReference)
|
||||
ProcedureNameScheme procedureNameScheme,
|
||||
{bool isExtensionMember,
|
||||
bool isInstanceMember,
|
||||
String nativeMethodName})
|
||||
: assert(isExtensionMember != null),
|
||||
assert(isInstanceMember != null),
|
||||
this.isExtensionInstanceMember = isInstanceMember && isExtensionMember,
|
||||
super(metadata, modifiers, returnType, name, typeVariables, formals,
|
||||
libraryBuilder, charOffset, nativeMethodName) {
|
||||
_procedure = new Procedure(procedureNameScheme.getName(kind, name),
|
||||
isExtensionInstanceMember ? ProcedureKind.Method : kind, null,
|
||||
fileUri: libraryBuilder.fileUri, reference: procedureReference)
|
||||
..startFileOffset = startCharOffset
|
||||
..fileOffset = charOffset
|
||||
..fileEndOffset = charEndOffset
|
||||
..isNonNullableByDefault = compilationUnit.isNonNullableByDefault,
|
||||
super(metadata, modifiers, returnType, name, typeVariables, formals,
|
||||
compilationUnit, charOffset, nativeMethodName);
|
||||
..isNonNullableByDefault = libraryBuilder.isNonNullableByDefault;
|
||||
}
|
||||
|
||||
@override
|
||||
ProcedureBuilder get origin => actualOrigin ?? this;
|
||||
|
@ -225,7 +231,7 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
List<TypeVariableBuilder> typeVariables,
|
||||
List<FormalParameterBuilder> formals,
|
||||
ProcedureKind kind,
|
||||
SourceLibraryBuilder compilationUnit,
|
||||
SourceLibraryBuilder libraryBuilder,
|
||||
int startCharOffset,
|
||||
int charOffset,
|
||||
int charOpenParenOffset,
|
||||
|
@ -233,8 +239,10 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
Reference procedureReference,
|
||||
this._tearOffReference,
|
||||
AsyncMarker asyncModifier,
|
||||
bool isExtensionInstanceMember,
|
||||
[String nativeMethodName])
|
||||
ProcedureNameScheme procedureNameScheme,
|
||||
{bool isExtensionMember,
|
||||
bool isInstanceMember,
|
||||
String nativeMethodName})
|
||||
: super(
|
||||
metadata,
|
||||
modifiers,
|
||||
|
@ -243,15 +251,27 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
typeVariables,
|
||||
formals,
|
||||
kind,
|
||||
compilationUnit,
|
||||
libraryBuilder,
|
||||
startCharOffset,
|
||||
charOffset,
|
||||
charOpenParenOffset,
|
||||
charEndOffset,
|
||||
procedureReference,
|
||||
isExtensionInstanceMember,
|
||||
nativeMethodName) {
|
||||
procedureNameScheme,
|
||||
isExtensionMember: isExtensionMember,
|
||||
isInstanceMember: isInstanceMember,
|
||||
nativeMethodName: nativeMethodName) {
|
||||
this.asyncModifier = asyncModifier;
|
||||
if (isExtensionMember && isInstanceMember && kind == ProcedureKind.Method) {
|
||||
_extensionTearOff ??= new Procedure(
|
||||
procedureNameScheme.getName(ProcedureKind.Getter, name),
|
||||
ProcedureKind.Method,
|
||||
null,
|
||||
isStatic: true,
|
||||
isExtensionMember: true,
|
||||
reference: _tearOffReference)
|
||||
..isNonNullableByDefault = library.isNonNullableByDefault;
|
||||
}
|
||||
}
|
||||
|
||||
bool _typeEnsured = false;
|
||||
|
@ -359,8 +379,6 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
|
||||
@override
|
||||
Procedure build(SourceLibraryBuilder libraryBuilder) {
|
||||
// TODO(ahe): I think we may call this twice on parts. Investigate.
|
||||
if (_procedure.name == null) {
|
||||
_procedure.function = buildFunction(libraryBuilder);
|
||||
_procedure.function.parent = _procedure;
|
||||
_procedure.function.fileOffset = charOpenParenOffset;
|
||||
|
@ -368,24 +386,19 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
_procedure.isAbstract = isAbstract;
|
||||
_procedure.isExternal = isExternal;
|
||||
_procedure.isConst = isConst;
|
||||
updatePrivateMemberName(_procedure, libraryBuilder);
|
||||
if (isExtensionMethod) {
|
||||
ExtensionBuilder extensionBuilder = parent;
|
||||
_procedure.isExtensionMember = true;
|
||||
_procedure.isStatic = true;
|
||||
if (isExtensionInstanceMember) {
|
||||
assert(_procedure.kind == ProcedureKind.Method);
|
||||
}
|
||||
_procedure.name = new Name(
|
||||
createProcedureName(true, !isExtensionInstanceMember, kind,
|
||||
extensionBuilder.name, name),
|
||||
libraryBuilder.library);
|
||||
} else {
|
||||
_procedure.isStatic = isStatic;
|
||||
_procedure.name = new Name(name, libraryBuilder.library);
|
||||
}
|
||||
if (extensionTearOff != null) {
|
||||
_buildExtensionTearOff(libraryBuilder, parent);
|
||||
}
|
||||
updatePrivateMemberName(extensionTearOff, libraryBuilder);
|
||||
}
|
||||
return _procedure;
|
||||
}
|
||||
|
@ -442,7 +455,6 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
SourceLibraryBuilder libraryBuilder, ExtensionBuilder extensionBuilder) {
|
||||
assert(
|
||||
_extensionTearOff != null, "No extension tear off created for $this.");
|
||||
if (_extensionTearOff.name != null) return;
|
||||
|
||||
_extensionTearOffParameterMap = {};
|
||||
|
||||
|
@ -550,8 +562,6 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
..fileOffset = fileOffset;
|
||||
|
||||
_extensionTearOff
|
||||
..name = new Name(
|
||||
'${extensionBuilder.name}|get#${name}', libraryBuilder.library)
|
||||
..function = (new FunctionNode(
|
||||
new ReturnStatement(closure)..fileOffset = fileOffset,
|
||||
typeParameters: tearOffTypeParameters,
|
||||
|
@ -566,14 +576,7 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
|
|||
_extensionTearOff.function.parent = _extensionTearOff;
|
||||
}
|
||||
|
||||
Procedure get extensionTearOff {
|
||||
if (isExtensionInstanceMember && kind == ProcedureKind.Method) {
|
||||
_extensionTearOff ??= new Procedure(null, ProcedureKind.Method, null,
|
||||
isStatic: true, isExtensionMember: true, reference: _tearOffReference)
|
||||
..isNonNullableByDefault = library.isNonNullableByDefault;
|
||||
}
|
||||
return _extensionTearOff;
|
||||
}
|
||||
Procedure get extensionTearOff => _extensionTearOff;
|
||||
|
||||
@override
|
||||
VariableDeclaration getExtensionTearOffParameter(int index) {
|
||||
|
@ -663,6 +666,7 @@ class RedirectingFactoryBuilder extends ProcedureBuilderImpl {
|
|||
int charOpenParenOffset,
|
||||
int charEndOffset,
|
||||
Reference reference,
|
||||
ProcedureNameScheme procedureNameScheme,
|
||||
[String nativeMethodName,
|
||||
this.redirectionTarget])
|
||||
: super(
|
||||
|
@ -679,8 +683,10 @@ class RedirectingFactoryBuilder extends ProcedureBuilderImpl {
|
|||
charOpenParenOffset,
|
||||
charEndOffset,
|
||||
reference,
|
||||
/* isExtensionInstanceMember = */ false,
|
||||
nativeMethodName);
|
||||
procedureNameScheme,
|
||||
isExtensionMember: false,
|
||||
isInstanceMember: false,
|
||||
nativeMethodName: nativeMethodName);
|
||||
|
||||
@override
|
||||
Member get readTarget => null;
|
||||
|
@ -741,8 +747,6 @@ class RedirectingFactoryBuilder extends ProcedureBuilderImpl {
|
|||
|
||||
@override
|
||||
Procedure build(SourceLibraryBuilder libraryBuilder) {
|
||||
// TODO(ahe): I think we may call this twice on parts. Investigate.
|
||||
if (_procedure.name == null) {
|
||||
_procedure.function = buildFunction(libraryBuilder);
|
||||
_procedure.function.parent = _procedure;
|
||||
_procedure.function.fileOffset = charOpenParenOffset;
|
||||
|
@ -751,8 +755,6 @@ class RedirectingFactoryBuilder extends ProcedureBuilderImpl {
|
|||
_procedure.isExternal = isExternal;
|
||||
_procedure.isConst = isConst;
|
||||
_procedure.isStatic = isStatic;
|
||||
_procedure.name = new Name(name, libraryBuilder.library);
|
||||
}
|
||||
_procedure.isRedirectingFactoryConstructor = true;
|
||||
if (redirectionTarget.typeArguments != null) {
|
||||
typeArguments = new List<DartType>.filled(
|
||||
|
@ -761,6 +763,7 @@ class RedirectingFactoryBuilder extends ProcedureBuilderImpl {
|
|||
typeArguments[i] = redirectionTarget.typeArguments[i].build(library);
|
||||
}
|
||||
}
|
||||
updatePrivateMemberName(_procedure, libraryBuilder);
|
||||
return _procedure;
|
||||
}
|
||||
|
||||
|
@ -863,3 +866,28 @@ class RedirectingFactoryBuilder extends ProcedureBuilderImpl {
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
class ProcedureNameScheme {
|
||||
final bool isExtensionMember;
|
||||
final bool isStatic;
|
||||
final String extensionName;
|
||||
final Reference libraryReference;
|
||||
|
||||
ProcedureNameScheme(
|
||||
{this.isExtensionMember,
|
||||
this.isStatic,
|
||||
this.extensionName,
|
||||
this.libraryReference})
|
||||
: assert(isExtensionMember != null),
|
||||
assert(isStatic != null),
|
||||
assert(!isExtensionMember || extensionName != null),
|
||||
assert(libraryReference != null);
|
||||
|
||||
Name getName(ProcedureKind kind, String name) {
|
||||
assert(kind != null);
|
||||
return new Name.byReference(
|
||||
SourceProcedureBuilder.createProcedureName(
|
||||
isExtensionMember, isStatic, kind, extensionName, name),
|
||||
libraryReference);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -859,8 +859,8 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
endToken.charOffset,
|
||||
nativeMethodName,
|
||||
asyncModifier,
|
||||
isTopLevel: true,
|
||||
isExtensionInstanceMember: false);
|
||||
isInstanceMember: false,
|
||||
isExtensionMember: false);
|
||||
nativeMethodName = null;
|
||||
}
|
||||
|
||||
|
@ -1211,6 +1211,7 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
}
|
||||
final int startCharOffset =
|
||||
metadata == null ? beginToken.charOffset : metadata.first.charOffset;
|
||||
bool isExtensionMember = methodKind == _MethodKind.extensionMethod;
|
||||
libraryBuilder.addProcedure(
|
||||
metadata,
|
||||
modifiers,
|
||||
|
@ -1225,9 +1226,8 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
endToken.charOffset,
|
||||
nativeMethodName,
|
||||
asyncModifier,
|
||||
isTopLevel: false,
|
||||
isExtensionInstanceMember:
|
||||
methodKind == _MethodKind.extensionMethod && !isStatic);
|
||||
isInstanceMember: !isStatic,
|
||||
isExtensionMember: isExtensionMember);
|
||||
}
|
||||
nativeMethodName = null;
|
||||
inConstructor = false;
|
||||
|
|
|
@ -2152,17 +2152,17 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
hasInitializer: hasInitializer,
|
||||
isFinal: (modifiers & finalMask) != 0,
|
||||
isStatic: isTopLevel || (modifiers & staticMask) != 0);
|
||||
final bool isInstanceMember = currentTypeParameterScopeBuilder.kind ==
|
||||
TypeParameterScopeKind.classDeclaration &&
|
||||
final bool isInstanceMember = currentTypeParameterScopeBuilder.kind !=
|
||||
TypeParameterScopeKind.library &&
|
||||
(modifiers & staticMask) == 0;
|
||||
String className;
|
||||
if (isInstanceMember) {
|
||||
className = currentTypeParameterScopeBuilder.name;
|
||||
}
|
||||
final bool isExtension = currentTypeParameterScopeBuilder.kind ==
|
||||
final bool isExtensionMember = currentTypeParameterScopeBuilder.kind ==
|
||||
TypeParameterScopeKind.extensionDeclaration;
|
||||
String extensionName;
|
||||
if (isExtension) {
|
||||
if (isExtensionMember) {
|
||||
extensionName = currentTypeParameterScopeBuilder.name;
|
||||
}
|
||||
|
||||
|
@ -2172,56 +2172,50 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
Reference lateIsSetSetterReference;
|
||||
Reference lateGetterReference;
|
||||
Reference lateSetterReference;
|
||||
if (referencesFrom != null) {
|
||||
String nameToLookup = SourceFieldBuilder.createFieldName(
|
||||
FieldNameType.Field, name,
|
||||
|
||||
FieldNameScheme fieldNameScheme = new FieldNameScheme(
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtension,
|
||||
isExtensionMember: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: fieldIsLateWithLowering);
|
||||
libraryReference: referencesFrom?.reference ?? library.reference);
|
||||
if (referencesFrom != null) {
|
||||
IndexedContainer indexedContainer =
|
||||
_currentClassReferencesFromIndexed ?? referencesFromIndexed;
|
||||
Name nameToLookupName = new Name(nameToLookup, indexedContainer.library);
|
||||
Name nameToLookupName = fieldNameScheme.getName(FieldNameType.Field, name,
|
||||
isSynthesized: fieldIsLateWithLowering);
|
||||
fieldGetterReference =
|
||||
indexedContainer.lookupGetterReference(nameToLookupName);
|
||||
fieldSetterReference =
|
||||
indexedContainer.lookupSetterReference(nameToLookupName);
|
||||
if (fieldIsLateWithLowering) {
|
||||
String lateIsSetName = SourceFieldBuilder.createFieldName(
|
||||
Name lateIsSetNameName = fieldNameScheme.getName(
|
||||
FieldNameType.IsSetField, name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtension,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: fieldIsLateWithLowering);
|
||||
Name lateIsSetNameName =
|
||||
new Name(lateIsSetName, indexedContainer.library);
|
||||
lateIsSetGetterReference =
|
||||
indexedContainer.lookupGetterReference(lateIsSetNameName);
|
||||
lateIsSetSetterReference =
|
||||
indexedContainer.lookupSetterReference(lateIsSetNameName);
|
||||
lateGetterReference = indexedContainer.lookupGetterReference(new Name(
|
||||
SourceFieldBuilder.createFieldName(FieldNameType.Getter, name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtension,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: fieldIsLateWithLowering),
|
||||
indexedContainer.library));
|
||||
lateSetterReference = indexedContainer.lookupSetterReference(new Name(
|
||||
SourceFieldBuilder.createFieldName(FieldNameType.Setter, name,
|
||||
isInstanceMember: isInstanceMember,
|
||||
className: className,
|
||||
isExtensionMethod: isExtension,
|
||||
extensionName: extensionName,
|
||||
isSynthesized: fieldIsLateWithLowering),
|
||||
indexedContainer.library));
|
||||
lateGetterReference = indexedContainer.lookupGetterReference(
|
||||
fieldNameScheme.getName(FieldNameType.Getter, name,
|
||||
isSynthesized: fieldIsLateWithLowering));
|
||||
lateSetterReference = indexedContainer.lookupSetterReference(
|
||||
fieldNameScheme.getName(FieldNameType.Setter, name,
|
||||
isSynthesized: fieldIsLateWithLowering));
|
||||
}
|
||||
}
|
||||
|
||||
SourceFieldBuilder fieldBuilder = new SourceFieldBuilder(metadata, type,
|
||||
name, modifiers, isTopLevel, this, charOffset, charEndOffset,
|
||||
SourceFieldBuilder fieldBuilder = new SourceFieldBuilder(
|
||||
metadata,
|
||||
type,
|
||||
name,
|
||||
modifiers,
|
||||
isTopLevel,
|
||||
this,
|
||||
charOffset,
|
||||
charEndOffset,
|
||||
fieldNameScheme,
|
||||
isInstanceMember: isInstanceMember,
|
||||
fieldGetterReference: fieldGetterReference,
|
||||
fieldSetterReference: fieldSetterReference,
|
||||
lateIsSetGetterReference: lateIsSetGetterReference,
|
||||
|
@ -2312,10 +2306,20 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
int charEndOffset,
|
||||
String nativeMethodName,
|
||||
AsyncMarker asyncModifier,
|
||||
{bool isTopLevel,
|
||||
bool isExtensionInstanceMember}) {
|
||||
assert(isTopLevel != null);
|
||||
assert(isExtensionInstanceMember != null);
|
||||
{bool isInstanceMember,
|
||||
bool isExtensionMember}) {
|
||||
assert(isInstanceMember != null);
|
||||
assert(isExtensionMember != null);
|
||||
assert(!isExtensionMember ||
|
||||
currentTypeParameterScopeBuilder.kind ==
|
||||
TypeParameterScopeKind.extensionDeclaration);
|
||||
String extensionName =
|
||||
isExtensionMember ? currentTypeParameterScopeBuilder.name : null;
|
||||
ProcedureNameScheme procedureNameScheme = new ProcedureNameScheme(
|
||||
isExtensionMember: isExtensionMember,
|
||||
extensionName: extensionName,
|
||||
isStatic: !isInstanceMember,
|
||||
libraryReference: referencesFrom?.reference ?? library.reference);
|
||||
|
||||
if (returnType == null) {
|
||||
if (kind == ProcedureKind.Operator &&
|
||||
|
@ -2328,52 +2332,28 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
Reference procedureReference;
|
||||
Reference tearOffReference;
|
||||
if (referencesFrom != null) {
|
||||
Name nameToLookup = procedureNameScheme.getName(kind, name);
|
||||
if (_currentClassReferencesFromIndexed != null) {
|
||||
if (kind == ProcedureKind.Setter) {
|
||||
procedureReference =
|
||||
_currentClassReferencesFromIndexed.lookupSetterReference(
|
||||
new Name(name, _currentClassReferencesFromIndexed.library));
|
||||
procedureReference = _currentClassReferencesFromIndexed
|
||||
.lookupSetterReference(nameToLookup);
|
||||
} else {
|
||||
procedureReference =
|
||||
_currentClassReferencesFromIndexed.lookupGetterReference(
|
||||
new Name(name, _currentClassReferencesFromIndexed.library));
|
||||
procedureReference = _currentClassReferencesFromIndexed
|
||||
.lookupGetterReference(nameToLookup);
|
||||
}
|
||||
} else {
|
||||
if (currentTypeParameterScopeBuilder.kind ==
|
||||
TypeParameterScopeKind.extensionDeclaration) {
|
||||
bool extensionIsStatic = (modifiers & staticMask) != 0;
|
||||
String nameToLookup = SourceProcedureBuilder.createProcedureName(
|
||||
true,
|
||||
extensionIsStatic,
|
||||
kind,
|
||||
currentTypeParameterScopeBuilder.name,
|
||||
name);
|
||||
if (extensionIsStatic && kind == ProcedureKind.Setter) {
|
||||
procedureReference = referencesFromIndexed.lookupSetterReference(
|
||||
new Name(nameToLookup, referencesFromIndexed.library));
|
||||
if (kind == ProcedureKind.Setter &&
|
||||
// Extension instance setters are encoded as methods.
|
||||
!(isExtensionMember && isInstanceMember)) {
|
||||
procedureReference =
|
||||
referencesFromIndexed.lookupSetterReference(nameToLookup);
|
||||
} else {
|
||||
procedureReference = referencesFromIndexed.lookupGetterReference(
|
||||
new Name(nameToLookup, referencesFromIndexed.library));
|
||||
procedureReference =
|
||||
referencesFromIndexed.lookupGetterReference(nameToLookup);
|
||||
}
|
||||
if (kind == ProcedureKind.Method) {
|
||||
String tearOffNameToLookup =
|
||||
SourceProcedureBuilder.createProcedureName(
|
||||
true,
|
||||
false,
|
||||
ProcedureKind.Getter,
|
||||
currentTypeParameterScopeBuilder.name,
|
||||
name);
|
||||
if (isExtensionMember && kind == ProcedureKind.Method) {
|
||||
tearOffReference = referencesFromIndexed.lookupGetterReference(
|
||||
new Name(tearOffNameToLookup, referencesFromIndexed.library));
|
||||
}
|
||||
} else {
|
||||
if (kind == ProcedureKind.Setter) {
|
||||
procedureReference = referencesFromIndexed.lookupSetterReference(
|
||||
new Name(name, referencesFromIndexed.library));
|
||||
} else {
|
||||
procedureReference = referencesFromIndexed.lookupGetterReference(
|
||||
new Name(name, referencesFromIndexed.library));
|
||||
}
|
||||
procedureNameScheme.getName(ProcedureKind.Getter, name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2393,8 +2373,10 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
procedureReference,
|
||||
tearOffReference,
|
||||
asyncModifier,
|
||||
isExtensionInstanceMember,
|
||||
nativeMethodName);
|
||||
procedureNameScheme,
|
||||
isExtensionMember: isExtensionMember,
|
||||
isInstanceMember: isInstanceMember,
|
||||
nativeMethodName: nativeMethodName);
|
||||
checkTypeVariables(typeVariables, procedureBuilder);
|
||||
addBuilder(name, procedureBuilder, charOffset,
|
||||
getterReference: procedureReference);
|
||||
|
@ -2434,6 +2416,16 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
procedureName = name;
|
||||
}
|
||||
|
||||
ProcedureNameScheme procedureNameScheme = new ProcedureNameScheme(
|
||||
isExtensionMember: false,
|
||||
extensionName: null,
|
||||
isStatic: true,
|
||||
libraryReference: referencesFrom != null
|
||||
? (_currentClassReferencesFromIndexed ?? referencesFromIndexed)
|
||||
.library
|
||||
.reference
|
||||
: library.reference);
|
||||
|
||||
Reference reference = _currentClassReferencesFromIndexed
|
||||
?.lookupConstructor(
|
||||
new Name(procedureName, _currentClassReferencesFromIndexed.library))
|
||||
|
@ -2457,6 +2449,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
charOpenParenOffset,
|
||||
charEndOffset,
|
||||
reference,
|
||||
procedureNameScheme,
|
||||
nativeMethodName,
|
||||
redirectionTarget);
|
||||
} else {
|
||||
|
@ -2479,8 +2472,10 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
reference,
|
||||
null,
|
||||
asyncModifier,
|
||||
/* isExtensionInstanceMember = */ false,
|
||||
nativeMethodName);
|
||||
procedureNameScheme,
|
||||
isExtensionMember: false,
|
||||
isInstanceMember: false,
|
||||
nativeMethodName: nativeMethodName);
|
||||
}
|
||||
|
||||
TypeParameterScopeBuilder savedDeclaration =
|
||||
|
|
|
@ -494,15 +494,15 @@ class SourceLoader extends Loader {
|
|||
|
||||
// TODO(johnniwinther,jensj): Handle expression in extensions?
|
||||
Future<Expression> buildExpression(
|
||||
SourceLibraryBuilder library,
|
||||
SourceLibraryBuilder libraryBuilder,
|
||||
String enclosingClass,
|
||||
bool isClassInstanceMember,
|
||||
FunctionNode parameters) async {
|
||||
Token token = await tokenize(library, suppressLexicalErrors: false);
|
||||
Token token = await tokenize(libraryBuilder, suppressLexicalErrors: false);
|
||||
if (token == null) return null;
|
||||
DietListener dietListener = createDietListener(library);
|
||||
DietListener dietListener = createDietListener(libraryBuilder);
|
||||
|
||||
Builder parent = library;
|
||||
Builder parent = libraryBuilder;
|
||||
if (enclosingClass != null) {
|
||||
Builder cls = dietListener.memberScope.lookup(enclosingClass, -1, null);
|
||||
if (cls is ClassBuilder) {
|
||||
|
@ -522,7 +522,7 @@ class SourceLoader extends Loader {
|
|||
null,
|
||||
null,
|
||||
ProcedureKind.Method,
|
||||
library,
|
||||
libraryBuilder,
|
||||
0,
|
||||
0,
|
||||
-1,
|
||||
|
@ -530,7 +530,12 @@ class SourceLoader extends Loader {
|
|||
null,
|
||||
null,
|
||||
AsyncMarker.Sync,
|
||||
/* isExtensionInstanceMember = */ false)
|
||||
new ProcedureNameScheme(
|
||||
isExtensionMember: false,
|
||||
isStatic: true,
|
||||
libraryReference: libraryBuilder.library.reference),
|
||||
isInstanceMember: false,
|
||||
isExtensionMember: false)
|
||||
..parent = parent;
|
||||
BodyBuilder listener = dietListener.createListener(
|
||||
builder, dietListener.memberScope,
|
||||
|
|
|
@ -91,8 +91,8 @@ main() {
|
|||
'types:1)',
|
||||
covariance.toString());
|
||||
|
||||
Procedure noParameterProcedure =
|
||||
new Procedure(null, ProcedureKind.Method, new FunctionNode(null));
|
||||
Procedure noParameterProcedure = new Procedure(
|
||||
new Name('foo'), ProcedureKind.Method, new FunctionNode(null));
|
||||
Covariance noParameterProcedureCovariance =
|
||||
new Covariance.fromMember(noParameterProcedure, forSetter: false);
|
||||
Expect.isTrue(noParameterProcedureCovariance.isEmpty);
|
||||
|
@ -103,7 +103,7 @@ main() {
|
|||
Expect.isTrue(noParameterProcedureCovariance.isEmpty);
|
||||
|
||||
Procedure oneParameterProcedure = new Procedure(
|
||||
null,
|
||||
new Name('foo'),
|
||||
ProcedureKind.Method,
|
||||
new FunctionNode(null,
|
||||
positionalParameters: [new VariableDeclaration(null)]));
|
||||
|
@ -119,7 +119,7 @@ main() {
|
|||
oneParameterProcedureCovariance);
|
||||
|
||||
Procedure positionalParametersProcedure = new Procedure(
|
||||
null,
|
||||
new Name('foo'),
|
||||
ProcedureKind.Method,
|
||||
new FunctionNode(null, positionalParameters: [
|
||||
new VariableDeclaration(null),
|
||||
|
@ -148,7 +148,7 @@ main() {
|
|||
positionalParametersProcedureCovariance);
|
||||
|
||||
Procedure namedParametersProcedure = new Procedure(
|
||||
null,
|
||||
new Name('foo'),
|
||||
ProcedureKind.Method,
|
||||
new FunctionNode(null, namedParameters: [
|
||||
new VariableDeclaration('a'),
|
||||
|
@ -177,7 +177,7 @@ main() {
|
|||
namedParametersProcedureCovariance);
|
||||
|
||||
Procedure typeParametersProcedure = new Procedure(
|
||||
null,
|
||||
new Name('foo'),
|
||||
ProcedureKind.Method,
|
||||
new FunctionNode(null, typeParameters: [
|
||||
new TypeParameter(null),
|
||||
|
|
23
pkg/front_end/testcases/general/private_members.dart
Normal file
23
pkg/front_end/testcases/general/private_members.dart
Normal file
|
@ -0,0 +1,23 @@
|
|||
// 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.
|
||||
|
||||
part 'private_members_part.dart';
|
||||
|
||||
test(_AbstractClass c) {
|
||||
c._privateAbstractField = c._privateAbstractField;
|
||||
}
|
||||
|
||||
main() {
|
||||
_Class c = new _Class._privateConstructor();
|
||||
c = new _Class._privateRedirectingFactory();
|
||||
c._privateMethod();
|
||||
c._privateSetter = c._privateGetter;
|
||||
c._privateField = c._privateField;
|
||||
c._privateFinalField;
|
||||
0._privateMethod();
|
||||
(0._privateMethod)();
|
||||
0._privateSetter = 0._privateGetter;
|
||||
_Extension._privateField = _Extension._privateField;
|
||||
_Extension._privateFinalField;
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
part 'private_members_part.dart';
|
||||
|
||||
test(_AbstractClass c) {}
|
||||
main() {}
|
|
@ -0,0 +1,4 @@
|
|||
part 'private_members_part.dart';
|
||||
|
||||
main() {}
|
||||
test(_AbstractClass c) {}
|
|
@ -0,0 +1,58 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
abstract class _AbstractClass extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
synthetic constructor •() → self::_AbstractClass
|
||||
: super core::Object::•()
|
||||
;
|
||||
abstract get _privateAbstractField() → core::int;
|
||||
abstract set _privateAbstractField(core::int #externalFieldValue) → void;
|
||||
}
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int _privateField = 1;
|
||||
field core::int _privateFinalField = 1;
|
||||
static final field dynamic _redirecting# = <dynamic>[self::_Class::_privateRedirectingFactory]/*isLegacy*/;
|
||||
constructor _privateConstructor() → self::_Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
static factory _privateRedirectingFactory() → self::_Class
|
||||
let dynamic #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
|
||||
method _privateMethod() → void {}
|
||||
get _privateGetter() → core::int
|
||||
return 42;
|
||||
set _privateSetter(core::int value) → void {}
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
method _privateMethod = self::_Extension|_privateMethod;
|
||||
tearoff _privateMethod = self::_Extension|get#_privateMethod;
|
||||
get _privateGetter = self::_Extension|get#_privateGetter;
|
||||
static field _privateField = self::_Extension|_privateField;
|
||||
static field _privateFinalField = self::_Extension|_privateFinalField;
|
||||
set _privateSetter = self::_Extension|set#_privateSetter;
|
||||
}
|
||||
static field core::int _Extension|_privateField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int _Extension|_privateFinalField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method test(self::_AbstractClass c) → dynamic {
|
||||
c.{self::_AbstractClass::_privateAbstractField} = c.{self::_AbstractClass::_privateAbstractField};
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::_Class c = new self::_Class::_privateConstructor();
|
||||
c = new self::_Class::_privateConstructor();
|
||||
c.{self::_Class::_privateMethod}();
|
||||
c.{self::_Class::_privateSetter} = c.{self::_Class::_privateGetter};
|
||||
c.{self::_Class::_privateField} = c.{self::_Class::_privateField};
|
||||
c.{self::_Class::_privateFinalField};
|
||||
self::_Extension|_privateMethod(0);
|
||||
self::_Extension|get#_privateMethod(0).call();
|
||||
self::_Extension|set#_privateSetter(0, self::_Extension|get#_privateGetter(0));
|
||||
self::_Extension|_privateField = self::_Extension|_privateField;
|
||||
self::_Extension|_privateFinalField;
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateMethod(lowered final core::int #this) → void {}
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateMethod(lowered final core::int #this) → () → void
|
||||
return () → void => self::_Extension|_privateMethod(#this);
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
|
||||
return 42;
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void {}
|
|
@ -0,0 +1,48 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
abstract class _AbstractClass extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
synthetic constructor •() → self::_AbstractClass
|
||||
;
|
||||
abstract get _privateAbstractField() → core::int;
|
||||
abstract set _privateAbstractField(core::int #externalFieldValue) → void;
|
||||
}
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int _privateField;
|
||||
field core::int _privateFinalField;
|
||||
static final field dynamic _redirecting# = <dynamic>[self::_Class::_privateRedirectingFactory]/*isLegacy*/;
|
||||
constructor _privateConstructor() → self::_Class
|
||||
;
|
||||
static factory _privateRedirectingFactory() → self::_Class
|
||||
let dynamic #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
|
||||
method _privateMethod() → void
|
||||
;
|
||||
get _privateGetter() → core::int
|
||||
;
|
||||
set _privateSetter(core::int value) → void
|
||||
;
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
method _privateMethod = self::_Extension|_privateMethod;
|
||||
tearoff _privateMethod = self::_Extension|get#_privateMethod;
|
||||
get _privateGetter = self::_Extension|get#_privateGetter;
|
||||
static field _privateField = self::_Extension|_privateField;
|
||||
static field _privateFinalField = self::_Extension|_privateFinalField;
|
||||
set _privateSetter = self::_Extension|set#_privateSetter;
|
||||
}
|
||||
static field core::int _Extension|_privateField /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int _Extension|_privateFinalField /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method test(self::_AbstractClass c) → dynamic
|
||||
;
|
||||
static method main() → dynamic
|
||||
;
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateMethod(lowered final core::int #this) → void
|
||||
;
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateMethod(lowered final core::int #this) → () → void
|
||||
return () → void => self::_Extension|_privateMethod(#this);
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
|
||||
;
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void
|
||||
;
|
|
@ -0,0 +1,58 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
abstract class _AbstractClass extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
synthetic constructor •() → self::_AbstractClass
|
||||
: super core::Object::•()
|
||||
;
|
||||
abstract get _privateAbstractField() → core::int;
|
||||
abstract set _privateAbstractField(core::int #externalFieldValue) → void;
|
||||
}
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int _privateField = 1;
|
||||
field core::int _privateFinalField = 1;
|
||||
static final field dynamic _redirecting# = <dynamic>[self::_Class::_privateRedirectingFactory]/*isLegacy*/;
|
||||
constructor _privateConstructor() → self::_Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
static factory _privateRedirectingFactory() → self::_Class
|
||||
let Never #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
|
||||
method _privateMethod() → void {}
|
||||
get _privateGetter() → core::int
|
||||
return 42;
|
||||
set _privateSetter(core::int value) → void {}
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
method _privateMethod = self::_Extension|_privateMethod;
|
||||
tearoff _privateMethod = self::_Extension|get#_privateMethod;
|
||||
get _privateGetter = self::_Extension|get#_privateGetter;
|
||||
static field _privateField = self::_Extension|_privateField;
|
||||
static field _privateFinalField = self::_Extension|_privateFinalField;
|
||||
set _privateSetter = self::_Extension|set#_privateSetter;
|
||||
}
|
||||
static field core::int _Extension|_privateField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int _Extension|_privateFinalField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method test(self::_AbstractClass c) → dynamic {
|
||||
c.{self::_AbstractClass::_privateAbstractField} = c.{self::_AbstractClass::_privateAbstractField};
|
||||
}
|
||||
static method main() → dynamic {
|
||||
self::_Class c = new self::_Class::_privateConstructor();
|
||||
c = new self::_Class::_privateConstructor();
|
||||
c.{self::_Class::_privateMethod}();
|
||||
c.{self::_Class::_privateSetter} = c.{self::_Class::_privateGetter};
|
||||
c.{self::_Class::_privateField} = c.{self::_Class::_privateField};
|
||||
c.{self::_Class::_privateFinalField};
|
||||
self::_Extension|_privateMethod(0);
|
||||
self::_Extension|get#_privateMethod(0).call();
|
||||
self::_Extension|set#_privateSetter(0, self::_Extension|get#_privateGetter(0));
|
||||
self::_Extension|_privateField = self::_Extension|_privateField;
|
||||
self::_Extension|_privateFinalField;
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateMethod(lowered final core::int #this) → void {}
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateMethod(lowered final core::int #this) → () → void
|
||||
return () → void => self::_Extension|_privateMethod(#this);
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
|
||||
return 42;
|
||||
static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void {}
|
37
pkg/front_end/testcases/general/private_members_part.dart
Normal file
37
pkg/front_end/testcases/general/private_members_part.dart
Normal file
|
@ -0,0 +1,37 @@
|
|||
// 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.
|
||||
|
||||
part of 'private_members.dart';
|
||||
|
||||
abstract class _AbstractClass {
|
||||
abstract int _privateAbstractField;
|
||||
}
|
||||
|
||||
class _Class {
|
||||
_Class._privateConstructor();
|
||||
|
||||
factory _Class._privateRedirectingFactory() = _Class._privateConstructor;
|
||||
|
||||
void _privateMethod() {}
|
||||
|
||||
int get _privateGetter => 42;
|
||||
|
||||
void set _privateSetter(int value) {}
|
||||
|
||||
int _privateField = 1;
|
||||
|
||||
int _privateFinalField = 1;
|
||||
}
|
||||
|
||||
extension _Extension on int {
|
||||
void _privateMethod() {}
|
||||
|
||||
int get _privateGetter => 42;
|
||||
|
||||
void set _privateSetter(int value) {}
|
||||
|
||||
static int _privateField = 1;
|
||||
|
||||
static int _privateFinalField = 1;
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
// Copyright (c) 2018, 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.9
|
||||
|
||||
import './private_method_tearoff_lib.dart';
|
||||
|
||||
// `Bar' contains a private method `_f'. The function `baz' is declared in the
|
||||
|
|
17
pkg/front_end/testcases/late_lowering/private_members.dart
Normal file
17
pkg/front_end/testcases/late_lowering/private_members.dart
Normal file
|
@ -0,0 +1,17 @@
|
|||
// 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.
|
||||
|
||||
part 'private_members_part.dart';
|
||||
|
||||
main() {
|
||||
_Class c = new _Class();
|
||||
c._privateField1 = c._privateField1;
|
||||
c._privateField2 = c._privateField2;
|
||||
c._privateFinalField1;
|
||||
c._privateFinalField2;
|
||||
_Extension._privateField1 = _Extension._privateField1;
|
||||
_Extension._privateField2 = _Extension._privateField2;
|
||||
_Extension._privateFinalField1;
|
||||
_Extension._privateFinalField2;
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int? _#_Class#_privateField1 = null;
|
||||
field core::int? _#_Class#_privateField2 = null;
|
||||
field core::bool _#_Class#_privateField2#isSet = false;
|
||||
field core::int? _#_Class#_privateFinalField1 = null;
|
||||
field core::int? _#_Class#_privateFinalField2 = null;
|
||||
field core::bool _#_Class#_privateFinalField2#isSet = false;
|
||||
synthetic constructor •() → self::_Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
get _privateField1() → core::int
|
||||
return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateField1} = 1 : #t1{core::int};
|
||||
set _privateField1(core::int #t2) → void
|
||||
this.{self::_Class::_#_Class#_privateField1} = #t2;
|
||||
get _privateField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateField2};
|
||||
}
|
||||
set _privateField2(core::int? #t3) → void {
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateField2} = #t3;
|
||||
}
|
||||
get _privateFinalField1() → core::int
|
||||
return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateFinalField1} = 1 : #t4{core::int};
|
||||
set _privateFinalField1(core::int #t5) → void
|
||||
this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
|
||||
get _privateFinalField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateFinalField2};
|
||||
}
|
||||
set _privateFinalField2(core::int? #t6) → void {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = #t6;
|
||||
}
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
static field _privateField1 = self::_#_Extension|_privateField1;
|
||||
static get _privateField1 = get self::_Extension|_privateField1;
|
||||
static set _privateField1 = set self::_Extension|_privateField1;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2#isSet;
|
||||
static get _privateField2 = get self::_Extension|_privateField2;
|
||||
static set _privateField2 = set self::_Extension|_privateField2;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1;
|
||||
static get _privateFinalField1 = get self::_Extension|_privateFinalField1;
|
||||
static set _privateFinalField1 = set self::_Extension|_privateFinalField1;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2#isSet;
|
||||
static get _privateFinalField2 = get self::_Extension|_privateFinalField2;
|
||||
static set _privateFinalField2 = set self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static field core::int? _#_Extension|_privateField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method main() → dynamic {
|
||||
self::_Class c = new self::_Class::•();
|
||||
c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
|
||||
c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
|
||||
c.{self::_Class::_privateFinalField1};
|
||||
c.{self::_Class::_privateFinalField2};
|
||||
self::_Extension|_privateField1 = self::_Extension|_privateField1;
|
||||
self::_Extension|_privateField2 = self::_Extension|_privateField2;
|
||||
self::_Extension|_privateFinalField1;
|
||||
self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int
|
||||
return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7.==(null) ?{core::int} self::_#_Extension|_privateField1 = 1 : #t7{core::int};
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t8) → void
|
||||
self::_#_Extension|_privateField1 = #t8;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateField2#isSet) {
|
||||
self::_#_Extension|_privateField2 = 1;
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2(core::int? #t9) → void {
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
self::_#_Extension|_privateField2 = #t9;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int
|
||||
return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10.==(null) ?{core::int} self::_#_Extension|_privateFinalField1 = 1 : #t10{core::int};
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t11) → void
|
||||
self::_#_Extension|_privateFinalField1 = #t11;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateFinalField2#isSet) {
|
||||
self::_#_Extension|_privateFinalField2 = 1;
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateFinalField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2(core::int? #t12) → void {
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
self::_#_Extension|_privateFinalField2 = #t12;
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int? _#_Class#_privateField1 = null;
|
||||
field core::int? _#_Class#_privateField2 = null;
|
||||
field core::bool _#_Class#_privateField2#isSet = false;
|
||||
field core::int? _#_Class#_privateFinalField1 = null;
|
||||
field core::int? _#_Class#_privateFinalField2 = null;
|
||||
field core::bool _#_Class#_privateFinalField2#isSet = false;
|
||||
synthetic constructor •() → self::_Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
get _privateField1() → core::int
|
||||
return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateField1} = 1 : #t1{core::int};
|
||||
set _privateField1(core::int #t2) → void
|
||||
this.{self::_Class::_#_Class#_privateField1} = #t2;
|
||||
get _privateField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateField2};
|
||||
}
|
||||
set _privateField2(core::int? #t3) → void {
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateField2} = #t3;
|
||||
}
|
||||
get _privateFinalField1() → core::int
|
||||
return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateFinalField1} = 1 : #t4{core::int};
|
||||
set _privateFinalField1(core::int #t5) → void
|
||||
this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
|
||||
get _privateFinalField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateFinalField2};
|
||||
}
|
||||
set _privateFinalField2(core::int? #t6) → void {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = #t6;
|
||||
}
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
static field _privateField1 = self::_#_Extension|_privateField1;
|
||||
static get _privateField1 = get self::_Extension|_privateField1;
|
||||
static set _privateField1 = set self::_Extension|_privateField1;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2#isSet;
|
||||
static get _privateField2 = get self::_Extension|_privateField2;
|
||||
static set _privateField2 = set self::_Extension|_privateField2;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1;
|
||||
static get _privateFinalField1 = get self::_Extension|_privateFinalField1;
|
||||
static set _privateFinalField1 = set self::_Extension|_privateFinalField1;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2#isSet;
|
||||
static get _privateFinalField2 = get self::_Extension|_privateFinalField2;
|
||||
static set _privateFinalField2 = set self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static field core::int? _#_Extension|_privateField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method main() → dynamic {
|
||||
self::_Class c = new self::_Class::•();
|
||||
c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
|
||||
c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
|
||||
c.{self::_Class::_privateFinalField1};
|
||||
c.{self::_Class::_privateFinalField2};
|
||||
self::_Extension|_privateField1 = self::_Extension|_privateField1;
|
||||
self::_Extension|_privateField2 = self::_Extension|_privateField2;
|
||||
self::_Extension|_privateFinalField1;
|
||||
self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int
|
||||
return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7.==(null) ?{core::int} self::_#_Extension|_privateField1 = 1 : #t7{core::int};
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t8) → void
|
||||
self::_#_Extension|_privateField1 = #t8;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateField2#isSet) {
|
||||
self::_#_Extension|_privateField2 = 1;
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2(core::int? #t9) → void {
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
self::_#_Extension|_privateField2 = #t9;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int
|
||||
return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10.==(null) ?{core::int} self::_#_Extension|_privateFinalField1 = 1 : #t10{core::int};
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t11) → void
|
||||
self::_#_Extension|_privateFinalField1 = #t11;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateFinalField2#isSet) {
|
||||
self::_#_Extension|_privateFinalField2 = 1;
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateFinalField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2(core::int? #t12) → void {
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
self::_#_Extension|_privateFinalField2 = #t12;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
part 'private_members_part.dart';
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,3 @@
|
|||
part 'private_members_part.dart';
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,143 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int? _#_Class#_privateField1 = null;
|
||||
field core::bool _#_Class#_privateField1#isSet = false;
|
||||
field core::int? _#_Class#_privateField2 = null;
|
||||
field core::bool _#_Class#_privateField2#isSet = false;
|
||||
field core::int? _#_Class#_privateFinalField1 = null;
|
||||
field core::bool _#_Class#_privateFinalField1#isSet = false;
|
||||
field core::int? _#_Class#_privateFinalField2 = null;
|
||||
field core::bool _#_Class#_privateFinalField2#isSet = false;
|
||||
synthetic constructor •() → self::_Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
get _privateField1() → core::int {
|
||||
if(!this.{self::_Class::_#_Class#_privateField1#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateField1} = 1;
|
||||
this.{self::_Class::_#_Class#_privateField1#isSet} = true;
|
||||
}
|
||||
return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1{core::int};
|
||||
}
|
||||
set _privateField1(core::int #t2) → void {
|
||||
this.{self::_Class::_#_Class#_privateField1#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateField1} = #t2;
|
||||
}
|
||||
get _privateField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateField2};
|
||||
}
|
||||
set _privateField2(core::int? #t3) → void {
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateField2} = #t3;
|
||||
}
|
||||
get _privateFinalField1() → core::int {
|
||||
if(!this.{self::_Class::_#_Class#_privateFinalField1#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateFinalField1} = 1;
|
||||
this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
|
||||
}
|
||||
return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4{core::int};
|
||||
}
|
||||
set _privateFinalField1(core::int #t5) → void {
|
||||
this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
|
||||
}
|
||||
get _privateFinalField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateFinalField2};
|
||||
}
|
||||
set _privateFinalField2(core::int? #t6) → void {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = #t6;
|
||||
}
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
static field _privateField1 = self::_#_Extension|_privateField1;
|
||||
static field _privateField1 = self::_#_Extension|_privateField1#isSet;
|
||||
static get _privateField1 = get self::_Extension|_privateField1;
|
||||
static set _privateField1 = set self::_Extension|_privateField1;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2#isSet;
|
||||
static get _privateField2 = get self::_Extension|_privateField2;
|
||||
static set _privateField2 = set self::_Extension|_privateField2;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1#isSet;
|
||||
static get _privateFinalField1 = get self::_Extension|_privateFinalField1;
|
||||
static set _privateFinalField1 = set self::_Extension|_privateFinalField1;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2#isSet;
|
||||
static get _privateFinalField2 = get self::_Extension|_privateFinalField2;
|
||||
static set _privateFinalField2 = set self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static field core::int? _#_Extension|_privateField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField1#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField1#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method main() → dynamic {
|
||||
self::_Class c = new self::_Class::•();
|
||||
c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
|
||||
c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
|
||||
c.{self::_Class::_privateFinalField1};
|
||||
c.{self::_Class::_privateFinalField2};
|
||||
self::_Extension|_privateField1 = self::_Extension|_privateField1;
|
||||
self::_Extension|_privateField2 = self::_Extension|_privateField2;
|
||||
self::_Extension|_privateFinalField1;
|
||||
self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int {
|
||||
if(!self::_#_Extension|_privateField1#isSet) {
|
||||
self::_#_Extension|_privateField1 = 1;
|
||||
self::_#_Extension|_privateField1#isSet = true;
|
||||
}
|
||||
return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7{core::int};
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t8) → void {
|
||||
self::_#_Extension|_privateField1#isSet = true;
|
||||
self::_#_Extension|_privateField1 = #t8;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateField2#isSet) {
|
||||
self::_#_Extension|_privateField2 = 1;
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2(core::int? #t9) → void {
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
self::_#_Extension|_privateField2 = #t9;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int {
|
||||
if(!self::_#_Extension|_privateFinalField1#isSet) {
|
||||
self::_#_Extension|_privateFinalField1 = 1;
|
||||
self::_#_Extension|_privateFinalField1#isSet = true;
|
||||
}
|
||||
return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10{core::int};
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t11) → void {
|
||||
self::_#_Extension|_privateFinalField1#isSet = true;
|
||||
self::_#_Extension|_privateFinalField1 = #t11;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateFinalField2#isSet) {
|
||||
self::_#_Extension|_privateFinalField2 = 1;
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateFinalField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2(core::int? #t12) → void {
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
self::_#_Extension|_privateFinalField2 = #t12;
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int? _#_Class#_privateField1;
|
||||
field core::bool _#_Class#_privateField1#isSet;
|
||||
field core::int? _#_Class#_privateField2;
|
||||
field core::bool _#_Class#_privateField2#isSet;
|
||||
field core::int? _#_Class#_privateFinalField1;
|
||||
field core::bool _#_Class#_privateFinalField1#isSet;
|
||||
field core::int? _#_Class#_privateFinalField2;
|
||||
field core::bool _#_Class#_privateFinalField2#isSet;
|
||||
synthetic constructor •() → self::_Class
|
||||
;
|
||||
get _privateField1() → core::int;
|
||||
set _privateField1(core::int #t1) → void;
|
||||
get _privateField2() → core::int?;
|
||||
set _privateField2(core::int? #t2) → void;
|
||||
get _privateFinalField1() → core::int;
|
||||
set _privateFinalField1(core::int #t3) → void;
|
||||
get _privateFinalField2() → core::int?;
|
||||
set _privateFinalField2(core::int? #t4) → void;
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
static field _privateField1 = self::_#_Extension|_privateField1;
|
||||
static field _privateField1 = self::_#_Extension|_privateField1#isSet;
|
||||
static get _privateField1 = get self::_Extension|_privateField1;
|
||||
static set _privateField1 = set self::_Extension|_privateField1;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2#isSet;
|
||||
static get _privateField2 = get self::_Extension|_privateField2;
|
||||
static set _privateField2 = set self::_Extension|_privateField2;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1#isSet;
|
||||
static get _privateFinalField1 = get self::_Extension|_privateFinalField1;
|
||||
static set _privateFinalField1 = set self::_Extension|_privateFinalField1;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2#isSet;
|
||||
static get _privateFinalField2 = get self::_Extension|_privateFinalField2;
|
||||
static set _privateFinalField2 = set self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static field core::int? _#_Extension|_privateField1 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField1#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateField2 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField2#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField1 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField1#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField2 /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField2#isSet /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method main() → dynamic
|
||||
;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int;
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t5) → void;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int?;
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2(core::int? #t6) → void;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int;
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t7) → void;
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int?;
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2(core::int? #t8) → void;
|
|
@ -0,0 +1,143 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
part private_members_part.dart;
|
||||
class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
|
||||
field core::int? _#_Class#_privateField1 = null;
|
||||
field core::bool _#_Class#_privateField1#isSet = false;
|
||||
field core::int? _#_Class#_privateField2 = null;
|
||||
field core::bool _#_Class#_privateField2#isSet = false;
|
||||
field core::int? _#_Class#_privateFinalField1 = null;
|
||||
field core::bool _#_Class#_privateFinalField1#isSet = false;
|
||||
field core::int? _#_Class#_privateFinalField2 = null;
|
||||
field core::bool _#_Class#_privateFinalField2#isSet = false;
|
||||
synthetic constructor •() → self::_Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
get _privateField1() → core::int {
|
||||
if(!this.{self::_Class::_#_Class#_privateField1#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateField1} = 1;
|
||||
this.{self::_Class::_#_Class#_privateField1#isSet} = true;
|
||||
}
|
||||
return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1{core::int};
|
||||
}
|
||||
set _privateField1(core::int #t2) → void {
|
||||
this.{self::_Class::_#_Class#_privateField1#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateField1} = #t2;
|
||||
}
|
||||
get _privateField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateField2};
|
||||
}
|
||||
set _privateField2(core::int? #t3) → void {
|
||||
this.{self::_Class::_#_Class#_privateField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateField2} = #t3;
|
||||
}
|
||||
get _privateFinalField1() → core::int {
|
||||
if(!this.{self::_Class::_#_Class#_privateFinalField1#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateFinalField1} = 1;
|
||||
this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
|
||||
}
|
||||
return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4{core::int};
|
||||
}
|
||||
set _privateFinalField1(core::int #t5) → void {
|
||||
this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
|
||||
}
|
||||
get _privateFinalField2() → core::int? {
|
||||
if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = 1;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
}
|
||||
return this.{self::_Class::_#_Class#_privateFinalField2};
|
||||
}
|
||||
set _privateFinalField2(core::int? #t6) → void {
|
||||
this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
|
||||
this.{self::_Class::_#_Class#_privateFinalField2} = #t6;
|
||||
}
|
||||
}
|
||||
extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
|
||||
static field _privateField1 = self::_#_Extension|_privateField1;
|
||||
static field _privateField1 = self::_#_Extension|_privateField1#isSet;
|
||||
static get _privateField1 = get self::_Extension|_privateField1;
|
||||
static set _privateField1 = set self::_Extension|_privateField1;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2;
|
||||
static field _privateField2 = self::_#_Extension|_privateField2#isSet;
|
||||
static get _privateField2 = get self::_Extension|_privateField2;
|
||||
static set _privateField2 = set self::_Extension|_privateField2;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1;
|
||||
static field _privateFinalField1 = self::_#_Extension|_privateFinalField1#isSet;
|
||||
static get _privateFinalField1 = get self::_Extension|_privateFinalField1;
|
||||
static set _privateFinalField1 = set self::_Extension|_privateFinalField1;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2;
|
||||
static field _privateFinalField2 = self::_#_Extension|_privateFinalField2#isSet;
|
||||
static get _privateFinalField2 = get self::_Extension|_privateFinalField2;
|
||||
static set _privateFinalField2 = set self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static field core::int? _#_Extension|_privateField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField1#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField1#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::int? _#_Extension|_privateFinalField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
|
||||
static method main() → dynamic {
|
||||
self::_Class c = new self::_Class::•();
|
||||
c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
|
||||
c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
|
||||
c.{self::_Class::_privateFinalField1};
|
||||
c.{self::_Class::_privateFinalField2};
|
||||
self::_Extension|_privateField1 = self::_Extension|_privateField1;
|
||||
self::_Extension|_privateField2 = self::_Extension|_privateField2;
|
||||
self::_Extension|_privateFinalField1;
|
||||
self::_Extension|_privateFinalField2;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int {
|
||||
if(!self::_#_Extension|_privateField1#isSet) {
|
||||
self::_#_Extension|_privateField1 = 1;
|
||||
self::_#_Extension|_privateField1#isSet = true;
|
||||
}
|
||||
return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7{core::int};
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t8) → void {
|
||||
self::_#_Extension|_privateField1#isSet = true;
|
||||
self::_#_Extension|_privateField1 = #t8;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateField2#isSet) {
|
||||
self::_#_Extension|_privateField2 = 1;
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2(core::int? #t9) → void {
|
||||
self::_#_Extension|_privateField2#isSet = true;
|
||||
self::_#_Extension|_privateField2 = #t9;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int {
|
||||
if(!self::_#_Extension|_privateFinalField1#isSet) {
|
||||
self::_#_Extension|_privateFinalField1 = 1;
|
||||
self::_#_Extension|_privateFinalField1#isSet = true;
|
||||
}
|
||||
return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10{core::int};
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t11) → void {
|
||||
self::_#_Extension|_privateFinalField1#isSet = true;
|
||||
self::_#_Extension|_privateFinalField1 = #t11;
|
||||
}
|
||||
static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int? {
|
||||
if(!self::_#_Extension|_privateFinalField2#isSet) {
|
||||
self::_#_Extension|_privateFinalField2 = 1;
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
}
|
||||
return self::_#_Extension|_privateFinalField2;
|
||||
}
|
||||
static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2(core::int? #t12) → void {
|
||||
self::_#_Extension|_privateFinalField2#isSet = true;
|
||||
self::_#_Extension|_privateFinalField2 = #t12;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
// 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.
|
||||
|
||||
part of 'private_members.dart';
|
||||
|
||||
class _Class {
|
||||
late int _privateField1 = 1;
|
||||
|
||||
late int? _privateField2 = 1;
|
||||
|
||||
late int _privateFinalField1 = 1;
|
||||
|
||||
late int? _privateFinalField2 = 1;
|
||||
}
|
||||
|
||||
extension _Extension on int {
|
||||
static late int _privateField1 = 1;
|
||||
|
||||
static late int? _privateField2 = 1;
|
||||
|
||||
static late int _privateFinalField1 = 1;
|
||||
|
||||
static late int? _privateFinalField2 = 1;
|
||||
}
|
|
@ -1617,8 +1617,7 @@ abstract class Member extends NamedNode implements Annotatable, FileUriNode {
|
|||
@override
|
||||
List<Expression> annotations = const <Expression>[];
|
||||
|
||||
// TODO(johnniwinther): Make this non-nullable.
|
||||
Name? name;
|
||||
Name name;
|
||||
|
||||
/// The URI of the source file this member was loaded from.
|
||||
@override
|
||||
|
@ -1641,7 +1640,10 @@ abstract class Member extends NamedNode implements Annotatable, FileUriNode {
|
|||
// TODO(asgerf): It might be worthwhile to put this on classes as well.
|
||||
int transformerFlags = 0;
|
||||
|
||||
Member(this.name, this.fileUri, Reference? reference) : super(reference);
|
||||
Member(this.name, this.fileUri, Reference? reference)
|
||||
// ignore: unnecessary_null_comparison
|
||||
: assert(name != null),
|
||||
super(reference);
|
||||
|
||||
Class? get enclosingClass => parent is Class ? parent as Class : null;
|
||||
Library get enclosingLibrary =>
|
||||
|
@ -1751,7 +1753,7 @@ class Field extends Member {
|
|||
|
||||
Reference get getterReference => super.reference;
|
||||
|
||||
Field.mutable(Name? name,
|
||||
Field.mutable(Name name,
|
||||
{this.type: const DynamicType(),
|
||||
this.initializer,
|
||||
bool isCovariant: false,
|
||||
|
@ -1775,7 +1777,7 @@ class Field extends Member {
|
|||
this.transformerFlags = transformerFlags;
|
||||
}
|
||||
|
||||
Field.immutable(Name? name,
|
||||
Field.immutable(Name name,
|
||||
{this.type: const DynamicType(),
|
||||
this.initializer,
|
||||
bool isCovariant: false,
|
||||
|
@ -1925,7 +1927,7 @@ class Field extends Member {
|
|||
void visitChildren(Visitor v) {
|
||||
visitList(annotations, v);
|
||||
type.accept(v);
|
||||
name?.accept(v);
|
||||
name.accept(v);
|
||||
initializer?.accept(v);
|
||||
}
|
||||
|
||||
|
@ -1993,7 +1995,7 @@ class Constructor extends Member {
|
|||
List<Initializer> initializers;
|
||||
|
||||
Constructor(this.function,
|
||||
{Name? name,
|
||||
{required Name name,
|
||||
bool isConst: false,
|
||||
bool isExternal: false,
|
||||
bool isSynthetic: false,
|
||||
|
@ -2078,7 +2080,7 @@ class Constructor extends Member {
|
|||
@override
|
||||
void visitChildren(Visitor v) {
|
||||
visitList(annotations, v);
|
||||
name?.accept(v);
|
||||
name.accept(v);
|
||||
visitList(initializers, v);
|
||||
function?.accept(v);
|
||||
}
|
||||
|
@ -2166,7 +2168,7 @@ class RedirectingFactoryConstructor extends Member {
|
|||
List<VariableDeclaration> namedParameters;
|
||||
|
||||
RedirectingFactoryConstructor(this.targetReference,
|
||||
{Name? name,
|
||||
{required Name name,
|
||||
bool isConst: false,
|
||||
bool isExternal: false,
|
||||
int transformerFlags: 0,
|
||||
|
@ -2263,7 +2265,7 @@ class RedirectingFactoryConstructor extends Member {
|
|||
visitList(annotations, v);
|
||||
target?.acceptReference(v);
|
||||
visitList(typeArguments, v);
|
||||
name?.accept(v);
|
||||
name.accept(v);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -2534,7 +2536,7 @@ class Procedure extends Member {
|
|||
ProcedureStubKind stubKind;
|
||||
Reference? stubTargetReference;
|
||||
|
||||
Procedure(Name? name, ProcedureKind kind, FunctionNode? function,
|
||||
Procedure(Name name, ProcedureKind kind, FunctionNode? function,
|
||||
{bool isAbstract: false,
|
||||
bool isStatic: false,
|
||||
bool isExternal: false,
|
||||
|
@ -2560,7 +2562,7 @@ class Procedure extends Member {
|
|||
stubTargetReference:
|
||||
getMemberReferenceBasedOnProcedureKind(stubTarget, kind));
|
||||
|
||||
Procedure._byReferenceRenamed(Name? name, this.kind, this.function,
|
||||
Procedure._byReferenceRenamed(Name name, this.kind, this.function,
|
||||
{bool isAbstract: false,
|
||||
bool isStatic: false,
|
||||
bool isExternal: false,
|
||||
|
@ -2750,7 +2752,7 @@ class Procedure extends Member {
|
|||
@override
|
||||
void visitChildren(Visitor v) {
|
||||
visitList(annotations, v);
|
||||
name?.accept(v);
|
||||
name.accept(v);
|
||||
function?.accept(v);
|
||||
}
|
||||
|
||||
|
@ -6088,7 +6090,7 @@ class StaticInvocation extends InvocationExpression {
|
|||
bool isConst;
|
||||
|
||||
@override
|
||||
Name get name => target.name!;
|
||||
Name get name => target.name;
|
||||
|
||||
StaticInvocation(Procedure target, Arguments arguments, {bool isConst: false})
|
||||
: this.byReference(
|
||||
|
@ -6175,7 +6177,7 @@ class ConstructorInvocation extends InvocationExpression {
|
|||
bool isConst;
|
||||
|
||||
@override
|
||||
Name get name => target.name!;
|
||||
Name get name => target.name;
|
||||
|
||||
ConstructorInvocation(Constructor target, Arguments arguments,
|
||||
{bool isConst: false})
|
||||
|
@ -6263,9 +6265,9 @@ class ConstructorInvocation extends InvocationExpression {
|
|||
}
|
||||
printer.writeClassName(target.enclosingClass.reference);
|
||||
printer.writeTypeArguments(arguments.types);
|
||||
if (target.name!.text.isNotEmpty) {
|
||||
if (target.name.text.isNotEmpty) {
|
||||
printer.write('.');
|
||||
printer.write(target.name!.text);
|
||||
printer.write(target.name.text);
|
||||
}
|
||||
printer.writeArguments(arguments, includeTypeArguments: false);
|
||||
}
|
||||
|
@ -13613,7 +13615,8 @@ final Class dummyClass = new Class(name: '');
|
|||
/// This is used as the removal sentinel in [RemovingTransformer] and can be
|
||||
/// used for instance as a dummy initial value for the `List.filled`
|
||||
/// constructor.
|
||||
final Constructor dummyConstructor = new Constructor(dummyFunctionNode);
|
||||
final Constructor dummyConstructor =
|
||||
new Constructor(dummyFunctionNode, name: dummyName);
|
||||
|
||||
/// Non-nullable [Extension] dummy value.
|
||||
///
|
||||
|
@ -13649,7 +13652,7 @@ final Field dummyField = new Field.mutable(dummyName);
|
|||
/// used for instance as a dummy initial value for the `List.filled`
|
||||
/// constructor.
|
||||
final RedirectingFactoryConstructor dummyRedirectingFactoryConstructor =
|
||||
new RedirectingFactoryConstructor(null);
|
||||
new RedirectingFactoryConstructor(null, name: dummyName);
|
||||
|
||||
/// Non-nullable [Typedef] dummy value.
|
||||
///
|
||||
|
|
|
@ -1443,19 +1443,19 @@ class BinaryBuilder {
|
|||
if (alwaysCreateNewNamedNodes) {
|
||||
node = null;
|
||||
}
|
||||
if (node == null) {
|
||||
if (setterReference != null) {
|
||||
node = new Field.mutable(null,
|
||||
getterReference: getterReference, setterReference: setterReference);
|
||||
} else {
|
||||
node = new Field.immutable(null, getterReference: getterReference);
|
||||
}
|
||||
}
|
||||
Uri? fileUri = readUriReference();
|
||||
int fileOffset = readOffset();
|
||||
int fileEndOffset = readOffset();
|
||||
int flags = readUInt30();
|
||||
Name name = readName();
|
||||
if (node == null) {
|
||||
if (setterReference != null) {
|
||||
node = new Field.mutable(name,
|
||||
getterReference: getterReference, setterReference: setterReference);
|
||||
} else {
|
||||
node = new Field.immutable(name, getterReference: getterReference);
|
||||
}
|
||||
}
|
||||
List<Expression> annotations = readAnnotationList(node);
|
||||
assert(() {
|
||||
debugPath.add(name.text);
|
||||
|
@ -1487,15 +1487,15 @@ class BinaryBuilder {
|
|||
if (alwaysCreateNewNamedNodes) {
|
||||
node = null;
|
||||
}
|
||||
if (node == null) {
|
||||
node = new Constructor(null, reference: reference);
|
||||
}
|
||||
Uri? fileUri = readUriReference();
|
||||
int startFileOffset = readOffset();
|
||||
int fileOffset = readOffset();
|
||||
int fileEndOffset = readOffset();
|
||||
int flags = readByte();
|
||||
Name name = readName();
|
||||
if (node == null) {
|
||||
node = new Constructor(null, reference: reference, name: name);
|
||||
}
|
||||
List<Expression> annotations = readAnnotationList(node);
|
||||
assert(() {
|
||||
debugPath.add(name.text);
|
||||
|
@ -1536,13 +1536,13 @@ class BinaryBuilder {
|
|||
int kindIndex = readByte();
|
||||
ProcedureKind kind = ProcedureKind.values[kindIndex];
|
||||
ProcedureStubKind stubKind = ProcedureStubKind.values[readByte()];
|
||||
int flags = readUInt30();
|
||||
Name name = readName();
|
||||
if (node == null) {
|
||||
node = new Procedure(null, kind, null, reference: reference);
|
||||
node = new Procedure(name, kind, null, reference: reference);
|
||||
} else {
|
||||
assert(node.kind == kind);
|
||||
}
|
||||
int flags = readUInt30();
|
||||
Name name = readName();
|
||||
List<Expression> annotations = readAnnotationList(node);
|
||||
assert(() {
|
||||
debugPath.add(name.text);
|
||||
|
@ -1589,14 +1589,15 @@ class BinaryBuilder {
|
|||
if (alwaysCreateNewNamedNodes) {
|
||||
node = null;
|
||||
}
|
||||
if (node == null) {
|
||||
node = new RedirectingFactoryConstructor(null, reference: reference);
|
||||
}
|
||||
Uri? fileUri = readUriReference();
|
||||
int fileOffset = readOffset();
|
||||
int fileEndOffset = readOffset();
|
||||
int flags = readByte();
|
||||
Name name = readName();
|
||||
if (node == null) {
|
||||
node = new RedirectingFactoryConstructor(null,
|
||||
reference: reference, name: name);
|
||||
}
|
||||
List<Expression> annotations = readAnnotationList(node);
|
||||
assert(() {
|
||||
debugPath.add(name.text);
|
||||
|
|
|
@ -1192,8 +1192,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
|
|||
_currentlyInNonimplementation = false;
|
||||
}
|
||||
|
||||
static final Name _emptyName = new Name('');
|
||||
|
||||
@override
|
||||
void visitConstructor(Constructor node) {
|
||||
if (node.reference.canonicalName == null) {
|
||||
|
@ -1208,7 +1206,7 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
|
|||
writeOffset(node.fileEndOffset);
|
||||
|
||||
writeByte(node.flags);
|
||||
writeName(node.name ?? _emptyName);
|
||||
writeName(node.name);
|
||||
|
||||
writeAnnotationList(node.annotations);
|
||||
assert(node.function!.typeParameters.isEmpty);
|
||||
|
@ -1272,7 +1270,7 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
|
|||
writeByte(node.kind.index);
|
||||
writeByte(node.stubKind.index);
|
||||
writeUInt30(node.flags);
|
||||
writeName(node.name ?? _emptyName);
|
||||
writeName(node.name);
|
||||
writeAnnotationList(node.annotations);
|
||||
writeNullAllowedReference(node.stubTargetReference);
|
||||
writeOptionalFunctionNode(node.function);
|
||||
|
@ -1334,7 +1332,7 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
|
|||
writeOffset(node.fileOffset);
|
||||
writeOffset(node.fileEndOffset);
|
||||
writeUInt30(node.flags);
|
||||
writeName(node.name!);
|
||||
writeName(node.name);
|
||||
writeAnnotationList(node.annotations);
|
||||
writeNode(node.type);
|
||||
writeOptionalNode(node.initializer);
|
||||
|
@ -1356,7 +1354,7 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
|
|||
writeOffset(node.fileOffset);
|
||||
writeOffset(node.fileEndOffset);
|
||||
writeByte(node.flags);
|
||||
writeName(node.name!);
|
||||
writeName(node.name);
|
||||
|
||||
writeAnnotationList(node.annotations);
|
||||
writeNonNullReference(node.targetReference!);
|
||||
|
|
|
@ -133,26 +133,26 @@ class CanonicalName {
|
|||
|
||||
CanonicalName getChildFromProcedure(Procedure procedure) {
|
||||
return getChild(getProcedureQualifier(procedure))
|
||||
.getChildFromQualifiedName(procedure.name!);
|
||||
.getChildFromQualifiedName(procedure.name);
|
||||
}
|
||||
|
||||
CanonicalName getChildFromField(Field field) {
|
||||
return getChild('@getters').getChildFromQualifiedName(field.name!);
|
||||
return getChild('@getters').getChildFromQualifiedName(field.name);
|
||||
}
|
||||
|
||||
CanonicalName getChildFromFieldSetter(Field field) {
|
||||
return getChild('@setters').getChildFromQualifiedName(field.name!);
|
||||
return getChild('@setters').getChildFromQualifiedName(field.name);
|
||||
}
|
||||
|
||||
CanonicalName getChildFromConstructor(Constructor constructor) {
|
||||
return getChild('@constructors')
|
||||
.getChildFromQualifiedName(constructor.name!);
|
||||
.getChildFromQualifiedName(constructor.name);
|
||||
}
|
||||
|
||||
CanonicalName getChildFromRedirectingFactoryConstructor(
|
||||
RedirectingFactoryConstructor redirectingFactoryConstructor) {
|
||||
return getChild('@factories')
|
||||
.getChildFromQualifiedName(redirectingFactoryConstructor.name!);
|
||||
.getChildFromQualifiedName(redirectingFactoryConstructor.name);
|
||||
}
|
||||
|
||||
CanonicalName getChildFromFieldWithName(Name name) {
|
||||
|
|
|
@ -282,7 +282,7 @@ abstract class ClassHierarchy implements ClassHierarchyBase {
|
|||
/// [getDeclaredMembers] and [getInterfaceMembers].
|
||||
static int compareMembers(Member first, Member second) {
|
||||
if (first == second) return 0;
|
||||
return compareNames(first.name!, second.name!);
|
||||
return compareNames(first.name, second.name);
|
||||
}
|
||||
|
||||
/// Compares names, using the same sort order as [getDeclaredMembers] and
|
||||
|
@ -328,7 +328,7 @@ abstract class ClassHierarchy implements ClassHierarchyBase {
|
|||
while (low <= high) {
|
||||
int mid = low + ((high - low) >> 1);
|
||||
Member pivot = members[mid];
|
||||
int comparison = compareNames(name, pivot.name!);
|
||||
int comparison = compareNames(name, pivot.name);
|
||||
if (comparison < 0) {
|
||||
high = mid - 1;
|
||||
} else if (comparison > 0) {
|
||||
|
@ -417,7 +417,7 @@ class _ClosedWorldClassHierarchySubtypes implements ClassHierarchySubtypes {
|
|||
Member? getSingleTargetForInterfaceInvocation(Member interfaceTarget,
|
||||
{bool setter: false}) {
|
||||
if (invalidated) throw "This data structure has been invalidated";
|
||||
Name name = interfaceTarget.name!;
|
||||
Name name = interfaceTarget.name;
|
||||
Member? target = null;
|
||||
ClassSet subtypes = getSubtypesOf(interfaceTarget.enclosingClass!);
|
||||
for (Class c in subtypes) {
|
||||
|
@ -1218,7 +1218,7 @@ class ClosedWorldClassHierarchy implements ClassHierarchy {
|
|||
setters: setters)) {
|
||||
if (mixinMember is! Procedure ||
|
||||
(mixinMember is Procedure && !mixinMember.isSynthetic)) {
|
||||
memberMap[mixinMember.name!] = mixinMember;
|
||||
memberMap[mixinMember.name] = mixinMember;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1227,21 +1227,21 @@ class ClosedWorldClassHierarchy implements ClassHierarchy {
|
|||
if (procedure.isStatic) continue;
|
||||
if (procedure.kind == ProcedureKind.Setter) {
|
||||
if (setters) {
|
||||
memberMap[procedure.name!] = procedure;
|
||||
memberMap[procedure.name] = procedure;
|
||||
}
|
||||
} else {
|
||||
if (!setters) {
|
||||
memberMap[procedure.name!] = procedure;
|
||||
memberMap[procedure.name] = procedure;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Field field in classNode.fields) {
|
||||
if (field.isStatic) continue;
|
||||
if (!setters) {
|
||||
memberMap[field.name!] = field;
|
||||
memberMap[field.name] = field;
|
||||
}
|
||||
if (setters && field.hasSetter) {
|
||||
memberMap[field.name!] = field;
|
||||
memberMap[field.name] = field;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -221,14 +221,14 @@ class _MemberTable {
|
|||
|
||||
String getDisambiguatedName(Member member) {
|
||||
if (member is Procedure) {
|
||||
if (member.isGetter) return LibraryIndex.getterPrefix + member.name!.text;
|
||||
if (member.isSetter) return LibraryIndex.setterPrefix + member.name!.text;
|
||||
if (member.isGetter) return LibraryIndex.getterPrefix + member.name.text;
|
||||
if (member.isSetter) return LibraryIndex.setterPrefix + member.name.text;
|
||||
}
|
||||
return member.name!.text;
|
||||
return member.name.text;
|
||||
}
|
||||
|
||||
void _addMember(Member member) {
|
||||
if (member.name!.isPrivate && member.name!.library != library) {
|
||||
if (member.name.isPrivate && member.name.library != library) {
|
||||
// Members whose name is private to other libraries cannot currently
|
||||
// be found with the LibraryIndex class.
|
||||
return;
|
||||
|
@ -254,7 +254,7 @@ class _MemberTable {
|
|||
final NamedNode? replacement = extensionMember.member.node;
|
||||
if (replacement is! Member) return;
|
||||
Member member = replacement;
|
||||
if (member.name!.isPrivate && member.name!.library != library) {
|
||||
if (member.name.isPrivate && member.name.library != library) {
|
||||
// Members whose name is private to other libraries cannot currently
|
||||
// be found with the LibraryIndex class.
|
||||
return;
|
||||
|
|
|
@ -46,7 +46,7 @@ abstract class IndexedContainer {
|
|||
}
|
||||
|
||||
void _addProcedure(Procedure procedure) {
|
||||
Name name = procedure.name!;
|
||||
Name name = procedure.name;
|
||||
if (procedure.isSetter) {
|
||||
assert(_setterReferences[name] == null);
|
||||
_setterReferences[name] = procedure.reference;
|
||||
|
@ -62,7 +62,7 @@ abstract class IndexedContainer {
|
|||
void _addFields(List<Field> fields) {
|
||||
for (int i = 0; i < fields.length; i++) {
|
||||
Field field = fields[i];
|
||||
Name name = field.name!;
|
||||
Name name = field.name;
|
||||
assert(_getterReferences[name] == null);
|
||||
_getterReferences[name] = field.getterReference;
|
||||
if (field.hasSetter) {
|
||||
|
@ -116,12 +116,12 @@ class IndexedClass extends IndexedContainer {
|
|||
IndexedClass._(Class c, this.library) {
|
||||
for (int i = 0; i < c.constructors.length; i++) {
|
||||
Constructor constructor = c.constructors[i];
|
||||
_constructors[constructor.name!] = constructor;
|
||||
_constructors[constructor.name] = constructor;
|
||||
}
|
||||
for (int i = 0; i < c.procedures.length; i++) {
|
||||
Procedure procedure = c.procedures[i];
|
||||
if (procedure.isFactory) {
|
||||
_constructors[procedure.name!] = procedure;
|
||||
_constructors[procedure.name] = procedure;
|
||||
} else {
|
||||
_addProcedure(procedure);
|
||||
}
|
||||
|
|
|
@ -201,8 +201,7 @@ String qualifiedMemberNameToStringByReference(Reference? reference,
|
|||
}
|
||||
|
||||
String memberNameToString(Member node) {
|
||||
return node.name?.text ??
|
||||
"null-named member ${node.runtimeType} ${node.hashCode}";
|
||||
return node.name.text;
|
||||
}
|
||||
|
||||
String qualifiedTypeParameterNameToString(TypeParameter node,
|
||||
|
|
|
@ -120,7 +120,7 @@ String debugQualifiedClassName(Class node) {
|
|||
}
|
||||
|
||||
String debugMemberName(Member node) {
|
||||
return node.name?.text ?? globalDebuggingNames.nameMember(node);
|
||||
return node.name.text;
|
||||
}
|
||||
|
||||
String debugQualifiedMemberName(Member node) {
|
||||
|
@ -367,8 +367,9 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
|
|||
static final Name emptyName = new Name(emptyNameString);
|
||||
|
||||
Name getMemberName(Member node) {
|
||||
if (node.name?.text == '') return emptyName;
|
||||
if (node.name != null) return node.name!;
|
||||
if (node.name.text == '') return emptyName;
|
||||
// ignore: unnecessary_null_comparison
|
||||
if (node.name != null) return node.name;
|
||||
return new Name(syntheticNames.nameMember(node));
|
||||
}
|
||||
|
||||
|
@ -514,11 +515,11 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
|
|||
} else if (node is Field) {
|
||||
Library nodeLibrary = node.enclosingLibrary;
|
||||
String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
|
||||
write(prefix + '::' + node.name!.text);
|
||||
write(prefix + '::' + node.name.text);
|
||||
} else if (node is Procedure) {
|
||||
Library nodeLibrary = node.enclosingLibrary;
|
||||
String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
|
||||
write(prefix + '::' + node.name!.text);
|
||||
write(prefix + '::' + node.name.text);
|
||||
} else if (node is Typedef) {
|
||||
Library nodeLibrary = node.enclosingLibrary;
|
||||
String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
|
||||
|
@ -1251,8 +1252,9 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
|
|||
writeModifier(node.isConst, 'const');
|
||||
writeWord('redirecting_factory');
|
||||
|
||||
// ignore: unnecessary_null_comparison
|
||||
if (node.name != null) {
|
||||
writeName(node.name!);
|
||||
writeName(node.name);
|
||||
}
|
||||
writeTypeParameterList(node.typeParameters);
|
||||
writeParameterList(node.positionalParameters, node.namedParameters,
|
||||
|
@ -1655,7 +1657,7 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
|
|||
if (!first) {
|
||||
writeComma();
|
||||
}
|
||||
writeWord('${fieldRef.asField.name!.text}');
|
||||
writeWord('${fieldRef.asField.name.text}');
|
||||
writeSymbol(':');
|
||||
writeExpression(value);
|
||||
first = false;
|
||||
|
@ -2635,7 +2637,7 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
|
|||
writeList(node.fieldValues.entries,
|
||||
(core.MapEntry<Reference, Constant> entry) {
|
||||
if (entry.key.node != null) {
|
||||
writeWord('${entry.key.asField.name!.text}');
|
||||
writeWord('${entry.key.asField.name.text}');
|
||||
} else {
|
||||
writeWord('${entry.key.canonicalName!.name}');
|
||||
}
|
||||
|
|
|
@ -1967,7 +1967,7 @@ class MemberTagger implements Tagger<Member> {
|
|||
|
||||
TextSerializer<Field> mutableFieldSerializer =
|
||||
Wrapped<Tuple4<Name, int, DartType, Expression?>, Field>(
|
||||
(w) => Tuple4(w.name!, w.flags, w.type, w.initializer),
|
||||
(w) => Tuple4(w.name, w.flags, w.type, w.initializer),
|
||||
(u) => Field.mutable(u.first, type: u.third, initializer: u.fourth)
|
||||
..flags = u.second,
|
||||
Tuple4Serializer(nameSerializer, fieldFlagsSerializer,
|
||||
|
@ -1975,7 +1975,7 @@ TextSerializer<Field> mutableFieldSerializer =
|
|||
|
||||
TextSerializer<Field> immutableFieldSerializer =
|
||||
Wrapped<Tuple4<Name, int, DartType, Expression?>, Field>(
|
||||
(w) => Tuple4(w.name!, w.flags, w.type, w.initializer),
|
||||
(w) => Tuple4(w.name, w.flags, w.type, w.initializer),
|
||||
(u) => Field.immutable(u.first, type: u.third, initializer: u.fourth)
|
||||
..flags = u.second,
|
||||
Tuple4Serializer(nameSerializer, fieldFlagsSerializer,
|
||||
|
@ -1983,7 +1983,7 @@ TextSerializer<Field> immutableFieldSerializer =
|
|||
|
||||
TextSerializer<Procedure> methodSerializer =
|
||||
Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
|
||||
(w) => Tuple3(w.name!, w.flags, w.function!),
|
||||
(w) => Tuple3(w.name, w.flags, w.function!),
|
||||
(u) =>
|
||||
Procedure(u.first, ProcedureKind.Method, u.third)..flags = u.second,
|
||||
Tuple3Serializer(
|
||||
|
@ -1991,7 +1991,7 @@ TextSerializer<Procedure> methodSerializer =
|
|||
|
||||
TextSerializer<Procedure> getterSerializer =
|
||||
Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
|
||||
(w) => Tuple3(w.name!, w.flags, w.function!),
|
||||
(w) => Tuple3(w.name, w.flags, w.function!),
|
||||
(u) =>
|
||||
Procedure(u.first, ProcedureKind.Getter, u.third)..flags = u.second,
|
||||
Tuple3Serializer(
|
||||
|
@ -1999,7 +1999,7 @@ TextSerializer<Procedure> getterSerializer =
|
|||
|
||||
TextSerializer<Procedure> setterSerializer =
|
||||
Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
|
||||
(w) => Tuple3(w.name!, w.flags, w.function!),
|
||||
(w) => Tuple3(w.name, w.flags, w.function!),
|
||||
(u) =>
|
||||
Procedure(u.first, ProcedureKind.Setter, u.third)..flags = u.second,
|
||||
Tuple3Serializer(
|
||||
|
@ -2007,7 +2007,7 @@ TextSerializer<Procedure> setterSerializer =
|
|||
|
||||
TextSerializer<Procedure> operatorSerializer =
|
||||
Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
|
||||
(w) => Tuple3(w.name!, w.flags, w.function!),
|
||||
(w) => Tuple3(w.name, w.flags, w.function!),
|
||||
(u) => Procedure(u.first, ProcedureKind.Operator, u.third)
|
||||
..flags = u.second,
|
||||
Tuple3Serializer(
|
||||
|
@ -2015,7 +2015,7 @@ TextSerializer<Procedure> operatorSerializer =
|
|||
|
||||
TextSerializer<Procedure> factorySerializer =
|
||||
Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
|
||||
(w) => Tuple3(w.name!, w.flags, w.function!),
|
||||
(w) => Tuple3(w.name, w.flags, w.function!),
|
||||
(u) => Procedure(u.first, ProcedureKind.Factory, u.third)
|
||||
..flags = u.second,
|
||||
Tuple3Serializer(
|
||||
|
@ -2024,7 +2024,7 @@ TextSerializer<Procedure> factorySerializer =
|
|||
TextSerializer<Constructor> constructorSerializer = Wrapped<
|
||||
Tuple3<Name, int, Tuple2<FunctionNode, List<Initializer>?>>,
|
||||
Constructor>(
|
||||
(w) => Tuple3(w.name!, w.flags, Tuple2(w.function!, w.initializers)),
|
||||
(w) => Tuple3(w.name, w.flags, Tuple2(w.function!, w.initializers)),
|
||||
(u) =>
|
||||
Constructor(u.third.first, name: u.first, initializers: u.third.second)
|
||||
..flags = u.second,
|
||||
|
@ -2043,7 +2043,7 @@ TextSerializer<RedirectingFactoryConstructor>
|
|||
List<VariableDeclaration>, List<DartType>>>>,
|
||||
RedirectingFactoryConstructor>(
|
||||
(w) => Tuple4(
|
||||
w.name!,
|
||||
w.name,
|
||||
w.flags,
|
||||
w.targetReference!.canonicalName!,
|
||||
Tuple2(
|
||||
|
|
|
@ -113,17 +113,17 @@ class MixinFullResolution {
|
|||
var setters = <Name, Procedure>{};
|
||||
for (var procedure in class_.procedures) {
|
||||
if (procedure.isSetter) {
|
||||
setters[procedure.name!] = procedure;
|
||||
setters[procedure.name] = procedure;
|
||||
} else {
|
||||
nonSetters[procedure.name!] = procedure;
|
||||
nonSetters[procedure.name] = procedure;
|
||||
}
|
||||
}
|
||||
|
||||
for (var field in class_.mixin.fields) {
|
||||
Reference? getterReference =
|
||||
indexedClass?.lookupGetterReference(field.name!);
|
||||
indexedClass?.lookupGetterReference(field.name);
|
||||
Reference? setterReference =
|
||||
indexedClass?.lookupSetterReference(field.name!);
|
||||
indexedClass?.lookupSetterReference(field.name);
|
||||
if (getterReference == null) {
|
||||
getterReference = nonSetters[field.name]?.reference;
|
||||
getterReference?.canonicalName?.unbind();
|
||||
|
@ -134,7 +134,7 @@ class MixinFullResolution {
|
|||
}
|
||||
Field clone =
|
||||
cloner.cloneField(field, getterReference, setterReference);
|
||||
Procedure? setter = setters[field.name!];
|
||||
Procedure? setter = setters[field.name];
|
||||
if (setter != null) {
|
||||
setters.remove(field.name);
|
||||
VariableDeclaration parameter =
|
||||
|
@ -169,9 +169,9 @@ class MixinFullResolution {
|
|||
|
||||
Reference? reference;
|
||||
if (procedure.isSetter) {
|
||||
reference = indexedClass?.lookupSetterReference(procedure.name!);
|
||||
reference = indexedClass?.lookupSetterReference(procedure.name);
|
||||
} else {
|
||||
reference = indexedClass?.lookupGetterReference(procedure.name!);
|
||||
reference = indexedClass?.lookupGetterReference(procedure.name);
|
||||
}
|
||||
|
||||
// Linear search for a forwarding stub with the same name.
|
||||
|
|
|
@ -369,7 +369,7 @@ class WidgetCreatorTracker {
|
|||
void _transformClassImplementingWidget(
|
||||
Class clazz, ChangedStructureNotifier? changedStructureNotifier) {
|
||||
if (clazz.fields
|
||||
.any((Field field) => field.name!.text == _locationFieldName)) {
|
||||
.any((Field field) => field.name.text == _locationFieldName)) {
|
||||
// This class has already been transformed. Skip
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -152,7 +152,7 @@ abstract class TypeEnvironment extends Types {
|
|||
if (class_ == coreTypes.intClass ||
|
||||
class_ == coreTypes.numClass ||
|
||||
class_ == coreTypes.doubleClass) {
|
||||
String name = member.name!.text;
|
||||
String name = member.name.text;
|
||||
return name == '+' ||
|
||||
name == '-' ||
|
||||
name == '*' ||
|
||||
|
@ -162,7 +162,7 @@ abstract class TypeEnvironment extends Types {
|
|||
} else {
|
||||
Class? class_ = member.enclosingClass;
|
||||
if (class_ == coreTypes.intClass || class_ == coreTypes.numClass) {
|
||||
String name = member.name!.text;
|
||||
String name = member.name.text;
|
||||
return name == '+' ||
|
||||
name == '-' ||
|
||||
name == '*' ||
|
||||
|
@ -180,7 +180,7 @@ abstract class TypeEnvironment extends Types {
|
|||
if (isNonNullableByDefault) {
|
||||
Class? class_ = member.enclosingClass;
|
||||
if (class_ == coreTypes.intClass || class_ == coreTypes.numClass) {
|
||||
String name = member.name!.text;
|
||||
String name = member.name.text;
|
||||
return name == 'clamp';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -283,11 +283,11 @@ class VerifyingVisitor extends RecursiveResultVisitor<void> {
|
|||
TreeNode? oldParent = enterParent(node);
|
||||
bool isTopLevel = node.parent == currentLibrary;
|
||||
if (isTopLevel && !node.isStatic) {
|
||||
problem(node, "The top-level field '${node.name!.text}' should be static",
|
||||
problem(node, "The top-level field '${node.name.text}' should be static",
|
||||
context: node);
|
||||
}
|
||||
if (node.isConst && !node.isStatic) {
|
||||
problem(node, "The const field '${node.name!.text}' should be static",
|
||||
problem(node, "The const field '${node.name.text}' should be static",
|
||||
context: node);
|
||||
}
|
||||
bool isImmutable = node.isLate
|
||||
|
@ -296,7 +296,7 @@ class VerifyingVisitor extends RecursiveResultVisitor<void> {
|
|||
if (isImmutable == node.hasSetter) {
|
||||
if (node.hasSetter) {
|
||||
problem(node,
|
||||
"The immutable field '${node.name!.text}' has a setter reference",
|
||||
"The immutable field '${node.name.text}' has a setter reference",
|
||||
context: node);
|
||||
} else {
|
||||
if (isOutline && node.isLate) {
|
||||
|
@ -306,7 +306,7 @@ class VerifyingVisitor extends RecursiveResultVisitor<void> {
|
|||
// whether it has an initializer or not.
|
||||
} else {
|
||||
problem(node,
|
||||
"The mutable field '${node.name!.text}' has no setter reference",
|
||||
"The mutable field '${node.name.text}' has no setter reference",
|
||||
context: node);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue