Use entities in some full_emitter sublibraries
R=sigmund@google.com Review-Url: https://codereview.chromium.org/2647793003 .
This commit is contained in:
@@ -262,6 +262,10 @@ abstract class Backend extends Target {
|
||||
/// Returns true if this element needs reflection information at runtime.
|
||||
bool isAccessibleByReflection(Element element) => true;
|
||||
|
||||
/// Returns true if this member element needs reflection information at
|
||||
/// runtime.
|
||||
bool isMemberAccessibleByReflection(MemberElement element) => true;
|
||||
|
||||
/// Returns true if this element is covered by a mirrorsUsed annotation.
|
||||
///
|
||||
/// Note that it might still be ok to tree shake the element away if no
|
||||
|
||||
@@ -1991,6 +1991,10 @@ class JavaScriptBackend extends Backend {
|
||||
return membersNeededForReflection.contains(element);
|
||||
}
|
||||
|
||||
bool isMemberAccessibleByReflection(MemberElement element) {
|
||||
return membersNeededForReflection.contains(element);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the element has to be resolved due to a mirrorsUsed
|
||||
* annotation. If we have insufficient mirrors used annotations, we only
|
||||
|
||||
@@ -4,15 +4,11 @@
|
||||
|
||||
library dart2js.js_emitter.full_emitter.class_builder;
|
||||
|
||||
import '../../elements/elements.dart'
|
||||
show
|
||||
ClassElement,
|
||||
Element;
|
||||
import '../../elements/elements.dart' show Entity;
|
||||
import '../../elements/entities.dart';
|
||||
import '../../js/js.dart' as jsAst;
|
||||
import '../../js/js.dart' show js;
|
||||
import '../../js_backend/js_backend.dart'
|
||||
show
|
||||
Namer;
|
||||
import '../../js_backend/js_backend.dart' show Namer;
|
||||
|
||||
/**
|
||||
* A data structure for collecting fragments of a class definition.
|
||||
@@ -25,13 +21,13 @@ class ClassBuilder {
|
||||
jsAst.Node functionType;
|
||||
List<jsAst.Node> fieldMetadata;
|
||||
|
||||
final Element element;
|
||||
final Entity element;
|
||||
final Namer namer;
|
||||
final bool isForActualClass;
|
||||
|
||||
ClassBuilder(this.element, this.namer, this.isForActualClass);
|
||||
|
||||
ClassBuilder.forClass(ClassElement cls, this.namer)
|
||||
ClassBuilder.forClass(ClassEntity cls, this.namer)
|
||||
: isForActualClass = true,
|
||||
element = cls;
|
||||
|
||||
|
||||
@@ -9,18 +9,10 @@ import '../../common/names.dart' show Names;
|
||||
import '../../elements/resolution_types.dart' show ResolutionDartType;
|
||||
import '../../deferred_load.dart' show OutputUnit;
|
||||
import '../../elements/elements.dart'
|
||||
show
|
||||
ClassElement,
|
||||
Element,
|
||||
FieldElement,
|
||||
MemberElement,
|
||||
Name;
|
||||
show ClassElement, Element, FieldElement, MemberElement, Name;
|
||||
import '../../js/js.dart' as jsAst;
|
||||
import '../../js/js.dart' show js;
|
||||
import '../../js_backend/js_backend.dart'
|
||||
show
|
||||
CompoundName,
|
||||
Namer;
|
||||
import '../../js_backend/js_backend.dart' show CompoundName, Namer;
|
||||
import '../../universe/selector.dart' show Selector;
|
||||
import '../../util/util.dart' show equalElements;
|
||||
import '../../world.dart' show ClosedWorld;
|
||||
|
||||
@@ -7,11 +7,11 @@ library dart2js.js_emitter.full_emitter.container_builder;
|
||||
import '../../constants/values.dart';
|
||||
import '../../elements/elements.dart'
|
||||
show
|
||||
Element,
|
||||
Elements,
|
||||
FunctionSignature,
|
||||
MetadataAnnotation,
|
||||
MethodElement;
|
||||
Element,
|
||||
Elements,
|
||||
FunctionSignature,
|
||||
MetadataAnnotation,
|
||||
MethodElement;
|
||||
import '../../js/js.dart' as jsAst;
|
||||
import '../../js/js.dart' show js;
|
||||
import '../js_emitter.dart' hide Emitter, EmitterFactory;
|
||||
|
||||
@@ -5,10 +5,7 @@
|
||||
library dart2js.js_emitter.full_emitter.interceptor_emitter;
|
||||
|
||||
import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
|
||||
import '../../elements/elements.dart'
|
||||
show
|
||||
ClassElement,
|
||||
MethodElement;
|
||||
import '../../elements/entities.dart';
|
||||
import '../../js/js.dart' as jsAst;
|
||||
import '../../js/js.dart' show js;
|
||||
import '../../world.dart' show ClosedWorld;
|
||||
@@ -22,14 +19,14 @@ class InterceptorEmitter extends CodeEmitterHelper {
|
||||
|
||||
InterceptorEmitter(this.closedWorld);
|
||||
|
||||
void recordMangledNameOfMemberMethod(MethodElement member, jsAst.Name name) {
|
||||
void recordMangledNameOfMemberMethod(MemberEntity member, jsAst.Name name) {
|
||||
if (backend.isInterceptedMethod(member)) {
|
||||
interceptorInvocationNames.add(name);
|
||||
}
|
||||
}
|
||||
|
||||
jsAst.Expression buildGetInterceptorMethod(
|
||||
jsAst.Name key, Set<ClassElement> classes) {
|
||||
jsAst.Name key, Set<ClassEntity> classes) {
|
||||
InterceptorStubGenerator stubGenerator =
|
||||
new InterceptorStubGenerator(compiler, namer, backend, closedWorld);
|
||||
jsAst.Expression function =
|
||||
@@ -46,11 +43,11 @@ class InterceptorEmitter extends CodeEmitterHelper {
|
||||
|
||||
parts.add(js.comment('getInterceptor methods'));
|
||||
|
||||
Map<jsAst.Name, Set<ClassElement>> specializedGetInterceptors =
|
||||
Map<jsAst.Name, Set<ClassEntity>> specializedGetInterceptors =
|
||||
backend.specializedGetInterceptors;
|
||||
List<jsAst.Name> names = specializedGetInterceptors.keys.toList()..sort();
|
||||
for (jsAst.Name name in names) {
|
||||
Set<ClassElement> classes = specializedGetInterceptors[name];
|
||||
Set<ClassEntity> classes = specializedGetInterceptors[name];
|
||||
parts.add(js.statement('#.# = #', [
|
||||
namer.globalObjectFor(backend.helpers.interceptorsLibrary),
|
||||
name,
|
||||
|
||||
@@ -4,16 +4,10 @@
|
||||
|
||||
library dart2js.js_emitter.full_emitter.nsm_emitter;
|
||||
|
||||
import '../../elements/elements.dart'
|
||||
show
|
||||
ClassElement,
|
||||
MemberElement;
|
||||
import '../../elements/entities.dart';
|
||||
import '../../js/js.dart' as jsAst;
|
||||
import '../../js/js.dart' show js;
|
||||
import '../../js_backend/js_backend.dart'
|
||||
show
|
||||
GetterName,
|
||||
SetterName;
|
||||
import '../../js_backend/js_backend.dart' show GetterName, SetterName;
|
||||
import '../../universe/selector.dart' show Selector;
|
||||
import '../../util/characters.dart' show $$, $A, $HASH, $Z, $a, $z;
|
||||
import '../../world.dart' show ClosedWorld;
|
||||
@@ -78,7 +72,7 @@ class NsmEmitter extends CodeEmitterHelper {
|
||||
if (reflectionName != null) {
|
||||
bool accessible = closedWorld.allFunctions
|
||||
.filter(selector, null)
|
||||
.any((MemberElement e) => backend.isAccessibleByReflection(e));
|
||||
.any(backend.isMemberAccessibleByReflection);
|
||||
addProperty(
|
||||
namer.asName('+$reflectionName'), js(accessible ? '2' : '0'));
|
||||
}
|
||||
@@ -179,7 +173,7 @@ class NsmEmitter extends CodeEmitterHelper {
|
||||
}
|
||||
// Startup code that loops over the method names and puts handlers on the
|
||||
// Object class to catch noSuchMethod invocations.
|
||||
ClassElement objectClass = compiler.commonElements.objectClass;
|
||||
ClassEntity objectClass = compiler.commonElements.objectClass;
|
||||
jsAst.Expression createInvocationMirror = backend.emitter
|
||||
.staticFunctionAccess(backend.helpers.createInvocationMirror);
|
||||
if (useDiffEncoding) {
|
||||
|
||||
Reference in New Issue
Block a user