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

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

Issue 2732793002: Add NativeDataResolver (Closed)
Patch Set: Fix. Created 3 years, 9 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 d71fa17d72562b881cfa116af510c11fcebffc12..0d6b5ea5d38e0e4ae500f41fe01a5c5faeb62270 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -11,6 +11,7 @@ import '../elements/elements.dart'
Element,
FieldElement,
FunctionElement,
+ LibraryElement,
MemberElement,
MethodElement;
import '../elements/entities.dart';
@@ -31,13 +32,8 @@ abstract class NativeClassData {
/// 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
- /// (`@Native(...)` or the `native` pseudo keyword) allowed for internal
- /// libraries or via the typed JavaScriptInterop mechanism allowed for user
- /// libraries.
- bool isNativeMember(MemberEntity element);
+ /// Returns `true` if [element] is a JsInterop library.
+ bool isJsInteropLibrary(LibraryElement element);
Siggi Cherem (dart-lang) 2017/03/14 04:09:15 couple random thoughts here: - maybe this means w
Johnni Winther 2017/03/15 10:55:13 Acknowledged.
/// Returns `true` if [element] is a JsInterop class.
bool isJsInteropClass(ClassElement element);
@@ -48,6 +44,14 @@ abstract class NativeClassData {
///
/// This information is computed during resolution using [NativeDataBuilder].
abstract class NativeData extends NativeClassData {
+ /// Returns `true` if [element] corresponds to a native JavaScript member.
+ ///
+ /// A member is marked as native either through the native mechanism
+ /// (`@Native(...)` or the `native` pseudo keyword) allowed for internal
+ /// libraries or via the typed JavaScriptInterop mechanism allowed for user
+ /// libraries.
+ bool isNativeMember(MemberEntity element);
+
/// Returns the [NativeBehavior] for calling the native [method].
NativeBehavior getNativeMethodBehavior(MethodElement method);
@@ -72,10 +76,14 @@ abstract class NativeData extends NativeClassData {
bool hasNativeTagsForcedNonLeaf(ClassElement cls);
/// Returns `true` if [element] is part of JsInterop.
+ ///
+ /// Deprecated: Use [isJsInteropLibrary], [isJsInteropClass] or
+ /// [isJsInteropMember] instead.
+ @deprecated
bool isJsInterop(Element element);
/// Returns `true` if [element] is a JsInterop method.
- bool isJsInteropMethod(MethodElement element);
+ bool isJsInteropMember(MethodElement element);
/// Returns the explicit js interop name for [element].
String getJsInteropName(Element element);
@@ -93,19 +101,13 @@ abstract class NativeClassDataBuilder {
/// begin with `!`.
void setNativeClassTagInfo(ClassElement cls, String tagInfo);
- /// Returns the list of native tag words for [cls].
- List<String> getNativeTagsOfClassRaw(ClassElement cls);
-
- /// Sets the native [name] for the member [element]. This name is used for
- /// [element] in the generated JavaScript.
- void setNativeMemberName(MemberElement element, String name);
-
- /// Returns [element] as an explicit part of JsInterop. The js interop name is
+ /// Marks [element] as an explicit part of JsInterop. The js interop name is
/// expected to be computed later.
- void markAsJsInterop(Element element);
+ void markAsJsInteropLibrary(LibraryElement element);
- /// Sets the explicit js interop [name] for [element].
- void setJsInteropName(Element element, String name);
+ /// Marks [element] as an explicit part of JsInterop. The js interop name is
+ /// expected to be computed later.
+ void markAsJsInteropClass(ClassElement element);
}
abstract class NativeDataBuilder {
@@ -117,6 +119,20 @@ abstract class NativeDataBuilder {
/// Registers the [behavior] for writing to the native [field].
void setNativeFieldStoreBehavior(FieldElement field, NativeBehavior behavior);
+
+ /// Returns the list of native tag words for [cls].
+ List<String> getNativeTagsOfClassRaw(ClassElement cls);
+
+ /// Returns [element] as an explicit part of JsInterop. The js interop name is
+ /// expected to be computed later.
+ void markAsJsInteropMember(MemberElement element);
+
+ /// Sets the native [name] for the member [element]. This name is used for
+ /// [element] in the generated JavaScript.
+ void setNativeMemberName(MemberElement element, String name);
+
+ /// Sets the explicit js interop [name] for [element].
+ void setJsInteropName(Element element, String name);
}
class NativeDataImpl
@@ -153,12 +169,27 @@ class NativeDataImpl
return jsInteropNames.containsKey(element.declaration);
}
- /// Returns [element] as an explicit part of JsInterop. The js interop name is
+ /// Marks [element] as an explicit part of JsInterop. The js interop name is
/// expected to be computed later.
void markAsJsInterop(Element element) {
jsInteropNames[element.declaration] = null;
}
+ @override
+ void markAsJsInteropLibrary(LibraryElement element) {
+ markAsJsInterop(element);
+ }
+
+ @override
+ void markAsJsInteropClass(ClassElement element) {
+ markAsJsInterop(element);
+ }
+
+ @override
+ void markAsJsInteropMember(MemberElement element) {
+ markAsJsInterop(element);
+ }
+
/// Sets the explicit js interop [name] for [element].
void setJsInteropName(Element element, String name) {
assert(invariant(element, isJsInterop(element),
@@ -190,11 +221,14 @@ class NativeDataImpl
}
}
+ /// Returns `true` if [element] is a JsInterop library.
+ bool isJsInteropLibrary(LibraryElement element) => isJsInterop(element);
+
/// Returns `true` if [element] is a JsInterop class.
bool isJsInteropClass(ClassElement element) => isJsInterop(element);
/// Returns `true` if [element] is a JsInterop method.
- bool isJsInteropMethod(MethodElement element) => isJsInterop(element);
+ bool isJsInteropMember(MethodElement element) => isJsInterop(element);
/// Returns `true` if the name of [element] is fixed for the generated
/// JavaScript.

Powered by Google App Engine
This is Rietveld 408576698