Use entities in some full_emitter sublibraries

R=sigmund@google.com

Review-Url: https://codereview.chromium.org/2647793003 .
This commit is contained in:
Johnni Winther
2017-01-23 11:26:28 +01:00
parent f39cc61489
commit bb9baa6822
7 changed files with 29 additions and 42 deletions
@@ -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) {