Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/editors/automake/AutomakeCompletionProcessor.java')
-rw-r--r--build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/editors/automake/AutomakeCompletionProcessor.java236
1 files changed, 236 insertions, 0 deletions
diff --git a/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/editors/automake/AutomakeCompletionProcessor.java b/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/editors/automake/AutomakeCompletionProcessor.java
new file mode 100644
index 00000000000..cba9d060d11
--- /dev/null
+++ b/build/org.eclipse.cdt.autotools.ui/src/org/eclipse/cdt/internal/autotools/ui/editors/automake/AutomakeCompletionProcessor.java
@@ -0,0 +1,236 @@
+/*******************************************************************************
+ * Mostly copied from makefileCompletionProcessor which has the following
+ * copyright notice:
+ *
+ * Copyright (c) 2000, 2006 QNX Software Systems 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:
+ * QNX Software Systems - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.autotools.ui.editors.automake;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+
+import org.eclipse.cdt.internal.autotools.ui.MakeUIImages;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.TextPresentation;
+import org.eclipse.jface.text.contentassist.CompletionProposal;
+import org.eclipse.jface.text.contentassist.ContextInformation;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.jface.text.contentassist.IContextInformationPresenter;
+import org.eclipse.jface.text.contentassist.IContextInformationValidator;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IEditorPart;
+
+
+public class AutomakeCompletionProcessor implements IContentAssistProcessor {
+
+ /**
+ * Simple content assist tip closer. The tip is valid in a range
+ * of 5 characters around its popup location.
+ */
+ protected static class Validator implements IContextInformationValidator, IContextInformationPresenter {
+
+ protected int fInstallOffset;
+
+ /*
+ * @see IContextInformationValidator#isContextInformationValid(int)
+ */
+ public boolean isContextInformationValid(int offset) {
+ return Math.abs(fInstallOffset - offset) < 5;
+ }
+
+ /*
+ * @see IContextInformationValidator#install(IContextInformation, ITextViewer, int)
+ */
+ public void install(IContextInformation info, ITextViewer viewer, int offset) {
+ fInstallOffset = offset;
+ }
+
+ /*
+ * @see org.eclipse.jface.text.contentassist.IContextInformationPresenter#updatePresentation(int, TextPresentation)
+ */
+ public boolean updatePresentation(int documentPosition, TextPresentation presentation) {
+ return false;
+ }
+ }
+
+ public static class DirectiveComparator implements Comparator<Object> {
+
+ /* (non-Javadoc)
+ * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+ */
+ public int compare(Object o1, Object o2) {
+ String name1;
+ String name2;
+
+ if (o1 instanceof IMacroDefinition) {
+ name1 = ((IMacroDefinition)o1).getName();
+ } else if (o1 instanceof IRule) {
+ name1 = ((IRule)o1).getTarget().toString();
+ } else {
+ name1 =""; //$NON-NLS-1$
+ }
+
+ if (o2 instanceof IMacroDefinition) {
+ name2 = ((IMacroDefinition)o1).getName();
+ } else if (o2 instanceof IRule) {
+ name2 = ((IRule)o1).getTarget().toString();
+ } else {
+ name2 =""; //$NON-NLS-1$
+ }
+
+ //return String.CASE_INSENSITIVE_ORDER.compare(name1, name2);
+ return name1.compareToIgnoreCase(name2);
+ }
+
+ }
+ protected IContextInformationValidator fValidator = new Validator();
+ protected Image imageMacro = MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_MACRO);
+ protected Image imageTarget = MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_TARGET_RULE);
+
+ protected CompletionProposalComparator comparator = new CompletionProposalComparator();
+ protected IEditorPart fEditor;
+ protected IWorkingCopyManager fManager;
+
+ public AutomakeCompletionProcessor(IEditorPart editor) {
+ fEditor = editor;
+ fManager = AutomakeEditorFactory.getDefault().getWorkingCopyManager();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int)
+ */
+ public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) {
+ WordPartDetector wordPart = new WordPartDetector(viewer, documentOffset);
+ boolean macro = WordPartDetector.inMacro(viewer, documentOffset);
+ IMakefile makefile = fManager.getWorkingCopy(fEditor.getEditorInput());
+ IDirective[] statements = null;
+ if (macro) {
+ IDirective[] m1 = makefile.getMacroDefinitions();
+ IDirective[] m2 = makefile.getBuiltinMacroDefinitions();
+ statements = new IDirective[m1.length + m2.length];
+ System.arraycopy(m1, 0, statements, 0, m1.length);
+ System.arraycopy(m2, 0, statements, m1.length, m2.length);
+ } else {
+ statements = makefile.getTargetRules();
+ }
+
+ ArrayList<ICompletionProposal> proposalList = new ArrayList<ICompletionProposal>(statements.length);
+
+ // iterate over all the different categories
+ for (int i = 0; i < statements.length; i++) {
+ String name = null;
+ Image image = null;
+ String infoString = "";//getContentInfoString(name); //$NON-NLS-1$
+ if (statements[i] instanceof IMacroDefinition) {
+ name = ((IMacroDefinition) statements[i]).getName();
+ image = imageMacro;
+ infoString = ((IMacroDefinition)statements[i]).getValue().toString();
+ } else if (statements[i] instanceof IRule) {
+ name = ((IRule) statements[i]).getTarget().toString();
+ image = imageTarget;
+ infoString = name;
+ }
+ if (name != null && name.startsWith(wordPart.toString())) {
+ IContextInformation info = new ContextInformation(name, infoString);
+ String displayString = (name.equals(infoString) ? name : name + " - " + infoString); //$NON-NLS-1$
+ ICompletionProposal result =
+ new CompletionProposal(
+ name,
+ wordPart.getOffset(),
+ wordPart.toString().length(),
+ name.length(),
+ image,
+ displayString,
+ info,
+ infoString);
+ proposalList.add(result);
+ }
+ }
+ ICompletionProposal[] proposals = (ICompletionProposal[]) proposalList.toArray(new ICompletionProposal[0]);
+ Arrays.sort(proposals, comparator);
+ return proposals;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)
+ */
+ public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) {
+ WordPartDetector wordPart = new WordPartDetector(viewer, documentOffset);
+ boolean macro = WordPartDetector.inMacro(viewer, documentOffset);
+ IMakefile makefile = fManager.getWorkingCopy(fEditor.getEditorInput());
+ ArrayList<String> contextList = new ArrayList<String>();
+ if (macro) {
+ IDirective[] statements = makefile.getMacroDefinitions();
+ for (int i = 0; i < statements.length; i++) {
+ if (statements[i] instanceof IMacroDefinition) {
+ String name = ((IMacroDefinition) statements[i]).getName();
+ if (name != null && name.equals(wordPart.toString())) {
+ String value = ((IMacroDefinition) statements[i]).getValue().toString();
+ if (value != null && value.length() > 0) {
+ contextList.add(value);
+ }
+ }
+ }
+ }
+ statements = makefile.getBuiltinMacroDefinitions();
+ for (int i = 0; i < statements.length; i++) {
+ if (statements[i] != null) {
+ String name = ((IMacroDefinition) statements[i]).getName();
+ if (name != null && name.equals(wordPart.toString())) {
+ String value = ((IMacroDefinition) statements[i]).getValue().toString();
+ if (value != null && value.length() > 0) {
+ contextList.add(value);
+ }
+ }
+ }
+ }
+ }
+
+ IContextInformation[] result = new IContextInformation[contextList.size()];
+ for (int i = 0; i < result.length; i++) {
+ String context = (String)contextList.get(i);
+ result[i] = new ContextInformation(imageMacro, wordPart.toString(), context);
+ }
+ return result;
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
+ */
+ public char[] getCompletionProposalAutoActivationCharacters() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
+ */
+ public char[] getContextInformationAutoActivationCharacters() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()
+ */
+ public String getErrorMessage() {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
+ */
+ public IContextInformationValidator getContextInformationValidator() {
+ return fValidator;
+ }
+
+}

Back to the top