Index: pkg/compiler/lib/src/native/enqueue.dart |
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart |
index 1f9b47b5d070e8b23178b0a348399a3fd4ea1bf6..18ef9d0bacdfa2e1edea3d04342964d8b816d11e 100644 |
--- a/pkg/compiler/lib/src/native/enqueue.dart |
+++ b/pkg/compiler/lib/src/native/enqueue.dart |
@@ -139,6 +139,7 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer { |
if (backend.isolateHelperLibrary != null) { |
processNativeClassesInLibrary(backend.isolateHelperLibrary); |
} |
+ libraries.forEach(processJsInteropAnnotationsInLibrary); |
processSubclassesOfNativeClasses(libraries); |
if (!enableLiveTypeAnalysis) { |
nativeClasses.forEach((c) => enqueueClass(c, 'forced')); |
@@ -146,6 +147,13 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer { |
} |
} |
+ void processJsInteropAnnotationsInLibrary(LibraryElement library) { |
+ checkJsInteropAnnotation(compiler, library); |
+ library.implementation.forEachLocalMember((Element element) { |
+ checkJsInteropAnnotation(compiler, element); |
+ }); |
+ } |
+ |
void processNativeClassesInLibrary(LibraryElement library) { |
// Use implementation to ensure the inclusion of injected members. |
library.implementation.forEachLocalMember((Element element) { |
@@ -608,6 +616,8 @@ class NativeResolutionEnqueuer extends NativeEnqueuerBase { |
void processNativeClass(ClassElement classElement) { |
super.processNativeClass(classElement); |
+ // Js Interop interfaces do not have tags. |
+ if (classElement.isJsInterop) return; |
// Since we map from dispatch tags to classes, a dispatch tag must be used |
// on only one native class. |
for (String tag in nativeTagsOfClass(classElement)) { |