package org.jmlspecs.openjml.eclipse;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
import org.eclipse.jdt.ui.text.java.hover.IJavaEditorTextHover;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
public class CounterexampleHover implements IJavaEditorTextHover {
IEditorPart editor;
IResource res;
IJavaProject currentProject;
@Override
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
// TODO Auto-generated method stub
try {
//Object o = ((CompilationUnitEditor)textViewer).
if (res == null) return null;
int pos = hoverRegion.getOffset();
int end = pos + hoverRegion.getLength();
String value = Activator.utils().getInterface(currentProject).getCEValue(pos, end, null, res);
//if (value != null) Log.log("Counterexample hover: " + value);
return value == null ? null : ("Counterexample: " + value);
} catch (Exception e) {
return null;
}
}
@Override
public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
Point selection= textViewer.getSelectedRange();
if (selection.x <= offset && offset < selection.x + selection.y)
return new Region(selection.x, selection.y);
return new Region(offset, 0);
}
@Override
public void setEditor(IEditorPart editor) {
this.editor = editor;
try {
IEditorInput einput = editor.getEditorInput();
res = (IResource)einput.getAdapter(IResource.class);
IFileEditorInput input = (IFileEditorInput) einput;
IProject p = input.getFile().getProject();
currentProject = p.hasNature(JavaCore.NATURE_ID) ? JavaCore.create(p) : null;
} catch (Exception e) {
res = null;
currentProject = null;
}
}
}