package copyto.from.jdt.internal;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.ITypeRoot;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.text.IRegion;
import org.eclipse.ui.texteditor.AbstractTextEditor;
import copyto.core.Copyable;
/**
* Adapts from AbstractTextEditor selection and IMember to Copyable.
*
* @author <a href="mailto:phil.kursawe@gmail.com">Philipp Kursawe</a>
*
*/
public class AdapterFactory implements IAdapterFactory {
@SuppressWarnings("rawtypes")
public Object getAdapter(final Object adaptableObject,
final Class adapterType) {
if (adaptableObject instanceof AbstractTextEditor) {
final AbstractTextEditor textEditor = (AbstractTextEditor) adaptableObject;
// TODO: Check if editor is selected but *no* Text Selection
final IRegion highlightRange = textEditor.getHighlightRange();
if (highlightRange != null) {
final ITypeRoot element = JavaUI
.getEditorInputTypeRoot(textEditor.getEditorInput());
if (element != null) {
return new RangeCopyable(element, highlightRange);
}
}
} else if (adaptableObject instanceof IMember) {
return new MemberCopyable((IMember) adaptableObject);
}
return null;
}
@SuppressWarnings("rawtypes")
public Class[] getAdapterList() {
return new Class[] { Copyable.class };
}
}