| Index: lib/src/codegen/js_interop.dart | 
| diff --git a/lib/src/codegen/js_interop.dart b/lib/src/codegen/js_interop.dart | 
| index 54fc8fccb35aaa5f30985d2637ceb3c38d5cb302..c953f7b0975cfb7865e1b965c84e6ad7ad2d8adc 100644 | 
| --- a/lib/src/codegen/js_interop.dart | 
| +++ b/lib/src/codegen/js_interop.dart | 
| @@ -3,8 +3,11 @@ | 
| // BSD-style license that can be found in the LICENSE file. | 
|  | 
| import 'package:analyzer/src/generated/ast.dart'; | 
| -import 'package:analyzer/src/generated/element.dart'; | 
| import 'package:analyzer/src/generated/constant.dart'; | 
| +import 'package:analyzer/src/generated/element.dart'; | 
| +import 'package:analyzer/src/generated/resolver.dart' show TypeProvider; | 
| + | 
| +import '../utils.dart'; | 
|  | 
| bool _isJsLibType(String expectedName, Element e) => | 
| e?.name == expectedName && _isJsLib(e.library); | 
| @@ -57,3 +60,14 @@ bool isJsPeerInterface(DartObjectImpl value) => | 
|  | 
| bool isNativeAnnotation(DartObjectImpl value) => | 
| _isBuiltinAnnotation(value, '_js_helper', 'Native'); | 
| + | 
| +/// Returns the name value of the `JSExportName` annotation (when compiling | 
| +/// the SDK), or `null` if there's none. This is used to control the name | 
| +/// under which functions are compiled and exported. | 
| +String getJSExportName(Element e, TypeProvider types) { | 
| +  if (!e.source.isInSystemLibrary) { | 
| +    return null; | 
| +  } | 
| +  var jsName = findAnnotation(e, isJSExportNameAnnotation); | 
| +  return getConstantField(jsName, 'name', types.stringType)?.toStringValue(); | 
| +} | 
|  |