Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: pkg/analyzer/lib/src/dart/sdk/patch.dart

Issue 2416073002: Add support for patching fields. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/src/dart/sdk/patch_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « no previous file | pkg/analyzer/test/src/dart/sdk/patch_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698