import org.eclipse.ui.PlatformUI;
import org.simantics.scl.compiler.errors.Locations;
import org.simantics.scl.compiler.module.debug.SymbolReference;
+import org.simantics.scl.db.SCLExpressionTableEntry;
import org.simantics.scl.ui.editor2.OpenSCLDefinition;
+import org.simantics.ui.workbench.action.DefaultActions;
public class SCLSearchResultPage extends AbstractTextSearchViewPage {
private static final ViewerComparator comparator = new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
- SymbolReference r1 = (SymbolReference)e1;
- SymbolReference r2 = (SymbolReference)e2;
- int c = r1.referrer.toString().compareTo(r2.referrer.toString());
- if (c != 0) {
- return c;
+ if (e1 instanceof SymbolReference && e2 instanceof SymbolReference) {
+ SymbolReference r1 = (SymbolReference)e1;
+ SymbolReference r2 = (SymbolReference)e2;
+ int c = r1.referrer.toString().compareTo(r2.referrer.toString());
+ if (c != 0) {
+ return c;
+ } else {
+ return Integer.compare(Locations.beginOf(r1.referenceLocation), Locations.beginOf(r2.referenceLocation));
+ }
+ } else if (e1 instanceof SymbolReference && e2 instanceof SCLExpressionTableEntry) {
+ return 1;
+ } else if (e2 instanceof SymbolReference && e1 instanceof SCLExpressionTableEntry) {
+ return -1;
} else {
- return Integer.compare(Locations.beginOf(r1.referenceLocation), Locations.beginOf(r2.referenceLocation));
+ SCLExpressionTableEntry r1 = (SCLExpressionTableEntry)e1;
+ SCLExpressionTableEntry r2 = (SCLExpressionTableEntry)e2;
+ return r1.getContent().compareTo(r2.getContent());
}
}
};
protected void handleOpen(OpenEvent event) {
Object selection = ((StructuredSelection)event.getSelection()).getFirstElement();
if (selection != null) {
- SymbolReference reference = (SymbolReference) selection;
- OpenSCLDefinition.scheduleOpenDefinition(reference.referrer.module, reference.referenceLocation);
+ open(selection);
}
}
@Override
protected void showMatch(Match match, int currentOffset, int currentLength) throws PartInitException {
- SymbolReference reference = (SymbolReference) match.getElement();
- OpenSCLDefinition.openDefinition(reference.referrer.module, reference.referenceLocation);
+ open(match.getElement());
+ }
+
+ private void open(Object selection) {
+ if (selection instanceof SymbolReference) {
+ SymbolReference reference = (SymbolReference) selection;
+ OpenSCLDefinition.scheduleOpenDefinition(reference.referrer.module, reference.referenceLocation);
+ } else if (selection instanceof SCLExpressionTableEntry) {
+ SCLExpressionTableEntry entry = (SCLExpressionTableEntry) selection;
+ DefaultActions.performDefaultAction(getControl().getDisplay().getActiveShell(), new StructuredSelection(entry.getResource()));
+ }
}
public static class SCLSearchResultContentProvider extends DecoratingStyledCellLabelProvider implements ITreeContentProvider, ILabelProvider {
@Override
public String getText(Object element) {
- SymbolReference ref = (SymbolReference) element;
- return ref.referrer.toString();
+ if (element instanceof SymbolReference) {
+ SymbolReference ref = (SymbolReference) element;
+ return ref.referrer.toString();
+ } else if (element instanceof SCLExpressionTableEntry) {
+ SCLExpressionTableEntry entry = (SCLExpressionTableEntry) element;
+ return entry.getContent();
+ } else {
+ return "unsupported element " + String.valueOf(element);
+ }
}
}
@Override
public StyledString getStyledText(Object element) {
- SymbolReference ref = (SymbolReference) element;
- return new StyledString(ref.referrer.toString()); //+ " " + ref.referred + " " + ref.referenceLocation);
+ return new StyledString(getText(element)); //+ " " + ref.referred + " " + ref.referenceLocation);
}
@Override
@Override
public String getText(Object element) {
- return null;
+ if (element instanceof SymbolReference) {
+ SymbolReference ref = (SymbolReference) element;
+ return ref.referrer.toString();
+ } else if (element instanceof SCLExpressionTableEntry) {
+ SCLExpressionTableEntry entry = (SCLExpressionTableEntry) element;
+ return entry.getContent();
+ } else {
+ return "unsupported element " + String.valueOf(element);
+ }
}
}