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

Unified Diff: pkg/compiler/lib/src/js_backend/native_data.dart

Issue 2727253007: Add NativeClassData/NativeClassDataBuilder (Closed)
Patch Set: Created 3 years, 10 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
Index: pkg/compiler/lib/src/js_backend/native_data.dart
diff --git a/pkg/compiler/lib/src/js_backend/native_data.dart b/pkg/compiler/lib/src/js_backend/native_data.dart
index 268eb3f79eb4c62732e558613dbd620dbc547a28..d71fa17d72562b881cfa116af510c11fcebffc12 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -16,9 +16,11 @@ import '../elements/elements.dart'
import '../elements/entities.dart';
import '../native/behavior.dart' show NativeBehavior;
-/// Additional element information for native classes and methods and js-interop
-/// methods.
-abstract class NativeData {
+/// Basic information for native classes and methods and js-interop
+/// classes.
+///
+/// This information is computed during loading using [NativeClassDataBuilder].
+abstract class NativeClassData {
/// Returns `true` if [cls] corresponds to a native JavaScript class.
///
/// A class is marked as native either through the `@Native(...)` annotation
@@ -26,6 +28,9 @@ abstract class NativeData {
/// mechanism allowed for user libraries.
bool isNativeClass(ClassEntity element);
+ /// Returns `true` if [element] or any of its superclasses is native.
+ bool isNativeOrExtendsNative(ClassElement element);
+
/// Returns `true` if [element] corresponds to a native JavaScript member.
///
/// A member is marked as native either through the native mechanism
@@ -34,8 +39,23 @@ abstract class NativeData {
/// libraries.
bool isNativeMember(MemberEntity element);
- /// Returns `true` if [element] or any of its superclasses is native.
- bool isNativeOrExtendsNative(ClassElement element);
+ /// Returns `true` if [element] is a JsInterop class.
+ bool isJsInteropClass(ClassElement element);
+}
+
+/// Additional element information for native classes and methods and js-interop
+/// methods.
+///
+/// This information is computed during resolution using [NativeDataBuilder].
+abstract class NativeData extends NativeClassData {
+ /// Returns the [NativeBehavior] for calling the native [method].
+ NativeBehavior getNativeMethodBehavior(MethodElement method);
+
+ /// Returns the [NativeBehavior] for reading from the native [field].
+ NativeBehavior getNativeFieldLoadBehavior(FieldElement field);
+
+ /// Returns the [NativeBehavior] for writing to the native [field].
+ NativeBehavior getNativeFieldStoreBehavior(FieldElement field);
/// Returns `true` if the name of [element] is fixed for the generated
/// JavaScript.
@@ -51,21 +71,9 @@ abstract class NativeData {
/// Returns `true` if [cls] has a `!nonleaf` tag word.
bool hasNativeTagsForcedNonLeaf(ClassElement cls);
- /// Returns the [NativeBehavior] for calling the native [method].
- NativeBehavior getNativeMethodBehavior(MethodElement method);
-
- /// Returns the [NativeBehavior] for reading from the native [field].
- NativeBehavior getNativeFieldLoadBehavior(FieldElement field);
-
- /// Returns the [NativeBehavior] for writing to the native [field].
- NativeBehavior getNativeFieldStoreBehavior(FieldElement field);
-
/// Returns `true` if [element] is part of JsInterop.
bool isJsInterop(Element element);
- /// Returns `true` if [element] is a JsInterop class.
- bool isJsInteropClass(ClassElement element);
-
/// Returns `true` if [element] is a JsInterop method.
bool isJsInteropMethod(MethodElement element);
@@ -77,7 +85,7 @@ abstract class NativeData {
String getUnescapedJSInteropName(String name);
}
-abstract class NativeDataBuilder {
+abstract class NativeClassDataBuilder {
/// Sets the native tag info for [cls].
///
/// The tag info string contains comma-separated 'words' which are either
@@ -92,6 +100,15 @@ abstract class NativeDataBuilder {
/// [element] in the generated JavaScript.
void setNativeMemberName(MemberElement element, String name);
+ /// Returns [element] as an explicit part of JsInterop. The js interop name is
+ /// expected to be computed later.
+ void markAsJsInterop(Element element);
+
+ /// Sets the explicit js interop [name] for [element].
+ void setJsInteropName(Element element, String name);
+}
+
+abstract class NativeDataBuilder {
/// Registers the [behavior] for calling the native [method].
void setNativeMethodBehavior(MethodElement method, NativeBehavior behavior);
@@ -100,16 +117,10 @@ abstract class NativeDataBuilder {
/// Registers the [behavior] for writing to the native [field].
void setNativeFieldStoreBehavior(FieldElement field, NativeBehavior behavior);
-
- /// Returns [element] as an explicit part of JsInterop. The js interop name is
- /// expected to be computed later.
- void markAsJsInterop(Element element);
-
- /// Sets the explicit js interop [name] for [element].
- void setJsInteropName(Element element, String name);
}
-class NativeDataImpl implements NativeData, NativeDataBuilder {
+class NativeDataImpl
+ implements NativeData, NativeDataBuilder, NativeClassDataBuilder {
/// The JavaScript names for elements implemented via typed JavaScript
/// interop.
Map<Element, String> jsInteropNames = <Element, String>{};
« no previous file with comments | « pkg/compiler/lib/src/js_backend/namer.dart ('k') | pkg/compiler/lib/src/js_backend/resolution_listener.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698