/******************************************************************************* * Copyright (c) 2000, 2011 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.che.ide.ext.java.jdt.codeassistant; import org.eclipse.che.ide.ext.java.jdt.core.CompletionProposal; import org.eclipse.che.ide.ext.java.jdt.text.Document; import org.eclipse.che.ide.api.text.Region; import org.eclipse.che.ide.api.text.RegionImpl; /** A method proposal with filled in argument names. */ public final class FilledArgumentNamesMethodProposal extends JavaMethodCompletionProposal { private Region fSelectedRegion; // initialized by apply() private int[] fArgumentOffsets; private int[] fArgumentLengths; public FilledArgumentNamesMethodProposal(CompletionProposal proposal, JavaContentAssistInvocationContext context) { super(proposal, context); } /* * @see ICompletionProposalExtension#apply(IDocument, char) */ @Override public void apply(Document document, char trigger, int offset) { super.apply(document, trigger, offset); int baseOffset= getReplacementOffset(); String replacement= getReplacementString(); // if (fArgumentOffsets != null) { // try { // LinkedModeModel model= new LinkedModeModel(); // for (int i= 0; i != fArgumentOffsets.length; i++) { // LinkedPositionGroup group= new LinkedPositionGroup(); fSelectedRegion = new RegionImpl(baseOffset + fArgumentOffsets[0], 0); // group.addPosition(new LinkedPosition(document, baseOffset + fArgumentOffsets[i], fArgumentLengths[i], // LinkedPositionGroup.NO_STOP)); // model.addGroup(group); // } // // model.forceInstall(); // JavaEditor editor= getJavaEditor(); // if (editor != null) { // model.addLinkingListener(new EditorHighlightingSynchronizer(editor)); // } // // LinkedModeUI ui= new EditorLinkedModeUI(model, getTextViewer()); // ui.setExitPosition(getTextViewer(), baseOffset + replacement.length(), 0, Integer.MAX_VALUE); // ui.setExitPolicy(new ExitPolicy(')', document)); // ui.setDoContextInfo(true); // ui.setCyclingMode(LinkedModeUI.CYCLE_WHEN_NO_PARENT); // ui.enter(); // // fSelectedRegion= ui.getSelectedRegion(); // // } catch (BadLocationException e) { // JavaPlugin.log(e); // openErrorDialog(e); // } } else { fSelectedRegion= new RegionImpl(baseOffset + replacement.length(), 0); } } /* * @see org.eclipse.jdt.internal.ui.text.java.JavaMethodCompletionProposal#needsLinkedMode() */ @Override protected boolean needsLinkedMode() { return false; // we handle it ourselves } /* * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeReplacementString() */ @Override protected String computeReplacementString() { if (!hasParameters() || !hasArgumentList()) return super.computeReplacementString(); StringBuffer buffer = new StringBuffer(); appendMethodNameReplacement(buffer); char[][] parameterNames = fProposal.findParameterNames(); int count = parameterNames.length; fArgumentOffsets = new int[count]; fArgumentLengths = new int[count]; FormatterPrefs prefs = getFormatterPrefs(); setCursorPosition(buffer.length()); if (prefs.afterOpeningParen) buffer.append(SPACE); for (int i = 0; i != count; i++) { if (i != 0) { if (prefs.beforeComma) buffer.append(SPACE); buffer.append(COMMA); if (prefs.afterComma) buffer.append(SPACE); } fArgumentOffsets[i] = buffer.length(); buffer.append(parameterNames[i]); fArgumentLengths[i] = parameterNames[i].length; } if (prefs.beforeClosingParen) buffer.append(SPACE); buffer.append(RPAREN); return buffer.toString(); } // /** // * Returns the currently active java editor, or <code>null</code> if it // * cannot be determined. // * // * @return the currently active java editor, or <code>null</code> // */ // private JavaEditor getJavaEditor() { // IEditorPart part= JavaPlugin.getActivePage().getActiveEditor(); // if (part instanceof JavaEditor) // return (JavaEditor) part; // else // return null; // } /* * @see ICompletionProposal#getSelection(IDocument) */ @Override public Region getSelection(Document document) { if (fSelectedRegion == null) return new RegionImpl(getReplacementOffset(), 0); return new RegionImpl(fSelectedRegion.getOffset(), fSelectedRegion.getLength()); } // private void openErrorDialog(BadLocationException e) { // Shell shell= getTextViewer().getTextWidget().getShell(); // MessageDialog.openError(shell, JavaTextMessages.FilledArgumentNamesMethodProposal_error_msg, e.getMessage()); // } }