| package org.eclipse.osbp.xtext.oxtype.ui.imports; |
| |
| import java.util.List; |
| |
| import org.apache.log4j.Logger; |
| import org.eclipse.core.commands.AbstractHandler; |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.jface.text.BadLocationException; |
| import org.eclipse.jface.text.DocumentRewriteSession; |
| import org.eclipse.jface.text.DocumentRewriteSessionType; |
| import org.eclipse.jface.text.IDocumentExtension4; |
| import org.eclipse.osbp.xtext.oxtype.imports.CustomXbaseImportOrganizer; |
| import org.eclipse.osbp.xtext.oxtype.imports.EObjectImportOrganizer; |
| import org.eclipse.osbp.xtext.oxtype.imports.OXTypeRewritableImportSection; |
| import org.eclipse.xtext.resource.XtextResource; |
| import org.eclipse.xtext.ui.editor.XtextEditor; |
| import org.eclipse.xtext.ui.editor.model.IXtextDocument; |
| import org.eclipse.xtext.ui.editor.utils.EditorUtils; |
| import org.eclipse.xtext.util.ReplaceRegion; |
| import org.eclipse.xtext.util.concurrent.IUnitOfWork; |
| import org.eclipse.xtext.xbase.ui.imports.Messages; |
| import org.eclipse.xtext.xbase.ui.imports.OrganizeImportsHandler; |
| import org.eclipse.xtext.xbase.ui.imports.ReplaceConverter; |
| |
| import com.google.inject.Inject; |
| |
| @SuppressWarnings("restriction") |
| public class OXTypeOrganizeImportsHandler extends AbstractHandler { |
| |
| private static final Logger LOG = Logger.getLogger(OrganizeImportsHandler.class); |
| |
| @Inject |
| private CustomXbaseImportOrganizer importJvmTypesOrganizer; |
| |
| @Inject |
| private EObjectImportOrganizer importEObjectOrganizer; |
| |
| @Inject |
| private ReplaceConverter replaceConverter; |
| |
| public Object execute(ExecutionEvent event) throws ExecutionException { |
| XtextEditor editor = EditorUtils.getActiveXtextEditor(event); |
| if (editor != null) { |
| final IXtextDocument document = editor.getDocument(); |
| return execute(document); |
| } |
| return null; |
| } |
| |
| public Object execute(IXtextDocument document) { |
| doOrganizeImports(document); |
| return null; |
| } |
| |
| public void doOrganizeImports(final IXtextDocument document) { |
| List<ReplaceRegion> result = document.priorityReadOnly(new IUnitOfWork<List<ReplaceRegion>, XtextResource>() { |
| public List<ReplaceRegion> exec(XtextResource state) throws Exception { |
| OXTypeRewritableImportSection rewritableSection = importJvmTypesOrganizer |
| .getOrganizedImportSection(state); |
| |
| List<ReplaceRegion> replaceRegions = importEObjectOrganizer.getOrganizedImportChanges(state, |
| rewritableSection); |
| return replaceRegions; |
| } |
| }); |
| if (result == null) |
| return; |
| try { |
| DocumentRewriteSession session = null; |
| if (document instanceof IDocumentExtension4) { |
| session = ((IDocumentExtension4) document).startRewriteSession(DocumentRewriteSessionType.UNRESTRICTED); |
| } |
| replaceConverter.convertToTextEdit(result).apply(document); |
| if (session != null) { |
| ((IDocumentExtension4) document).stopRewriteSession(session); |
| } |
| } catch (BadLocationException e) { |
| LOG.error(Messages.OrganizeImportsHandler_organizeImportsErrorMessage, e); |
| } |
| } |
| |
| } |