Index: pkg/analyzer/lib/src/dart/sdk/patch.dart |
diff --git a/pkg/analyzer/lib/src/dart/sdk/patch.dart b/pkg/analyzer/lib/src/dart/sdk/patch.dart |
index 02b497cf392cb33b32b80bc76bf7b56c4ded717c..44d48cb1cdf34e289a4eab7521d18935c3f482cb 100644 |
--- a/pkg/analyzer/lib/src/dart/sdk/patch.dart |
+++ b/pkg/analyzer/lib/src/dart/sdk/patch.dart |
@@ -100,9 +100,26 @@ class SdkPatcher { |
void _patchClassMembers( |
ClassDeclaration baseClass, ClassDeclaration patchClass) { |
+ String className = baseClass.name.name; |
List<ClassMember> membersToAppend = []; |
for (ClassMember patchMember in patchClass.members) { |
- if (patchMember is MethodDeclaration) { |
+ if (patchMember is FieldDeclaration) { |
+ if (_hasPatchAnnotation(patchMember.metadata)) { |
+ _failInPatch('attempts to patch a field', patchMember.offset); |
+ } |
+ List<VariableDeclaration> fields = patchMember.fields.variables; |
+ if (fields.length != 1) { |
+ _failInPatch('contains a field declaration with more than one field', |
+ patchMember.offset); |
+ } |
+ String name = fields[0].name.name; |
+ if (!Identifier.isPrivateName(className) && |
+ !Identifier.isPrivateName(name)) { |
+ // TODO(scheglov) allow adding public fields into dart:_internal |
+ _failInPatch('contains a public field', patchMember.offset); |
+ } |
+ membersToAppend.add(patchMember); |
+ } else if (patchMember is MethodDeclaration) { |
String name = patchMember.name.name; |
if (_hasPatchAnnotation(patchMember.metadata)) { |
for (ClassMember baseMember in baseClass.members) { |
@@ -181,7 +198,7 @@ class SdkPatcher { |
} |
} else { |
if (name == null) { |
- if (!Identifier.isPrivateName(baseClass.name.name)) { |
+ if (!Identifier.isPrivateName(className)) { |
_failInPatch( |
'contains an unnamed public constructor', patchMember.offset); |
} |
@@ -191,7 +208,6 @@ class SdkPatcher { |
membersToAppend.add(patchMember); |
} |
} else { |
- // TODO(scheglov) support field |
String className = patchClass.name.name; |
_failInPatch('contains an unsupported class member in $className', |
patchMember.offset); |