Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: pkg/analysis_server/lib/src/services/search/search_engine_internal2.dart

Issue 2818163003: Make copy of the drivers list in SearchEngineImpl2 to avoid ConcurrentModificationError. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:analysis_server/src/services/search/search_engine.dart'; 7 import 'package:analysis_server/src/services/search/search_engine.dart';
8 import 'package:analyzer/dart/element/element.dart'; 8 import 'package:analyzer/dart/element/element.dart';
9 import 'package:analyzer/src/dart/analysis/driver.dart'; 9 import 'package:analyzer/src/dart/analysis/driver.dart';
10 import 'package:analyzer/src/dart/analysis/search.dart'; 10 import 'package:analyzer/src/dart/analysis/search.dart';
(...skipping 21 matching lines...) Expand all
32 } 32 }
33 } 33 }
34 34
35 await addSubtypes(type); 35 await addSubtypes(type);
36 return allSubtypes; 36 return allSubtypes;
37 } 37 }
38 38
39 @override 39 @override
40 Future<List<SearchMatch>> searchMemberDeclarations(String name) async { 40 Future<List<SearchMatch>> searchMemberDeclarations(String name) async {
41 List<SearchMatch> allDeclarations = []; 41 List<SearchMatch> allDeclarations = [];
42 for (AnalysisDriver driver in _drivers) { 42 List<AnalysisDriver> drivers = _drivers.toList();
43 for (AnalysisDriver driver in drivers) {
43 List<Element> elements = await driver.search.classMembers(name); 44 List<Element> elements = await driver.search.classMembers(name);
44 allDeclarations.addAll(elements.map(_SearchMatch.forElement)); 45 allDeclarations.addAll(elements.map(_SearchMatch.forElement));
45 } 46 }
46 return allDeclarations; 47 return allDeclarations;
47 } 48 }
48 49
49 @override 50 @override
50 Future<List<SearchMatch>> searchMemberReferences(String name) async { 51 Future<List<SearchMatch>> searchMemberReferences(String name) async {
51 List<SearchResult> allResults = []; 52 List<SearchResult> allResults = [];
52 for (AnalysisDriver driver in _drivers) { 53 List<AnalysisDriver> drivers = _drivers.toList();
54 for (AnalysisDriver driver in drivers) {
53 List<SearchResult> results = 55 List<SearchResult> results =
54 await driver.search.unresolvedMemberReferences(name); 56 await driver.search.unresolvedMemberReferences(name);
55 allResults.addAll(results); 57 allResults.addAll(results);
56 } 58 }
57 return allResults.map(_SearchMatch.forSearchResult).toList(); 59 return allResults.map(_SearchMatch.forSearchResult).toList();
58 } 60 }
59 61
60 @override 62 @override
61 Future<List<SearchMatch>> searchReferences(Element element) async { 63 Future<List<SearchMatch>> searchReferences(Element element) async {
62 List<SearchResult> allResults = []; 64 List<SearchResult> allResults = [];
63 for (AnalysisDriver driver in _drivers) { 65 List<AnalysisDriver> drivers = _drivers.toList();
66 for (AnalysisDriver driver in drivers) {
64 List<SearchResult> results = await driver.search.references(element); 67 List<SearchResult> results = await driver.search.references(element);
65 allResults.addAll(results); 68 allResults.addAll(results);
66 } 69 }
67 return allResults.map(_SearchMatch.forSearchResult).toList(); 70 return allResults.map(_SearchMatch.forSearchResult).toList();
68 } 71 }
69 72
70 @override 73 @override
71 Future<List<SearchMatch>> searchSubtypes(ClassElement type) async { 74 Future<List<SearchMatch>> searchSubtypes(ClassElement type) async {
72 List<SearchResult> results = await _searchDirectSubtypes(type); 75 List<SearchResult> results = await _searchDirectSubtypes(type);
73 return results.map(_SearchMatch.forSearchResult).toList(); 76 return results.map(_SearchMatch.forSearchResult).toList();
74 } 77 }
75 78
76 @override 79 @override
77 Future<List<SearchMatch>> searchTopLevelDeclarations(String pattern) async { 80 Future<List<SearchMatch>> searchTopLevelDeclarations(String pattern) async {
78 List<SearchMatch> allDeclarations = []; 81 List<SearchMatch> allDeclarations = [];
79 RegExp regExp = new RegExp(pattern); 82 RegExp regExp = new RegExp(pattern);
80 for (AnalysisDriver driver in _drivers) { 83 List<AnalysisDriver> drivers = _drivers.toList();
84 for (AnalysisDriver driver in drivers) {
81 List<Element> elements = await driver.search.topLevelElements(regExp); 85 List<Element> elements = await driver.search.topLevelElements(regExp);
82 allDeclarations.addAll(elements.map(_SearchMatch.forElement)); 86 allDeclarations.addAll(elements.map(_SearchMatch.forElement));
83 } 87 }
84 return allDeclarations; 88 return allDeclarations;
85 } 89 }
86 90
87 Future<List<SearchResult>> _searchDirectSubtypes(ClassElement type) async { 91 Future<List<SearchResult>> _searchDirectSubtypes(ClassElement type) async {
88 List<SearchResult> allResults = []; 92 List<SearchResult> allResults = [];
89 for (AnalysisDriver driver in _drivers) { 93 List<AnalysisDriver> drivers = _drivers.toList();
94 for (AnalysisDriver driver in drivers) {
90 List<SearchResult> results = await driver.search.subTypes(type); 95 List<SearchResult> results = await driver.search.subTypes(type);
91 allResults.addAll(results); 96 allResults.addAll(results);
92 } 97 }
93 return allResults; 98 return allResults;
94 } 99 }
95 } 100 }
96 101
97 class _SearchMatch implements SearchMatch { 102 class _SearchMatch implements SearchMatch {
98 @override 103 @override
99 final String file; 104 final String file;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 } 193 }
189 if (kind == SearchResultKind.WRITE) { 194 if (kind == SearchResultKind.WRITE) {
190 return MatchKind.WRITE; 195 return MatchKind.WRITE;
191 } 196 }
192 if (kind == SearchResultKind.INVOCATION) { 197 if (kind == SearchResultKind.INVOCATION) {
193 return MatchKind.INVOCATION; 198 return MatchKind.INVOCATION;
194 } 199 }
195 return MatchKind.REFERENCE; 200 return MatchKind.REFERENCE;
196 } 201 }
197 } 202 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698