1 package org.simantics.scl.ui.search;
3 import java.util.ArrayList;
5 import org.eclipse.core.runtime.IProgressMonitor;
6 import org.eclipse.core.runtime.IStatus;
7 import org.eclipse.core.runtime.OperationCanceledException;
8 import org.eclipse.core.runtime.Status;
9 import org.eclipse.search.internal.ui.text.SearchResultUpdater;
10 import org.eclipse.search.ui.ISearchQuery;
11 import org.eclipse.search.ui.ISearchResult;
12 import org.eclipse.search.ui.text.Match;
13 import org.simantics.scl.compiler.common.names.Name;
14 import org.simantics.scl.compiler.errors.Failable;
15 import org.simantics.scl.compiler.module.Module;
16 import org.simantics.scl.compiler.module.debug.ModuleDebugInfo;
17 import org.simantics.scl.compiler.module.debug.SymbolReference;
18 import org.simantics.scl.compiler.module.repository.ModuleRepository;
19 import org.simantics.scl.osgi.SCLOsgi;
21 import gnu.trove.procedure.TObjectProcedure;
23 public class SCLSearchQuery implements ISearchQuery {
25 private SCLSearchResult result;
26 private String moduleName;
27 private Name valueName;
29 public SCLSearchQuery(Name valueName, String localModuleName) {
30 this.valueName = valueName;
31 this.moduleName = localModuleName;
35 public IStatus run(IProgressMonitor monitor) throws OperationCanceledException {
36 SCLSearchResult current = (SCLSearchResult) getSearchResult();
38 ModuleRepository repo = SCLOsgi.MODULE_REPOSITORY;
39 Name localName = Name.create(moduleName, valueName.name);
40 repo.getSourceRepository().forAllModules(new TObjectProcedure<String>() {
43 public boolean execute(String moduleName) {
44 Failable<Module> failableModule = repo.getModule(moduleName);
45 if (failableModule.didSucceed()) {
46 Module module = failableModule.getResult();
47 ModuleDebugInfo info = module.getModuleDebugInfo();
49 ArrayList<SymbolReference> results = info.symbolReferences;
50 for (SymbolReference ref : results) {
51 if (ref.referred.equals(valueName) || ref.referred.equals(localName)) {
52 result.addMatch(new Match(ref, Match.UNIT_LINE, -1, 1));
60 return Status.OK_STATUS;
64 public String getLabel() {
65 return "Search references for ";
69 public boolean canRerun() {
74 public boolean canRunInBackground() {
79 public ISearchResult getSearchResult() {
81 result = new SCLSearchResult(this);
82 new SearchResultUpdater(result);
87 public String getValueName() {
88 return valueName.toString();