View | Details | Raw Unified | Return to bug 385385
Collapse All | Expand All

(-)a/plugins/org.eclipse.koneki.ldt.ui/src/org/eclipse/koneki/ldt/ui/internal/editor/LuaEditor.java (-1 / +91 lines)
Lines 12-19 Link Here
12
package org.eclipse.koneki.ldt.ui.internal.editor;
12
package org.eclipse.koneki.ldt.ui.internal.editor;
13
13
14
import org.eclipse.dltk.core.IDLTKLanguageToolkit;
14
import org.eclipse.dltk.core.IDLTKLanguageToolkit;
15
import org.eclipse.dltk.core.IImportDeclaration;
16
import org.eclipse.dltk.core.ILocalVariable;
17
import org.eclipse.dltk.core.IMember;
15
import org.eclipse.dltk.core.IModelElement;
18
import org.eclipse.dltk.core.IModelElement;
19
import org.eclipse.dltk.core.IPackageDeclaration;
16
import org.eclipse.dltk.core.ISourceModule;
20
import org.eclipse.dltk.core.ISourceModule;
21
import org.eclipse.dltk.core.ISourceRange;
22
import org.eclipse.dltk.core.ISourceReference;
23
import org.eclipse.dltk.core.ModelException;
17
import org.eclipse.dltk.internal.ui.editor.BracketInserter;
24
import org.eclipse.dltk.internal.ui.editor.BracketInserter;
18
import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
25
import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
19
import org.eclipse.dltk.internal.ui.editor.ScriptOutlinePage;
26
import org.eclipse.dltk.internal.ui.editor.ScriptOutlinePage;
Lines 24-32 import org.eclipse.jface.preference.IPreferenceStore; Link Here
24
import org.eclipse.jface.text.IDocument;
31
import org.eclipse.jface.text.IDocument;
25
import org.eclipse.jface.text.IDocumentExtension3;
32
import org.eclipse.jface.text.IDocumentExtension3;
26
import org.eclipse.jface.text.ITextViewerExtension;
33
import org.eclipse.jface.text.ITextViewerExtension;
34
import org.eclipse.jface.text.TextSelection;
27
import org.eclipse.jface.text.source.DefaultCharacterPairMatcher;
35
import org.eclipse.jface.text.source.DefaultCharacterPairMatcher;
28
import org.eclipse.jface.text.source.ICharacterPairMatcher;
36
import org.eclipse.jface.text.source.ICharacterPairMatcher;
29
import org.eclipse.jface.text.source.ISourceViewer;
37
import org.eclipse.jface.text.source.ISourceViewer;
38
import org.eclipse.jface.viewers.ISelection;
30
import org.eclipse.jface.viewers.SelectionChangedEvent;
39
import org.eclipse.jface.viewers.SelectionChangedEvent;
31
import org.eclipse.koneki.ldt.core.LuaUtils;
40
import org.eclipse.koneki.ldt.core.LuaUtils;
32
import org.eclipse.koneki.ldt.core.internal.LuaLanguageToolkit;
41
import org.eclipse.koneki.ldt.core.internal.LuaLanguageToolkit;
Lines 35-40 import org.eclipse.koneki.ldt.ui.internal.editor.navigation.LuaOutlinePage; Link Here
35
import org.eclipse.koneki.ldt.ui.internal.editor.text.ILuaPartitions;
44
import org.eclipse.koneki.ldt.ui.internal.editor.text.ILuaPartitions;
36
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaBracketInserter;
45
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaBracketInserter;
37
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaTextTools;
46
import org.eclipse.koneki.ldt.ui.internal.editor.text.LuaTextTools;
47
import org.eclipse.swt.custom.StyledText;
38
import org.eclipse.swt.widgets.Composite;
48
import org.eclipse.swt.widgets.Composite;
39
import org.eclipse.ui.IEditorInput;
49
import org.eclipse.ui.IEditorInput;
40
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
50
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
Lines 163-166 public class LuaEditor extends ScriptEditor { Link Here
163
			// Pass typed character to auto insert object
173
			// Pass typed character to auto insert object
164
			((ITextViewerExtension) sourceViewer).prependVerifyKeyListener(bracketInserter);
174
			((ITextViewerExtension) sourceViewer).prependVerifyKeyListener(bracketInserter);
165
	}
175
	}
176
177
	/**
178
	 * This a duplicate {@link ScriptEditor#setSelection(IModelElement, boolean)} which uses {@link String#length()}, not suitable for the inclusive
179
	 * Lua strings our models are made from.
180
	 * 
181
	 * To adapt it, they are just some "- 1" after some {@link String#length()}.
182
	 */
183
	// CHECKSTYLE NLS: OFF
184
	@Override
185
	protected void setSelection(ISourceReference reference, boolean moveCursor) {
186
		if (getSelectionProvider() == null)
187
			return;
188
		ISelection selection = getSelectionProvider().getSelection();
189
		if (selection instanceof TextSelection) {
190
			TextSelection textSelection = (TextSelection) selection;
191
			// PR 39995: [navigation] Forward history cleared after going back
192
			// in navigation history:
193
			// mark only in navigation history if the cursor is being moved
194
			// (which it isn't if
195
			// this is called from a PostSelectionEvent that should only update
196
			// the magnet)
197
			if (moveCursor && (textSelection.getOffset() != 0 || textSelection.getLength() != 0))
198
				markInNavigationHistory();
199
		}
200
		if (reference != null) {
201
			StyledText textWidget = null;
202
			ISourceViewer sourceViewer = getSourceViewer();
203
			if (sourceViewer != null)
204
				textWidget = sourceViewer.getTextWidget();
205
			if (textWidget == null)
206
				return;
207
			try {
208
				ISourceRange range = null;
209
				range = reference.getSourceRange();
210
				if (range == null)
211
					return;
212
				int offset = range.getOffset();
213
				int length = range.getLength() - 1;
214
				if (offset < 0 || length < 0)
215
					return;
216
				setHighlightRange(offset, length, moveCursor);
217
				if (!moveCursor)
218
					return;
219
				offset = -1;
220
				length = -1;
221
				if (reference instanceof IMember) {
222
					range = ((IMember) reference).getNameRange();
223
					if (range != null) {
224
						offset = range.getOffset();
225
						length = range.getLength() - 1;
226
					}
227
				} else if (reference instanceof ILocalVariable) {
228
					range = ((ILocalVariable) reference).getNameRange();
229
					if (range != null) {
230
						offset = range.getOffset();
231
						length = range.getLength() - 1;
232
					}
233
				} else if (reference instanceof IImportDeclaration || reference instanceof IPackageDeclaration) {
234
					// range is still getSourceRange()
235
					offset = range.getOffset();
236
					length = range.getLength() - 1;
237
				}
238
				if (offset > -1 && length > 0) {
239
					try {
240
						textWidget.setRedraw(false);
241
						sourceViewer.revealRange(offset, length);
242
						sourceViewer.setSelectedRange(offset, length);
243
					} finally {
244
						textWidget.setRedraw(true);
245
					}
246
					markInNavigationHistory();
247
				}
248
			} catch (ModelException x) {
249
			} catch (IllegalArgumentException x) {
250
			}
251
		} else if (moveCursor) {
252
			resetHighlightRange();
253
			markInNavigationHistory();
254
		}
255
	}
256
	// CHECKSTYLE NLS: ON
166
}
257
}
167
- 

Return to bug 385385