Add context menu for type insertion
This commit is contained in:
parent
878bdcd1ba
commit
d88cdc599b
JavaCompilerPlugin/bundles/JavaCompilerPlugin.Plugin
@ -6,7 +6,6 @@ Bundle-Version: 0.1.0.qualifier
|
||||
Bundle-Vendor: de.dhbwstuttgart
|
||||
Bundle-Activator: typinferenzplugin.Activator
|
||||
Require-Bundle: org.eclipse.swt,
|
||||
javax.inject,
|
||||
org.eclipse.core.runtime,
|
||||
org.eclipse.jface.text,
|
||||
org.eclipse.ui.editors,
|
||||
@ -27,7 +26,9 @@ Require-Bundle: org.eclipse.swt,
|
||||
org.eclipse.equinox.p2.repository;bundle-version="2.3.200",
|
||||
org.eclipse.equinox.p2.metadata;bundle-version="2.3.100",
|
||||
org.eclipse.ui.ide,
|
||||
org.eclipse.ui.views
|
||||
org.eclipse.ui.views,
|
||||
org.eclipse.ui,
|
||||
org.eclipse.core.expressions
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-19
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Bundle-ClassPath: .,
|
||||
@ -55,5 +56,6 @@ Bundle-ClassPath: .,
|
||||
lib/ST4.jar,
|
||||
target/classes,
|
||||
typinferenzplugin
|
||||
Import-Package: javax.annotation;version="1.2.0"
|
||||
Import-Package: javax.annotation;version="1.2.0",
|
||||
javax.inject;version="1.0.0"
|
||||
Automatic-Module-Name: TypinferenzPlugin
|
||||
|
@ -75,4 +75,16 @@
|
||||
markerType="typinferenzplugin.replacemarker"
|
||||
class="typinferenzplugin.marker.QuickFixer"/>
|
||||
</extension>
|
||||
<extension
|
||||
point="org.eclipse.ui.menus">
|
||||
<menuContribution
|
||||
allPopups="true"
|
||||
class="typinferenzplugin.editor.RightClickMenu"
|
||||
locationURI="popup:#TextEditorContext">
|
||||
<dynamic
|
||||
class="typinferenzplugin.editor.InsertTypeContribution"
|
||||
id="typinferenzplugin.typeinsert.menu">
|
||||
</dynamic>
|
||||
</menuContribution>
|
||||
</extension>
|
||||
</plugin>
|
||||
|
47
JavaCompilerPlugin/bundles/JavaCompilerPlugin.Plugin/src/typinferenzplugin/editor/InsertTypeContribution.java
Normal file
47
JavaCompilerPlugin/bundles/JavaCompilerPlugin.Plugin/src/typinferenzplugin/editor/InsertTypeContribution.java
Normal file
@ -0,0 +1,47 @@
|
||||
package typinferenzplugin.editor;
|
||||
|
||||
import org.eclipse.jface.action.ContributionItem;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.events.SelectionListener;
|
||||
import org.eclipse.swt.widgets.Menu;
|
||||
import org.eclipse.swt.widgets.MenuItem;
|
||||
|
||||
public class InsertTypeContribution extends ContributionItem {
|
||||
JavEditor editorContext;
|
||||
|
||||
public InsertTypeContribution(JavEditor editorContext) {
|
||||
super("typinferenzplugin.typeinsert.menu");
|
||||
this.editorContext = editorContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Menu menu, int index) {
|
||||
new MenuItem(menu, SWT.SEPARATOR, 0);
|
||||
var parent = new MenuItem(menu, SWT.CASCADE, 0);
|
||||
parent.setText("Typ einsetzen");
|
||||
var subMenu = new Menu(parent);
|
||||
parent.setMenu(subMenu);
|
||||
for (var marker : editorContext.currentMarkers) {
|
||||
var item = new MenuItem(subMenu, SWT.PUSH);
|
||||
item.setText(marker.getInsertPoint().getInsertString());
|
||||
item.addSelectionListener(new SelectionListener() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
editorContext.runReplaceMarker(marker);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void widgetDefaultSelected(SelectionEvent e) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDynamic() {
|
||||
return true;
|
||||
}
|
||||
}
|
@ -36,16 +36,35 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.eclipse.e4.ui.di.UISynchronize;
|
||||
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
import org.eclipse.jface.text.ITextViewer;
|
||||
import org.eclipse.jface.text.Position;
|
||||
import org.eclipse.jface.text.source.Annotation;
|
||||
import org.eclipse.jface.text.source.IAnnotationHover;
|
||||
import org.eclipse.jface.text.source.IAnnotationModel;
|
||||
import org.eclipse.jface.text.source.ISourceViewer;
|
||||
import org.eclipse.jface.text.source.SourceViewerConfiguration;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
||||
import org.eclipse.jface.viewers.ISelectionProvider;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.swt.events.MouseEvent;
|
||||
import org.eclipse.swt.events.MouseListener;
|
||||
import org.eclipse.swt.events.MouseMoveListener;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.ui.IEditorInput;
|
||||
import org.eclipse.ui.IEditorSite;
|
||||
import org.eclipse.ui.IFileEditorInput;
|
||||
import org.eclipse.ui.PartInitException;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.eclipse.ui.editors.text.TextEditor;
|
||||
import org.eclipse.ui.part.FileEditorInput;
|
||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||
import org.eclipse.ui.texteditor.ITextEditorExtension2;
|
||||
import org.eclipse.ui.texteditor.SimpleMarkerAnnotation;
|
||||
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
|
||||
|
||||
@ -71,7 +90,7 @@ import typinferenzplugin.error.ErrorOutput;
|
||||
* @author janulrich
|
||||
*
|
||||
*/
|
||||
public class JavEditor extends TextEditor implements UnifyResultListener {
|
||||
public class JavEditor extends TextEditor implements UnifyResultListener, MouseMoveListener {
|
||||
|
||||
private static final ILog LOG = Activator.getDefault().getLog();
|
||||
|
||||
@ -111,13 +130,19 @@ public class JavEditor extends TextEditor implements UnifyResultListener {
|
||||
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createActions() {
|
||||
super.createActions();
|
||||
getSourceViewer().getTextWidget().addMouseMoveListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doSetInput(IEditorInput input) throws CoreException {
|
||||
super.doSetInput(input);
|
||||
this.removeMarkers();
|
||||
this.typeReconstruction(); // Marker generieren
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* (non-Javadoc) Method declared on AbstractTextEditor
|
||||
*/
|
||||
@ -126,6 +151,7 @@ public class JavEditor extends TextEditor implements UnifyResultListener {
|
||||
setSourceViewerConfiguration(new JavViewerConfiguration(this));
|
||||
// install the document provider
|
||||
// setDocumentProvider(new JavFileProvider());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -527,5 +553,19 @@ public class JavEditor extends TextEditor implements UnifyResultListener {
|
||||
|
||||
this.updateOutlinePage();
|
||||
}
|
||||
|
||||
public List<TypeReplaceMarker> currentMarkers = new ArrayList<TypeReplaceMarker>();
|
||||
|
||||
@Override
|
||||
public void mouseMove(MouseEvent e) {
|
||||
var offset = getSourceViewer().getTextWidget().getOffsetAtPoint(new Point(e.x, e.y));
|
||||
currentMarkers.clear();
|
||||
for (var marker : typeReplaceMarkers) {
|
||||
var position = marker.getPositionInCode();
|
||||
if (offset == position || offset == position + 1) {
|
||||
currentMarkers.add(marker);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
19
JavaCompilerPlugin/bundles/JavaCompilerPlugin.Plugin/src/typinferenzplugin/editor/RightClickMenu.java
Normal file
19
JavaCompilerPlugin/bundles/JavaCompilerPlugin.Plugin/src/typinferenzplugin/editor/RightClickMenu.java
Normal file
@ -0,0 +1,19 @@
|
||||
package typinferenzplugin.editor;
|
||||
|
||||
import org.eclipse.core.expressions.Expression;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.eclipse.ui.menus.ExtensionContributionFactory;
|
||||
import org.eclipse.ui.menus.IContributionRoot;
|
||||
import org.eclipse.ui.services.IServiceLocator;
|
||||
|
||||
public class RightClickMenu extends ExtensionContributionFactory {
|
||||
|
||||
@Override
|
||||
public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) {
|
||||
var editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
|
||||
if (editor instanceof JavEditor javEditor) {
|
||||
if (!javEditor.currentMarkers.isEmpty())
|
||||
additions.addContributionItem(new InsertTypeContribution(javEditor), Expression.TRUE);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user