OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library js.transformer.utils; | 5 library js.transformer.utils; |
6 | 6 |
| 7 import 'package:analyzer/analyzer.dart'; |
7 import 'package:analyzer/src/generated/element.dart'; | 8 import 'package:analyzer/src/generated/element.dart'; |
8 import 'package:analyzer/analyzer.dart'; | 9 import 'package:barback/barback.dart'; |
9 import 'package:js/src/metadata.dart'; | 10 import 'package:js/src/metadata.dart'; |
| 11 import 'package:path/path.dart' as path; |
10 import 'package:quiver/iterables.dart' show max; | 12 import 'package:quiver/iterables.dart' show max; |
11 | 13 |
12 const String INITIALIZER_SUFFIX = "__init_js__.dart"; | 14 const String DART_INITIALIZER_SUFFIX = "__init_js__.dart"; |
| 15 const String JS_INITIALIZER_SUFFIX = "__init_js__.js"; |
13 | 16 |
14 JsProxy getProxyAnnotation(ClassElement interface, ClassElement jsProxyClass) { | 17 JsProxy getProxyAnnotation(ClassElement interface, ClassElement jsProxyClass) { |
15 var node = interface.node; | 18 var node = interface.node; |
16 for (Annotation a in node.metadata) { | 19 for (Annotation a in node.metadata) { |
17 var e = a.element; | 20 var e = a.element; |
18 if (e is ConstructorElement && e.type.returnType == jsProxyClass.type) { | 21 if (e is ConstructorElement && e.type.returnType == jsProxyClass.type) { |
19 bool global; | 22 bool global; |
20 String constructor; | 23 String constructor; |
21 for (Expression e in a.arguments.arguments) { | 24 for (Expression e in a.arguments.arguments) { |
22 if (e is NamedExpression) { | 25 if (e is NamedExpression) { |
(...skipping 23 matching lines...) Expand all Loading... |
46 insertImportOffset = libraryDirective.end; | 49 insertImportOffset = libraryDirective.end; |
47 } | 50 } |
48 } else { | 51 } else { |
49 insertImportOffset = max(library.definingCompilationUnit.node.directives | 52 insertImportOffset = max(library.definingCompilationUnit.node.directives |
50 .where((d) => d is ImportDirective) | 53 .where((d) => d is ImportDirective) |
51 .map((ImportDirective e) => e.end)); | 54 .map((ImportDirective e) => e.end)); |
52 if (insertImportOffset == null) insertImportOffset = 0; | 55 if (insertImportOffset == null) insertImportOffset = 0; |
53 } | 56 } |
54 return insertImportOffset; | 57 return insertImportOffset; |
55 } | 58 } |
| 59 |
| 60 |
| 61 final illegalIdRegex = new RegExp(r'[^a-zA-Z0-9_]'); |
| 62 |
| 63 String assetIdToPrefix(AssetId id) => |
| 64 '_js__${id.package}__${id.path.replaceAll(illegalIdRegex, '_')}'; |
| 65 |
| 66 String assetIdToJsExportCall(AssetId id) => |
| 67 '_export_${id.path.replaceAll(illegalIdRegex, '_')}(dart);'; |
| 68 |
| 69 // TODO(justinfagnani): put this in code_transformers ? |
| 70 String getImportUri(AssetId importId, AssetId from) { |
| 71 if (importId.path.startsWith('lib/')) { |
| 72 // we support package imports |
| 73 return "package:${importId.package}/${importId.path.substring(4)}"; |
| 74 } else if (importId.package == from.package) { |
| 75 // we can support relative imports |
| 76 return path.relative(importId.path, from: path.dirname(from.path)); |
| 77 } |
| 78 // cannot import |
| 79 return null; |
| 80 } |
OLD | NEW |