| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library docgen.models.owned_indexable; | |
| 6 | |
| 7 import '../exports/mirrors_util.dart' as dart2js_util; | |
| 8 import '../exports/source_mirrors.dart'; | |
| 9 | |
| 10 import '../library_helpers.dart'; | |
| 11 import '../mdn.dart'; | |
| 12 import '../package_helpers.dart'; | |
| 13 | |
| 14 import 'annotation.dart'; | |
| 15 import 'dummy_mirror.dart'; | |
| 16 import 'indexable.dart'; | |
| 17 import 'model_helpers.dart'; | |
| 18 | |
| 19 abstract class OwnedIndexable<TMirror extends DeclarationMirror> | |
| 20 extends Indexable<TMirror> { | |
| 21 /// List of the meta annotations on this item. | |
| 22 final List<Annotation> annotations; | |
| 23 | |
| 24 /// The object one scope-level above which this item is defined. | |
| 25 /// | |
| 26 /// Ex: The owner for a top level class, would be its enclosing library. | |
| 27 /// The owner of a local variable in a method would be the enclosing method. | |
| 28 final Indexable owner; | |
| 29 | |
| 30 /// Returns this object's qualified name, but following the conventions | |
| 31 /// we're using in Dartdoc, which is that library names with dots in them | |
| 32 /// have them replaced with hyphens. | |
| 33 String get docName => owner.docName + '.' + dart2js_util.nameOf(mirror); | |
| 34 | |
| 35 OwnedIndexable(DeclarationMirror mirror, Indexable owner) | |
| 36 : annotations = createAnnotations(mirror, owner.owningLibrary), | |
| 37 this.owner = owner, | |
| 38 super(mirror); | |
| 39 | |
| 40 /// Generates MDN comments from database.json. | |
| 41 String getMdnComment() { | |
| 42 var domAnnotation = this.annotations.firstWhere( | |
| 43 (e) => e.mirror.qualifiedName == #metadata.DomName, | |
| 44 orElse: () => null); | |
| 45 if (domAnnotation == null) return ''; | |
| 46 var domName = domAnnotation.parameters.single; | |
| 47 | |
| 48 return mdnComment(rootDirectory, logger, domName); | |
| 49 } | |
| 50 | |
| 51 String get packagePrefix => owner.packagePrefix; | |
| 52 | |
| 53 String findElementInScope(String name) { | |
| 54 var lookupFunc = determineLookupFunc(name); | |
| 55 var result = lookupFunc(mirror, name); | |
| 56 if (result != null) { | |
| 57 result = getDocgenObject(result); | |
| 58 if (result is DummyMirror) return packagePrefix + result.docName; | |
| 59 return result.packagePrefix + result.docName; | |
| 60 } | |
| 61 | |
| 62 if (owner != null) { | |
| 63 var result = owner.findElementInScope(name); | |
| 64 if (result != null) { | |
| 65 return result; | |
| 66 } | |
| 67 } | |
| 68 return super.findElementInScope(name); | |
| 69 } | |
| 70 } | |
| OLD | NEW |