diff --git a/lib/src/html/template_data.dart b/lib/src/html/template_data.dart index ced3611cc8..fe1b0588a5 100644 --- a/lib/src/html/template_data.dart +++ b/lib/src/html/template_data.dart @@ -9,32 +9,15 @@ abstract class HtmlOptions { String get toolVersion; } -class Subnav { - final String name; - final String href; - - Subnav(this.name, this.href); - - @override - String toString() => name; -} - abstract class TemplateData { final PackageGraph packageGraph; final HtmlOptions htmlOptions; - List _subNameItemCache; - TemplateData(this.htmlOptions, this.packageGraph); - List get displayedCategories => []; - String get documentation => self.documentation; - String get oneLineDoc => self.oneLineDoc; String get title; String get layoutTitle; String get metaDescription; - String get name => self.name; - String get kind => self is ModelElement ? (self as ModelElement).kind : null; List get navLinks; List get navLinksWithGenerics => []; @@ -48,24 +31,12 @@ abstract class TemplateData { bool get includeVersion => false; bool get hasHomepage => false; - String get homepage => null; - - bool get hasSubNav => subnavItems.isNotEmpty; - - List get subnavItems { - if (_subNameItemCache == null) { - _subNameItemCache = getSubNavItems().toList(); - } - return _subNameItemCache; - } String get htmlBase; T get self; String get version => htmlOptions.toolVersion; String get relCanonicalPrefix => htmlOptions.relCanonicalPrefix; - Iterable getSubNavItems() => []; - String _layoutTitle(String name, String kind, bool isDeprecated) { if (isDeprecated) { return '${name} ${kind}'; @@ -73,14 +44,6 @@ abstract class TemplateData { return '${name} ${kind}'; } } - - Iterable _gatherSubnavForInvokable(ModelElement element) { - if (element.hasSourceCode) { - return [new Subnav('Source', '${element.href}#source')]; - } else { - return []; - } - } } class PackageTemplateData extends TemplateData { @@ -98,21 +61,14 @@ class PackageTemplateData extends TemplateData { @override Package get self => package; @override - String get layoutTitle => _layoutTitle(package.name, kind, false); + String get layoutTitle => _layoutTitle(package.name, package.kind, false); @override String get metaDescription => '${package.name} API docs, for the Dart programming language.'; - @override - Iterable getSubNavItems() { - return [new Subnav('Libraries', '${package.href}#libraries')]; - } @override bool get hasHomepage => package.hasHomepage; - @override String get homepage => package.homepage; - @override - String get kind => package.kind; /// `null` for packages because they are at the root – not needed @override @@ -141,25 +97,6 @@ class CategoryTemplateData extends TemplateData { @override List get navLinks => [category.package]; - @override - Iterable getSubNavItems() sync* { - if (category.hasPublicClasses) - yield new Subnav('Libraries', '${category.href}#libraries'); - if (category.hasPublicClasses) - yield new Subnav('Classes', '${category.href}#classes'); - if (category.hasPublicConstants) - yield new Subnav('Constants', '${category.href}#constants'); - if (category.hasPublicProperties) - yield new Subnav('Properties', '${category.href}#properties'); - if (category.hasPublicFunctions) - yield new Subnav('Functions', '${category.href}#functions'); - if (category.hasPublicEnums) - yield new Subnav('Enums', '${category.href}#enums'); - if (category.hasPublicTypedefs) - yield new Subnav('Typedefs', '${category.href}#typedefs'); - if (category.hasPublicExceptions) - yield new Subnav('Exceptions', '${category.href}#exceptions'); - } @override Category get self => category; @@ -175,31 +112,12 @@ class LibraryTemplateData extends TemplateData { @override String get title => '${library.name} library - Dart API'; @override - String get documentation => library.documentation; - @override String get htmlBase => '..'; @override String get metaDescription => '${library.name} library API docs, for the Dart programming language.'; @override List get navLinks => [packageGraph.defaultPackage]; - @override - Iterable getSubNavItems() sync* { - if (library.hasPublicClasses) - yield new Subnav('Classes', '${library.href}#classes'); - if (library.hasPublicConstants) - yield new Subnav('Constants', '${library.href}#constants'); - if (library.hasPublicProperties) - yield new Subnav('Properties', '${library.href}#properties'); - if (library.hasPublicFunctions) - yield new Subnav('Functions', '${library.href}#functions'); - if (library.hasPublicEnums) - yield new Subnav('Enums', '${library.href}#enums'); - if (library.hasPublicTypedefs) - yield new Subnav('Typedefs', '${library.href}#typedefs'); - if (library.hasPublicExceptions) - yield new Subnav('Exceptions', '${library.href}#exceptions'); - } @override String get layoutTitle => @@ -250,23 +168,6 @@ class ClassTemplateData extends TemplateData { List get navLinks => [packageGraph.defaultPackage, library]; @override String get htmlBase => '..'; - @override - Iterable getSubNavItems() sync* { - if (clazz.hasPublicConstructors) - yield new Subnav('Constructors', '${clazz.href}#constructors'); - if (clazz.hasPublicProperties) - yield new Subnav('Properties', '${clazz.href}#instance-properties'); - if (clazz.hasPublicMethods) - yield new Subnav('Methods', '${clazz.href}#instance-methods'); - if (clazz.hasPublicOperators) - yield new Subnav('Operators', '${clazz.href}#operators'); - if (clazz.hasPublicStaticProperties) - yield new Subnav('Static Properties', '${clazz.href}#static-properties'); - if (clazz.hasPublicStaticMethods) - yield new Subnav('Static Methods', '${clazz.href}#static-methods'); - if (clazz.hasPublicConstants) - yield new Subnav('Constants', '${clazz.href}#constants'); - } Class get objectType { if (_objectType != null) { @@ -303,7 +204,6 @@ class ConstructorTemplateData extends TemplateData { @override List get navLinksWithGenerics => [clazz]; @override - Iterable getSubNavItems() => _gatherSubnavForInvokable(constructor); @override String get htmlBase => '../..'; @override @@ -324,13 +224,6 @@ class EnumTemplateData extends ClassTemplateData { Enum get eNum => clazz; @override Enum get self => eNum; - @override - Iterable getSubNavItems() => [ - new Subnav('Constants', '${eNum.href}#constants'), - new Subnav('Properties', '${eNum.href}#instance-properties'), - new Subnav('Methods', '${eNum.href}#instance-methods'), - new Subnav('Operators', '${eNum.href}#operators') - ]; } class FunctionTemplateData extends TemplateData { @@ -356,8 +249,6 @@ class FunctionTemplateData extends TemplateData { @override List get navLinks => [packageGraph.defaultPackage, library]; @override - Iterable getSubNavItems() => _gatherSubnavForInvokable(function); - @override String get htmlBase => '..'; } @@ -387,8 +278,6 @@ class MethodTemplateData extends TemplateData { @override List get navLinksWithGenerics => [clazz]; @override - Iterable getSubNavItems() => _gatherSubnavForInvokable(method); - @override String get htmlBase => '../..'; } @@ -458,8 +347,6 @@ class TypedefTemplateData extends TemplateData { List get navLinks => [packageGraph.defaultPackage, library]; @override String get htmlBase => '..'; - @override - Iterable getSubNavItems() => _gatherSubnavForInvokable(typeDef); } class TopLevelPropertyTemplateData extends TemplateData { diff --git a/lib/src/line_number_cache.dart b/lib/src/line_number_cache.dart index 966d77aa86..300023808e 100644 --- a/lib/src/line_number_cache.dart +++ b/lib/src/line_number_cache.dart @@ -42,27 +42,12 @@ class LineNumberCache { final Map> _lineNumbers = >{}; - int lineNumber(String file, int offset) { - if (offset == 0) { - return 0; - } else { - var lineMap = _lineNumbers.putIfAbsent( - file, () => _createLineNumbersMap(_fileContents(file))); - var lastKey = lineMap.lastKeyBefore(offset); - return lineMap[lastKey]; - } - } - Tuple2 lineAndColumn(String file, int offset) { - if (offset == 0) { - return new Tuple2(0, 0); - } else { - var lineMap = _lineNumbers.putIfAbsent( - file, () => _createLineNumbersMap(_fileContents(file))); - var lastKey = lineMap.lastKeyBefore(offset); - if (lastKey != null) { - return new Tuple2(lineMap[lastKey] + 1, offset - lastKey); - } + var lineMap = _lineNumbers.putIfAbsent( + file, () => _createLineNumbersMap(_fileContents(file))); + var lastKey = lineMap.lastKeyBefore(offset); + if (lastKey != null) { + return new Tuple2(lineMap[lastKey] + 1, offset - lastKey); } return null; } diff --git a/lib/src/model.dart b/lib/src/model.dart index 9983a4955f..8c8cf4d2b4 100644 --- a/lib/src/model.dart +++ b/lib/src/model.dart @@ -426,13 +426,6 @@ class Accessor extends ModelElement implements EnclosedElement { return _enclosingCombo; } - /// Call exactly once to set the enclosing combo for this Accessor. - set enclosingCombo(GetterSetterCombo combo) { - assert(_enclosingCombo == null || combo == _enclosingCombo); - assert(combo != null); - _enclosingCombo = combo; - } - bool get isSynthetic => element.isSynthetic; @override @@ -710,8 +703,6 @@ class Class extends ModelElement /// See [Inheritable.canonicalEnclosingElement]. bool contains(Element element) => allElements.containsKey(element); - ModelElement findModelElement(Element element) => allElements[element]; - Map> _membersByName; /// Given a ModelElement that is a member of some other class, return @@ -935,18 +926,6 @@ class Class extends ModelElement Iterable get publicInterfaces => filterNonPublic(interfaces); - List _interfaceChain; - List get interfaceChain { - if (_interfaceChain == null) { - _interfaceChain = []; - for (DefinedElementType interface in interfaces) { - _interfaceChain.add(interface); - _interfaceChain.addAll((interface.element as Class).interfaceChain); - } - } - return _interfaceChain; - } - bool get isAbstract => _cls.isAbstract; @override @@ -1063,7 +1042,6 @@ class Class extends ModelElement return typeChain; } - Iterable get superChainReversed => superChain.reversed; Iterable get publicSuperChain => filterNonPublic(superChain); Iterable get publicSuperChainReversed => @@ -1712,8 +1690,8 @@ class Field extends ModelElement this.getter, this.setter) : super(element, library, packageGraph, null) { assert(getter != null || setter != null); - if (getter != null) getter.enclosingCombo = this; - if (setter != null) setter.enclosingCombo = this; + if (getter != null) getter._enclosingCombo = this; + if (setter != null) setter._enclosingCombo = this; _setModelType(); } @@ -1788,8 +1766,6 @@ class Field extends ModelElement @override String get kind => isConst ? 'constant' : 'property'; - String get typeName => kind; - @override List get annotations { List all_annotations = new List(); @@ -1942,15 +1918,6 @@ abstract class GetterSetterCombo implements ModelElement { String get constantValueBase => _constantValueBase ??= _buildConstantValueBase(); - /// Returns true if both accessors are synthetic. - bool get hasSyntheticAccessors { - if ((hasPublicGetter && getter.isSynthetic) || - (hasPublicSetter && setter.isSynthetic)) { - return true; - } - return false; - } - bool get hasPublicGetter => hasGetter && getter.isPublic; bool get hasPublicSetter => hasSetter && setter.isPublic; @@ -2619,12 +2586,6 @@ class Library extends ModelElement with Categorization, TopLevelContainer { return name; } - static PackageMeta getPackageMeta(Element element) { - String sourcePath = element.source.fullName; - return new PackageMeta.fromDir( - new File(pathLib.canonicalize(sourcePath)).parent); - } - static String getLibraryName(LibraryElement element) { var source = element.source; @@ -2719,47 +2680,6 @@ class Library extends ModelElement with Categorization, TopLevelContainer { return (_allCanonicalModelElements ??= allModelElements.where((e) => e.isCanonical).toList()); } - - final Map _isReexportedBy = {}; - - /// Heuristic that tries to guess if this library is actually largely - /// reexported by some other library. We guess this by comparing the elements - /// inside each of allModelElements for both libraries. Don't use this - /// except as a last-resort for canonicalization as it is a pretty fuzzy - /// definition. - /// - /// If most of the elements from this library appear in the other, but not - /// the reverse, then the other library is considered to be a reexporter of - /// this one. - /// - /// If not, then the situation is either ambiguous, or the reverse is true. - /// Computing this is expensive, so cache it. - bool isReexportedBy(Library library) { - assert(packageGraph.allLibrariesAdded); - if (_isReexportedBy.containsKey(library)) return _isReexportedBy[library]; - Set otherElements = new Set() - ..addAll(library.allModelElements.map((l) => l.element)); - Set ourElements = new Set() - ..addAll(allModelElements.map((l) => l.element)); - if (ourElements.difference(otherElements).length <= - ourElements.length / 2) { - // Less than half of our elements are unique to us. - if (otherElements.difference(ourElements).length <= - otherElements.length / 2) { - // ... but the same is true for the other library. Reexporting - // is ambiguous. - _isReexportedBy[library] = false; - } else { - _isReexportedBy[library] = true; - } - } else { - // We have a lot of unique elements, we're probably not reexported by - // the other libraries. - _isReexportedBy[library] = false; - } - - return _isReexportedBy[library]; - } } class Method extends ModelElement @@ -2849,8 +2769,6 @@ class Method extends ModelElement return null; } - String get typeName => 'method'; - MethodElement get _method => (element as MethodElement); /// Methods can not be covariant; always returns false. @@ -3106,15 +3024,9 @@ abstract class ModelElement extends Canonicalization originalMember: originalMember); } if (e is TopLevelVariableElement) { - if (getter == null && setter == null) { - List allVariables = [] - ..addAll(library.properties) - ..addAll(library.constants); - newModelElement = allVariables.firstWhere((v) => v.element == e); - } else { - newModelElement = - new TopLevelVariable(e, library, packageGraph, getter, setter); - } + assert(getter != null || setter != null); + newModelElement = + new TopLevelVariable(e, library, packageGraph, getter, setter); } if (e is PropertyAccessorElement) { // TODO(jcollins-g): why test for ClassElement in enclosingElement? @@ -4729,9 +4641,6 @@ class Operator extends Method { String get name { return 'operator ${super.name}'; } - - @override - String get typeName => 'operator'; } class PackageGraph { @@ -6311,12 +6220,10 @@ class TopLevelVariable extends ModelElement PackageGraph packageGraph, this.getter, this.setter) : super(element, library, packageGraph, null) { if (getter != null) { - getter.enclosingCombo = this; - assert(getter.enclosingCombo != null); + getter._enclosingCombo = this; } if (setter != null) { - setter.enclosingCombo = this; - assert(setter.enclosingCombo != null); + setter._enclosingCombo = this; } } diff --git a/lib/src/model_utils.dart b/lib/src/model_utils.dart index 984180be79..28ccce0347 100644 --- a/lib/src/model_utils.dart +++ b/lib/src/model_utils.dart @@ -62,24 +62,6 @@ String getFileContentsFor(Element e) { return _fileContents[location]; } -Iterable getRequiredSdkLibraries( - DartSdk sdk, AnalysisContext context) { - var requiredLibs = sdk.sdkLibraries - .where((sdkLib) => sdkLib.shortName == 'dart:_interceptors'); - final Set allLibraryElements = new Set(); - for (var sdkLib in requiredLibs) { - Source source = sdk.mapDartUri(sdkLib.shortName); - allLibraryElements.add(context.computeLibraryElement(source)); - } - return allLibraryElements; -} - -bool isInExportedLibraries( - List libraries, LibraryElement library) { - return libraries - .any((lib) => lib == library || lib.exportedLibraries.contains(library)); -} - final RegExp slashes = new RegExp('[\/]'); bool hasPrivateName(Element e) { if (e.name == null) return false; diff --git a/test/resource_loader_test.dart b/test/resource_loader_test.dart index db4f9e5d7d..7fc5c3b8b7 100644 --- a/test/resource_loader_test.dart +++ b/test/resource_loader_test.dart @@ -14,5 +14,9 @@ void main() { await loader.loadAsString('package:dartdoc/templates/index.html'); expect(contents, isNotNull); }); + + test('throws if non-package', () async { + expect(loader.loadAsString('wefoij:something'), throwsArgumentError); + }); }); }