1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-17 05:05:43 +02:00

Adopt ITextHoverExtension2

This commit is contained in:
Anton Leherbauer 2008-03-20 16:02:42 +00:00
parent e8c27d5cae
commit 01a5281372
8 changed files with 135 additions and 48 deletions

View file

@ -1,13 +1,14 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2002, 2007 QNX Software Systems and others. * Copyright (c) 2002, 2008 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html * http://www.eclipse.org/legal/epl-v10.html
* *
* Contributors: * Contributors:
* QNX Software Systems - Initial API and implementation * QNX Software Systems - Initial API and implementation
* IBM Corporation * IBM Corporation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.text.c.hover; package org.eclipse.cdt.internal.ui.text.c.hover;
@ -17,6 +18,7 @@ import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHoverExtension; import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextHoverExtension2;
import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region; import org.eclipse.jface.text.Region;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
@ -31,12 +33,11 @@ import org.eclipse.cdt.internal.ui.text.CWordFinder;
import org.eclipse.cdt.internal.ui.text.HTMLTextPresenter; import org.eclipse.cdt.internal.ui.text.HTMLTextPresenter;
/** /**
* AbstractCEditorTextHover Abstract class for providing hover information for C * Abstract class for providing hover information for C
* elements. * elements.
* *
*/ */
public abstract class AbstractCEditorTextHover implements ICEditorTextHover, public abstract class AbstractCEditorTextHover implements ICEditorTextHover, ITextHoverExtension, ITextHoverExtension2 {
ITextHoverExtension {
private IEditorPart fEditor; private IEditorPart fEditor;
@ -77,6 +78,13 @@ public abstract class AbstractCEditorTextHover implements ICEditorTextHover,
*/ */
public abstract String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion); public abstract String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion);
/*
* @see ITextHoverExtension2#getHoverInfo2(ITextViewer, IRegion)
*/
public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
return getHoverInfo(textViewer, hoverRegion);
}
/* /*
* @see ITextHoverExtension#getHoverControlCreator() * @see ITextHoverExtension#getHoverControlCreator()
* @since 3.0 * @since 3.0
@ -90,7 +98,20 @@ public abstract class AbstractCEditorTextHover implements ICEditorTextHover,
} }
}; };
} }
/*
* @see org.eclipse.jface.text.ITextHoverExtension2#getInformationPresenterControlCreator()
* @since 5.0
*/
public IInformationControlCreator getInformationPresenterControlCreator() {
return new IInformationControlCreator() {
public IInformationControl createInformationControl(Shell shell) {
int style= SWT.V_SCROLL | SWT.H_SCROLL;
return new DefaultInformationControl(shell, SWT.RESIZE | SWT.TOOL, style, new HTMLTextPresenter(false));
}
};
}
/** /**
* Returns the tool tip affordance string. * Returns the tool tip affordance string.
* *

View file

@ -1,12 +1,13 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2002, 2006 QNX Software Systems and others. * Copyright (c) 2002, 2008 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html * http://www.eclipse.org/legal/epl-v10.html
* *
* Contributors: * Contributors:
* QNX Software Systems - Initial API and implementation * QNX Software Systems - Initial API and implementation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.text.c.hover; package org.eclipse.cdt.internal.ui.text.c.hover;
@ -22,6 +23,7 @@ import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover; import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextHoverExtension; import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextHoverExtension2;
import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.information.IInformationProviderExtension2; import org.eclipse.jface.text.information.IInformationProviderExtension2;
import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorPart;
@ -29,7 +31,7 @@ import org.eclipse.ui.IEditorPart;
/** /**
* BestMatchHover * BestMatchHover
*/ */
public class BestMatchHover extends AbstractCEditorTextHover implements ITextHoverExtension, IInformationProviderExtension2 { public class BestMatchHover extends AbstractCEditorTextHover {
private List fTextHoverSpecifications; private List fTextHoverSpecifications;
private List fInstantiatedTextHovers; private List fInstantiatedTextHovers;
@ -107,6 +109,38 @@ public class BestMatchHover extends AbstractCEditorTextHover implements ITextHov
return null; return null;
} }
/*
* @see org.eclipse.jface.text.ITextHoverExtension2#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
*/
public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
checkTextHovers();
fBestHover= null;
if (fInstantiatedTextHovers == null)
return null;
for (Iterator iterator= fInstantiatedTextHovers.iterator(); iterator.hasNext(); ) {
ITextHover hover= (ITextHover)iterator.next();
if (hover instanceof ITextHoverExtension2) {
Object info= ((ITextHoverExtension2) hover).getHoverInfo2(textViewer, hoverRegion);
if (info != null) {
fBestHover= hover;
return info;
}
} else {
String s= hover.getHoverInfo(textViewer, hoverRegion);
if (s != null && s.trim().length() > 0) {
fBestHover= hover;
return s;
}
}
}
return null;
}
/* /*
* @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator() * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()
* @since 3.0 * @since 3.0
@ -123,6 +157,8 @@ public class BestMatchHover extends AbstractCEditorTextHover implements ITextHov
* @since 3.0 * @since 3.0
*/ */
public IInformationControlCreator getInformationPresenterControlCreator() { public IInformationControlCreator getInformationPresenterControlCreator() {
if (fBestHover instanceof ITextHoverExtension2)
return ((ITextHoverExtension2)fBestHover).getInformationPresenterControlCreator();
if (fBestHover instanceof IInformationProviderExtension2) if (fBestHover instanceof IInformationProviderExtension2)
return ((IInformationProviderExtension2)fBestHover).getInformationPresenterControlCreator(); return ((IInformationProviderExtension2)fBestHover).getInformationPresenterControlCreator();

View file

@ -1,28 +1,31 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2002, 2006 QNX Software Systems and others. * Copyright (c) 2002, 2008 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html * http://www.eclipse.org/legal/epl-v10.html
* *
* Contributors: * Contributors:
* QNX Software Systems - Initial API and implementation * QNX Software Systems - Initial API and implementation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.text.c.hover; package org.eclipse.cdt.internal.ui.text.c.hover;
import org.eclipse.cdt.ui.text.c.hover.ICEditorTextHover;
import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHoverExtension; import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextHoverExtension2;
import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.information.IInformationProviderExtension2; import org.eclipse.jface.text.information.IInformationProviderExtension2;
import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorPart;
import org.eclipse.cdt.ui.text.c.hover.ICEditorTextHover;
/** /**
* CEditorTexHoverProxy * CEditorTexHoverProxy
*/ */
public class CEditorTextHoverProxy extends AbstractCEditorTextHover implements ITextHoverExtension, IInformationProviderExtension2 { public class CEditorTextHoverProxy extends AbstractCEditorTextHover {
private CEditorTextHoverDescriptor fHoverDescriptor; private CEditorTextHoverDescriptor fHoverDescriptor;
private ICEditorTextHover fHover; private ICEditorTextHover fHover;
@ -66,6 +69,22 @@ public class CEditorTextHoverProxy extends AbstractCEditorTextHover implements I
return null; return null;
} }
/*
* @see org.eclipse.jface.text.ITextHoverExtension2#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
* @since 5.0
*/
public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
if (ensureHoverCreated()) {
if (fHover instanceof ITextHoverExtension2)
return ((ITextHoverExtension2) fHover).getHoverInfo2(textViewer, hoverRegion);
else
return fHover.getHoverInfo(textViewer, hoverRegion);
}
return null;
}
private boolean ensureHoverCreated() { private boolean ensureHoverCreated() {
if (!isEnabled() || fHoverDescriptor == null) if (!isEnabled() || fHoverDescriptor == null)
return false; return false;
@ -98,9 +117,12 @@ public class CEditorTextHoverProxy extends AbstractCEditorTextHover implements I
* @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator() * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
*/ */
public IInformationControlCreator getInformationPresenterControlCreator() { public IInformationControlCreator getInformationPresenterControlCreator() {
if (ensureHoverCreated() && (fHover instanceof IInformationProviderExtension2)) if (ensureHoverCreated()) {
return ((IInformationProviderExtension2)fHover).getInformationPresenterControlCreator(); if (fHover instanceof ITextHoverExtension2)
return ((ITextHoverExtension2) fHover).getInformationPresenterControlCreator();
if (fHover instanceof IInformationProviderExtension2) // this is wrong, but left here for backwards compatibility
return ((IInformationProviderExtension2) fHover).getInformationPresenterControlCreator();
}
return null; return null;
} }

View file

@ -11,12 +11,12 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.text.c.hover; package org.eclipse.cdt.internal.ui.text.c.hover;
import org.eclipse.jface.text.AbstractReusableInformationControlCreator; import org.eclipse.jface.text.AbstractReusableInformationControlCreator;
import org.eclipse.jface.text.DefaultInformationControl; import org.eclipse.jface.text.DefaultInformationControl;
import org.eclipse.jface.text.IInformationControl; import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHoverExtension2;
import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.information.IInformationProvider; import org.eclipse.jface.text.information.IInformationProvider;
import org.eclipse.jface.text.information.IInformationProviderExtension2; import org.eclipse.jface.text.information.IInformationProviderExtension2;
@ -40,7 +40,6 @@ import org.eclipse.cdt.internal.ui.text.HTMLTextPresenter;
*/ */
public class CInformationProvider implements IInformationProvider, IInformationProviderExtension2 { public class CInformationProvider implements IInformationProvider, IInformationProviderExtension2 {
/** /**
* Default control creator. * Default control creator.
*/ */
@ -124,8 +123,8 @@ public class CInformationProvider implements IInformationProvider, IInformationP
* @see IInformationProviderExtension2#getInformationPresenterControlCreator() * @see IInformationProviderExtension2#getInformationPresenterControlCreator()
*/ */
public IInformationControlCreator getInformationPresenterControlCreator() { public IInformationControlCreator getInformationPresenterControlCreator() {
if (fImplementation instanceof IInformationProviderExtension2) { if (fImplementation instanceof ITextHoverExtension2) {
IInformationProviderExtension2 ext2= (IInformationProviderExtension2) fImplementation; ITextHoverExtension2 ext2= (ITextHoverExtension2) fImplementation;
return ext2.getInformationPresenterControlCreator(); return ext2.getInformationPresenterControlCreator();
} }
if (fPresenterControlCreator == null) if (fPresenterControlCreator == null)

View file

@ -52,4 +52,15 @@ public class CMacroExpansionControl extends AbstractSourceViewerInformationContr
return "org.eclipse.cdt.ui.text.hover.CMacroExpansion"; //$NON-NLS-1$ return "org.eclipse.cdt.ui.text.hover.CMacroExpansion"; //$NON-NLS-1$
} }
/*
* @see org.eclipse.cdt.internal.ui.text.AbstractSourceViewerInformationControl#setInput(java.lang.Object)
*/
@Override
public void setInput(Object input) {
if (input instanceof CMacroExpansionInput) {
setInformation(((CMacroExpansionInput) input).fExplorer.getFullExpansion().getCodeAfterStep());
} else {
super.setInput(input);
}
}
} }

View file

@ -12,7 +12,6 @@
package org.eclipse.cdt.internal.ui.text.c.hover; package org.eclipse.cdt.internal.ui.text.c.hover;
import java.lang.ref.Reference; import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
import org.eclipse.jface.text.IInformationControl; import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.text.IInformationControlCreator;
@ -20,7 +19,6 @@ import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region; import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.information.IInformationProviderExtension2;
import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
@ -32,25 +30,21 @@ import org.eclipse.ui.IEditorPart;
* *
* @since 5.0 * @since 5.0
*/ */
public class CMacroExpansionHover extends AbstractCEditorTextHover implements IInformationProviderExtension2 { public class CMacroExpansionHover extends AbstractCEditorTextHover {
private Reference fCache; private Reference<CMacroExpansionInput> fCache;
/*
* @see org.eclipse.cdt.internal.ui.text.c.hover.AbstractCEditorTextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
*/
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
Object hoverInfo= getHoverInfo2(textViewer, hoverRegion);
return hoverInfo != null ? hoverInfo.toString() : null;
}
/*
* @see org.eclipse.cdt.internal.ui.text.c.hover.AbstractCEditorTextHover#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
*/
public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
CMacroExpansionInput input= CMacroExpansionInput.create(getEditor(), hoverRegion, false); CMacroExpansionInput input= CMacroExpansionInput.create(getEditor(), hoverRegion, false);
if (input == null) { return input;
return null;
}
fCache= new SoftReference(input);
String result= input.fExplorer.getFullExpansion().getCodeAfterStep();
if (result.length() == 0) {
// expansion is empty - hover should show empty string
result= "/* EMPTY */"; //$NON-NLS-1$
}
return result;
} }
/* /*
@ -65,7 +59,7 @@ public class CMacroExpansionHover extends AbstractCEditorTextHover implements II
} }
/* /*
* @see IInformationProviderExtension2#getInformationPresenterControlCreator() * @see org.eclipse.cdt.internal.ui.text.c.hover.AbstractCEditorTextHover#getInformationPresenterControlCreator()
*/ */
public IInformationControlCreator getInformationPresenterControlCreator() { public IInformationControlCreator getInformationPresenterControlCreator() {
return new IInformationControlCreator() { return new IInformationControlCreator() {
@ -81,7 +75,7 @@ public class CMacroExpansionHover extends AbstractCEditorTextHover implements II
if (fCache == null) { if (fCache == null) {
return null; return null;
} }
CMacroExpansionInput input= (CMacroExpansionInput) fCache.get(); CMacroExpansionInput input= fCache.get();
fCache= null; fCache= null;
if (input == null) { if (input == null) {
IEditorPart editor= getEditor(); IEditorPart editor= getEditor();

View file

@ -15,6 +15,7 @@ import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
@ -222,13 +223,19 @@ public class CMacroExpansionInput {
} }
} }
MacroExpansionExplorer fExplorer; final MacroExpansionExplorer fExplorer;
boolean fStartWithFullExpansion= true; boolean fStartWithFullExpansion= true;
private CMacroExpansionInput() { private CMacroExpansionInput(MacroExpansionExplorer explorer) {
// forbidden Assert.isNotNull(explorer);
fExplorer= explorer;
} }
@Override
public String toString() {
return fExplorer.getFullExpansion().getCodeAfterStep();
}
/** /**
* Creates an input object for the macro expansion exploration control {@link CMacroExpansionExplorationControl}. * Creates an input object for the macro expansion exploration control {@link CMacroExpansionExplorationControl}.
* *
@ -256,8 +263,7 @@ public class CMacroExpansionInput {
return null; return null;
} }
CMacroExpansionInput input= new CMacroExpansionInput(); CMacroExpansionInput input= new CMacroExpansionInput(explorer);
input.fExplorer= explorer;
return input; return input;
} }

View file

@ -35,12 +35,10 @@ import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IInformationControl; import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.ITypedRegion; import org.eclipse.jface.text.ITypedRegion;
import org.eclipse.jface.text.Region; import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextUtilities; import org.eclipse.jface.text.TextUtilities;
import org.eclipse.jface.text.information.IInformationProviderExtension2;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorInput;
@ -99,7 +97,7 @@ import org.eclipse.cdt.internal.ui.util.EditorUtility;
/** /**
* A text hover presenting the source of the element under the cursor. * A text hover presenting the source of the element under the cursor.
*/ */
public class CSourceHover extends AbstractCEditorTextHover implements ITextHoverExtension, IInformationProviderExtension2 { public class CSourceHover extends AbstractCEditorTextHover {
private static final boolean DEBUG = false; private static final boolean DEBUG = false;