mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 02:47:36 +00:00
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:
parent
b35b14e94f
commit
e4255659dd
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue