dart2js: Do not emit type metadata for fields declared in non-reflectable classes.

BUG=
R=karlklose@google.com, zarah@google.com

Committed: 67537ffbd7

Reverted: 6cc3bd1124

Committed: a1b630641e

Reverted: 5af9221e1b

Review URL: https://codereview.chromium.org//1169453005
This commit is contained in:
Stephan Herhut 2015-06-08 15:35:25 +02:00
parent b35b14e94f
commit e4255659dd
2 changed files with 13 additions and 3 deletions

View file

@ -161,9 +161,19 @@ class ClassEmitter extends CodeEmitterHelper {
fieldCode = FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE];
}
}
// Fields can only be reflected if their declaring class is reflectable
// (as they are only accessible via [ClassMirror.declarations]).
// However, set/get operations can be performed on them, so they are
// reflectable in some sense, which leads to [isAccessibleByReflection]
// reporting `true`.
if (backend.isAccessibleByReflection(fieldElement)) {
DartType type = fieldElement.type;
reflectionMarker = '-${task.metadataCollector.reifyType(type)}';
if (fieldElement.isTopLevel ||
backend.isAccessibleByReflection(fieldElement.enclosingClass)) {
DartType type = fieldElement.type;
reflectionMarker = '-${task.metadataCollector.reifyType(type)}';
} else {
reflectionMarker = '-';
}
}
String builtFieldname = '$fieldName$fieldCode$reflectionMarker';
builder.addField(builtFieldname);

View file

@ -2170,7 +2170,7 @@ class JsVariableMirror extends JsDeclarationMirror implements VariableMirror {
}
}
}
int type = int.parse(fieldInformation[1]);
int type = int.parse(fieldInformation[1], onError: (_) => null);
return new JsVariableMirror(s(unmangledName),
jsName,
type,