blob: 1beb1dd6586315f4b4ce2f5336070cab03f04c74 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ajdt.internal.ui.editor;
import org.eclipse.ajdt.core.javaelements.AJCompilationUnit;
import org.eclipse.ajdt.core.javaelements.AJCompilationUnitManager;
import org.eclipse.ajdt.core.javaelements.PointcutUtilities;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.ISourceReference;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
import org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover;
import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.information.IInformationProviderExtension2;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.editors.text.EditorsUI;
/**
* Hover to show the definition of pointcuts. Loosely based on
* org.eclipse.jdt.internal.ui.text.java.hover.JavaSourceHover
*/
public class PointcutSourceHover extends AbstractJavaEditorTextHover implements
ITextHoverExtension, IInformationProviderExtension2 {
/*
* @see ITextHover#getHoverInfo(ITextViewer, IRegion)
*/
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
if (!(getEditor() instanceof AspectJEditor)) {
return null;
}
IJavaElement input = SelectionConverter
.getInput((JavaEditor) getEditor());
int offset = hoverRegion.getOffset();
if (input instanceof ICompilationUnit) {
input = AJCompilationUnitManager.mapToAJCompilationUnit((ICompilationUnit)input);
}
if (input instanceof AJCompilationUnit) {
AJCompilationUnit ajcu = (AJCompilationUnit) input;
String source = PointcutUtilities.isInPointcutContext(ajcu, offset);
if (source != null) {
String id = PointcutUtilities.findIdentifier(source, offset);
if (id != null) {
try {
IJavaElement pc = PointcutUtilities.findPointcut(ajcu
.getElementAt(offset), id);
if (pc != null) {
IResource res = pc.getUnderlyingResource();
AJCompilationUnit cu = AJCompilationUnitManager.INSTANCE
.getAJCompilationUnit((IFile) res);
if (cu != null) {
cu.requestOriginalContentMode();
String pcs = ((ISourceReference) pc)
.getSource();
cu.discardOriginalContentMode();
return pcs;
}
return ((ISourceReference) pc).getSource();
}
} catch (JavaModelException e) {
}
}
}
}
return null;
}
/*
* @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()
* @since 3.0
*/
public IInformationControlCreator getHoverControlCreator() {
return new IInformationControlCreator() {
public IInformationControl createInformationControl(Shell parent) {
// need to use our own version to get AJ keyword highlighting
return new AJSourceViewerInformationControl(parent,
EditorsUI.getTooltipAffordanceString());
}
};
}
/*
* @see IInformationProviderExtension2#getInformationPresenterControlCreator()
* @since 3.0
*/
public IInformationControlCreator getInformationPresenterControlCreator() {
return new IInformationControlCreator() {
public IInformationControl createInformationControl(Shell parent) {
int shellStyle = SWT.RESIZE | SWT.TOOL;
int style = SWT.V_SCROLL | SWT.H_SCROLL;
// need to use our own version to get AJ keyword highlighting
return new AJSourceViewerInformationControl(parent, shellStyle,
style);
}
};
}
}