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

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

Issue 2852603003: Move JsInteropAnalysis.onQueueClosed to AnnotationProcessor.processJsInteropAnnotation (Closed)
Patch Set: Register anonymous classes correctly + add test Created 3 years, 8 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 5029821e0f105e48883b1300041833553466850c..67f495368e14d6ae2a612d3bef18f33a62ed3703 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -30,6 +30,9 @@ abstract class NativeBasicData {
/// Returns `true` if [element] or any of its superclasses is native.
bool isNativeOrExtendsNative(ClassEntity element);
+ /// Returns `true` if js interop features are used.
+ bool get isJsInteropUsed;
+
/// Returns `true` if [element] is a JsInterop library.
bool isJsInteropLibrary(LibraryEntity element);
@@ -79,6 +82,9 @@ abstract class NativeData extends NativeBasicData {
/// Returns the explicit js interop name for library [element].
String getJsInteropLibraryName(LibraryEntity element);
+ /// Returns `true` if [element] has an `@Anonymous` annotation.
+ bool isAnonymousJsInteropClass(ClassEntity element);
+
/// Returns the explicit js interop name for class [element].
String getJsInteropClassName(ClassEntity element);
@@ -132,6 +138,9 @@ abstract class NativeDataBuilder {
/// Sets the explicit js interop [name] for the library [element].
void setJsInteropLibraryName(LibraryEntity element, String name);
+ /// Marks [element] as having an `@Anonymous` annotation.
+ void markJsInteropClassAsAnonymous(ClassEntity element);
+
/// Sets the explicit js interop [name] for the class [element].
void setJsInteropClassName(ClassEntity element, String name);
@@ -219,6 +228,9 @@ class NativeBasicDataImpl implements NativeBasicData {
return nativeClassTagInfo[cls].isNonLeaf;
}
+ bool get isJsInteropUsed =>
+ jsInteropLibraries.isNotEmpty || jsInteropClasses.isNotEmpty;
+
/// Returns `true` if [element] is explicitly marked as part of JsInterop.
bool isJsInteropLibrary(LibraryEntity element) {
return jsInteropLibraries.contains(element);
@@ -264,6 +276,7 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
/// The JavaScript names for elements implemented via typed JavaScript
/// interop.
Map<LibraryEntity, String> jsInteropLibraryNames = <LibraryEntity, String>{};
+ Set<ClassEntity> anonymousJsInteropClasses = new Set<ClassEntity>();
Map<ClassEntity, String> jsInteropClassNames = <ClassEntity, String>{};
/// The JavaScript names for elements implemented via typed JavaScript
@@ -309,6 +322,16 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
jsInteropLibraryNames[element] = name;
}
+ @override
+ bool isAnonymousJsInteropClass(ClassEntity element) {
+ return anonymousJsInteropClasses.contains(element);
+ }
+
+ @override
+ void markJsInteropClassAsAnonymous(ClassEntity element) {
+ anonymousJsInteropClasses.add(element);
+ }
+
/// Sets the explicit js interop [name] for the class [element].
void setJsInteropClassName(ClassEntity element, String name) {
assert(invariant(element, _nativeBasicData.isJsInteropClass(element),
@@ -347,6 +370,8 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
bool hasNativeTagsForcedNonLeaf(ClassEntity cls) =>
_nativeBasicData.hasNativeTagsForcedNonLeaf(cls);
+ bool get isJsInteropUsed => _nativeBasicData.isJsInteropUsed;
+
/// Returns `true` if [element] is a JsInterop library.
bool isJsInteropLibrary(LibraryEntity element) =>
_nativeBasicData.isJsInteropLibrary(element);

Powered by Google App Engine
This is Rietveld 408576698