diff --git a/app/lib/search/sdk_mem_index.dart b/app/lib/search/sdk_mem_index.dart index dc7884b520..b3d28331ea 100644 --- a/app/lib/search/sdk_mem_index.dart +++ b/app/lib/search/sdk_mem_index.dart @@ -32,8 +32,6 @@ const _defaultApiPageDirWeights = { /// In-memory index for SDK library search queries. class SdkMemIndex { - final String _sdk; - final Uri _baseUri; final _libraries = {}; final Map _apiPageDirWeights; @@ -43,10 +41,8 @@ class SdkMemIndex { required DartdocIndex index, Set? allowedLibraries, Map? apiPageDirWeights, - }) : _sdk = sdk, - _baseUri = baseUri, - _apiPageDirWeights = apiPageDirWeights ?? _defaultApiPageDirWeights { - _addDartdocIndex(index, allowedLibraries); + }) : _apiPageDirWeights = apiPageDirWeights ?? _defaultApiPageDirWeights { + _addDartdocIndex(sdk, baseUri, index, allowedLibraries); } static SdkMemIndex dart({required DartdocIndex index}) { @@ -72,11 +68,13 @@ class SdkMemIndex { Uri.parse('https://api.flutter.dev/flutter/index.json'); void _addDartdocIndex( + String sdk, + Uri baseUri, DartdocIndex index, Set? allowedLibraries, ) { final textsPerLibrary = >{}; - final baseUrls = {}; + final baseUris = {}; final descriptions = {}; for (final f in index.entries) { @@ -89,7 +87,7 @@ class SdkMemIndex { continue; } if (f.isLibrary) { - baseUrls[library] = _baseUri.resolve(f.href!).toString(); + baseUris[library] = baseUri.resolve(f.href!); final desc = f.desc?.replaceAll(RegExp(r'\s+'), ' ').trim(); if (desc != null && desc.isNotEmpty) { @@ -105,8 +103,10 @@ class SdkMemIndex { } for (final e in textsPerLibrary.entries) { _libraries[e.key] = _Library( + sdk: sdk, + sdkBaseUri: baseUri, name: e.key, - baseUrl: baseUrls[e.key], + libraryUrl: (baseUris[e.key] ?? baseUri).toString(), description: descriptions[e.key], tokenIndex: TokenIndex.fromMap(e.value), ); @@ -156,16 +156,16 @@ class SdkMemIndex { .take(limit) .where((h) => h.score >= minScore) .map((hit) => SdkLibraryHit( - sdk: _sdk, + sdk: hit.library.sdk, library: hit.library.name, description: hit.library.description, - url: hit.library.baseUrl ?? _baseUri.toString(), + url: hit.library.libraryUrl, score: hit.score, apiPages: hit.top.entries .map( (e) => ApiPageRef( path: e.key, - url: _baseUri.resolve(e.key).toString(), + url: hit.library.sdkBaseUri.resolve(e.key).toString(), ), ) .toList(), @@ -188,14 +188,18 @@ class _Hit { } class _Library { + final String sdk; + final Uri sdkBaseUri; final String name; - final String? baseUrl; + final String libraryUrl; final String? description; final TokenIndex tokenIndex; _Library({ + required this.sdk, + required this.sdkBaseUri, required this.name, - required this.baseUrl, + required this.libraryUrl, required this.description, required this.tokenIndex, });