mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Content Assist work
This commit is contained in:
parent
429e4b8a9b
commit
307d4a1d40
20 changed files with 791 additions and 469 deletions
|
@ -21,7 +21,7 @@ import org.eclipse.cdt.core.model.CModelException;
|
|||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.cdt.internal.ui.text.CCompletionProcessor;
|
||||
import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProcessor;
|
||||
import org.eclipse.cdt.testplugin.CProjectHelper;
|
||||
import org.eclipse.core.internal.resources.ResourceException;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
2003-12-03 Hoda Amer
|
||||
Content Assist work :Moved CompletionEngine out of CDT core
|
||||
|
||||
2003-11-27 Hoda Amer
|
||||
Content Assist work : Added an ICompletionRequestor interface
|
||||
and a CompletionRequestorAdaptor classe.
|
||||
|
|
|
@ -49,7 +49,7 @@ public interface IASTCompletionNode {
|
|||
}
|
||||
|
||||
|
||||
public CompletionKind getCompletionKind();
|
||||
public IASTNode getCompletionContext();
|
||||
public String getCompletionPrefix();
|
||||
public CompletionKind getCompletionKind();
|
||||
public IASTNode getCompletionContext();
|
||||
public String getCompletionPrefix();
|
||||
}
|
||||
|
|
|
@ -32,8 +32,12 @@ public interface IASTNode {
|
|||
public static final LookupKind LOCAL_VARIABLES = new LookupKind( 7 );
|
||||
public static final LookupKind METHODS = new LookupKind( 8 );
|
||||
public static final LookupKind FIELDS = new LookupKind( 9 );
|
||||
public static final LookupKind NAMESPACES = new LookupKind( 10 );
|
||||
|
||||
public static final LookupKind CONSTRUCTORS = new LookupKind (10);
|
||||
public static final LookupKind NAMESPACES = new LookupKind( 11 );
|
||||
public static final LookupKind MACROS = new LookupKind( 12 );
|
||||
public static final LookupKind ENUMERATIONS = new LookupKind( 13 );
|
||||
public static final LookupKind ENUMERATORS = new LookupKind( 14 );
|
||||
|
||||
/**
|
||||
* @param enumValue
|
||||
*/
|
||||
|
|
|
@ -31,4 +31,5 @@ public interface ICompletionRequestor {
|
|||
void acceptMacro(String name, int completionStart, int completionLength, int relevance);
|
||||
void acceptEnumeration(String name, int completionStart, int completionLength, int relevance);
|
||||
void acceptEnumerator(String name, int completionStart, int completionLength, int relevance);
|
||||
void acceptKeyword(String name, int completionStart, int completionLength, int relevance);
|
||||
}
|
||||
|
|
|
@ -1,245 +0,0 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.contentassist;
|
||||
|
||||
import java.io.CharArrayReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICompletionRequestor;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserFactoryException;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||
import org.eclipse.cdt.core.parser.ScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNode.LookupResult;
|
||||
import org.eclipse.cdt.internal.core.model.IWorkingCopy;
|
||||
import org.eclipse.cdt.internal.core.parser.util.ASTUtil;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
* This class is the entry point for code completions.
|
||||
* It contains a public API used to call ContentAssist on a given working copy
|
||||
* and a given completion offset.
|
||||
*
|
||||
*/
|
||||
public class CompletionEngine {
|
||||
List completions = new ArrayList();
|
||||
ICompletionRequestor requestor;
|
||||
int completionStart = 0;
|
||||
int completionLength = 0;
|
||||
public static final int LOCAL_VARIABLE_TYPE_RELEVANCE = 12;
|
||||
public static final int FIELD_TYPE_RELEVANCE = 11;
|
||||
public static final int VARIABLE_TYPE_RELEVANCE = 10;
|
||||
public static final int METHOD_TYPE_RELEVANCE = 9;
|
||||
public static final int FUNCTION_TYPE_RELEVANCE = 8;
|
||||
public static final int CLASS_TYPE_RELEVANCE = 7;
|
||||
public static final int STRUCT_TYPE_RELEVANCE = 6;
|
||||
public static final int UNION_TYPE_RELEVANCE = 5;
|
||||
public static final int NAMESPACE_TYPE_RELEVANCE = 4;
|
||||
public static final int MACRO_TYPE_RELEVANCE = 3;
|
||||
public static final int ENUMERATION_TYPE_RELEVANCE = 2;
|
||||
public static final int ENUMERATOR_TYPE_RELEVANCE = 1;
|
||||
public static final int DEFAULT_TYPE_RELEVANCE = 0;
|
||||
|
||||
|
||||
public CompletionEngine(ICompletionRequestor completionRequestor){
|
||||
completions.clear();
|
||||
requestor = completionRequestor;
|
||||
}
|
||||
public int computeTypeRelevance(int type){
|
||||
switch (type){
|
||||
case ICElement.C_FIELD:
|
||||
return FIELD_TYPE_RELEVANCE;
|
||||
case ICElement.C_VARIABLE:
|
||||
case ICElement.C_VARIABLE_DECLARATION:
|
||||
return VARIABLE_TYPE_RELEVANCE;
|
||||
case ICElement.C_METHOD:
|
||||
case ICElement.C_METHOD_DECLARATION:
|
||||
return METHOD_TYPE_RELEVANCE;
|
||||
case ICElement.C_FUNCTION:
|
||||
case ICElement.C_FUNCTION_DECLARATION:
|
||||
return FUNCTION_TYPE_RELEVANCE;
|
||||
case ICElement.C_CLASS:
|
||||
return CLASS_TYPE_RELEVANCE;
|
||||
case ICElement.C_STRUCT:
|
||||
return STRUCT_TYPE_RELEVANCE;
|
||||
case ICElement.C_UNION:
|
||||
return UNION_TYPE_RELEVANCE;
|
||||
case ICElement.C_NAMESPACE:
|
||||
return NAMESPACE_TYPE_RELEVANCE;
|
||||
case ICElement.C_MACRO:
|
||||
return MACRO_TYPE_RELEVANCE;
|
||||
case ICElement.C_ENUMERATION:
|
||||
return ENUMERATION_TYPE_RELEVANCE;
|
||||
case ICElement.C_ENUMERATOR:
|
||||
return ENUMERATOR_TYPE_RELEVANCE;
|
||||
default :
|
||||
return DEFAULT_TYPE_RELEVANCE;
|
||||
}
|
||||
}
|
||||
|
||||
private IASTCompletionNode parse(IWorkingCopy sourceUnit, int completionOffset){
|
||||
ContentAssistElementRequestor requestor = new ContentAssistElementRequestor();
|
||||
// Get resource info
|
||||
IResource currentResource = sourceUnit.getResource();
|
||||
IPath realPath = currentResource.getLocation();
|
||||
IProject project = currentResource.getProject();
|
||||
Reader reader = new CharArrayReader( sourceUnit.getContents() );
|
||||
|
||||
//Get the scanner info
|
||||
IScannerInfo scanInfo = new ScannerInfo();
|
||||
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
|
||||
if (provider != null){
|
||||
IScannerInfo buildScanInfo = provider.getScannerInformation(project);
|
||||
if( buildScanInfo != null )
|
||||
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
|
||||
}
|
||||
|
||||
//C or CPP?
|
||||
ParserLanguage language = CoreModel.getDefault().hasCCNature(project) ? ParserLanguage.CPP : ParserLanguage.C;
|
||||
|
||||
IParser parser = null;
|
||||
try
|
||||
{
|
||||
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getParserLogService() );
|
||||
parser = ParserFactory.createParser( scanner, requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
|
||||
}
|
||||
catch( ParserFactoryException pfe )
|
||||
{
|
||||
|
||||
}
|
||||
if(parser != null){
|
||||
IASTCompletionNode result = parser.parse(completionOffset);
|
||||
return result;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void addToCompletions (LookupResult result){
|
||||
Iterator nodes = result.getNodes();
|
||||
while (nodes.hasNext()){
|
||||
IASTNode node = (IASTNode) nodes.next();
|
||||
if(node instanceof IASTField){
|
||||
int relevance = computeTypeRelevance(ICElement.C_FIELD);
|
||||
IASTField field = (IASTField)node;
|
||||
requestor.acceptField(field.getName(),
|
||||
ASTUtil.getType(field.getAbstractDeclaration()),
|
||||
field.getVisiblity(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
return ;
|
||||
}
|
||||
|
||||
private void completionOnDotMember(IASTCompletionNode completionNode){
|
||||
// Completing after a dot
|
||||
// 1. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// 2. lookup fields & add to completion proposals
|
||||
LookupResult result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.FIELDS);
|
||||
addToCompletions (result);
|
||||
// 3. looup methods & add to completion proposals
|
||||
result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS);
|
||||
addToCompletions (result);
|
||||
// 4. lookup nested structures & add to completion proposals
|
||||
result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS);
|
||||
addToCompletions (result);
|
||||
}
|
||||
|
||||
public void complete(IWorkingCopy sourceUnit, int completionOffset, List completionList) {
|
||||
|
||||
// 1- Parse the translation unit
|
||||
IASTCompletionNode completionNode = parse(sourceUnit, completionOffset);
|
||||
|
||||
if (completionNode == null)
|
||||
return;
|
||||
|
||||
// set the completionStart and the completionLength
|
||||
completionStart = completionOffset;
|
||||
completionLength = completionNode.getCompletionPrefix().length();
|
||||
|
||||
// 2- Check the return value
|
||||
if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.DOT_MEMBER){
|
||||
completionOnDotMember(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARROW_MEMBER){
|
||||
// CompletionOnArrowMember
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIEDNAME_MEMBER){
|
||||
// CompletionOnQualifiedNameMember
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FIELD_TYPE){
|
||||
// CompletionOnFieldType
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.VARIABLE_TYPE){
|
||||
// CompletionOnVariableType
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARGUMENT_TYPE){
|
||||
// CompletionOnArgumentType
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.METHOD_RETURN_TYPE){
|
||||
// CompletionOnMethodReturnType
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FUNCTIOND_RETURN_TYPE){
|
||||
// CompletionOnFunctionReturnType
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.SINGLE_NAME_REFERENCE){
|
||||
// CompletionOnSingleNameReference
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_NAME_REFERENCE){
|
||||
// CompletionOnQualifiedNameReference
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.STRUCTURE_REFERENCE){
|
||||
// CompletionOnStructureReference
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.CLASS_REFERENCE){
|
||||
// CompletionOnClassReference
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.EXCEPTION_REFERENCE){
|
||||
// CompletionOnExceptionReference
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MACRO_REFERENCE){
|
||||
// CompletionOnMacroReference
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MESSAGE_SEND){
|
||||
// CompletionOnMessageSend
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_ALLOCATION_EXPRESSION){
|
||||
// CompletionOnQualifiedAllocationExpression
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.KEYWORD){
|
||||
// CompletionOnKeyword
|
||||
}
|
||||
|
||||
completionList.addAll(completions);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,3 +1,8 @@
|
|||
2003-12-03 Hoda Amer
|
||||
Content Assist work :Added a new internal package for content assist
|
||||
Added more functionality to the CompletionEngine.
|
||||
Added the Case Sensitive user preference.
|
||||
|
||||
2003-11-27 Hoda Amer
|
||||
Content Assist work : Added a ResultCollector class
|
||||
and moved the ICCompletionProposal from an internal package
|
||||
|
|
|
@ -23,7 +23,7 @@ import org.eclipse.cdt.internal.ui.editor.asm.AsmTextTools;
|
|||
import org.eclipse.cdt.internal.ui.text.CPairMatcher;
|
||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
||||
import org.eclipse.cdt.internal.ui.text.ContentAssistPreference;
|
||||
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.ui.IWorkingCopyManager;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
|
|
|
@ -20,8 +20,8 @@ import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
|
|||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
||||
import org.eclipse.cdt.internal.ui.text.ContentAssistPreference;
|
||||
import org.eclipse.cdt.internal.ui.text.ICColorConstants;
|
||||
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||
import org.eclipse.cdt.utils.ui.controls.TabFolderLayout;
|
||||
|
@ -58,9 +58,9 @@ import org.eclipse.swt.widgets.TabItem;
|
|||
import org.eclipse.swt.widgets.Text;
|
||||
import org.eclipse.ui.IWorkbench;
|
||||
import org.eclipse.ui.IWorkbenchPreferencePage;
|
||||
import org.eclipse.ui.editors.text.TextEditorPreferenceConstants;
|
||||
import org.eclipse.ui.help.WorkbenchHelp;
|
||||
import org.eclipse.ui.texteditor.AnnotationPreference;
|
||||
import org.eclipse.ui.texteditor.ExtendedTextEditorPreferenceConstants;
|
||||
import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
|
||||
import org.eclipse.ui.texteditor.WorkbenchChainedTextFontFieldEditor;
|
||||
|
||||
|
@ -78,13 +78,13 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
|||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags"), PreferenceConstants.EDITOR_TASK_TAG_COLOR }
|
||||
};
|
||||
|
||||
protected final String[][] fAppearanceColorListModel = new String[][] { { "Line number color", TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR }, //$NON-NLS-1$
|
||||
protected final String[][] fAppearanceColorListModel = new String[][] { { "Line number color", ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR }, //$NON-NLS-1$
|
||||
{
|
||||
"Matching bracket color", CEditor.MATCHING_BRACKETS_COLOR }, //$NON-NLS-1$
|
||||
{
|
||||
"Current line highlight color", TextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR }, //$NON-NLS-1$
|
||||
"Current line highlight color", ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR }, //$NON-NLS-1$
|
||||
{
|
||||
"Print margin color", TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR }, //$NON-NLS-1$
|
||||
"Print margin color", ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR }, //$NON-NLS-1$
|
||||
{
|
||||
"Linked position color", CEditor.LINKED_POSITION_COLOR }, //$NON-NLS-1$
|
||||
};
|
||||
|
@ -158,114 +158,54 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
|||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, info.getOverviewRulerPreferenceKey()));
|
||||
}
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.PREFERENCE_COLOR_FOREGROUND));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
CEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,CEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.PREFERENCE_COLOR_BACKGROUND));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
CEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSourceViewerConfiguration.PREFERENCE_TAB_WIDTH));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_MULTI_LINE_COMMENT));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_MULTI_LINE_COMMENT + "_bold"));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_SINGLE_LINE_COMMENT));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
ICColorConstants.C_SINGLE_LINE_COMMENT + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,CEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSourceViewerConfiguration.PREFERENCE_TAB_WIDTH));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_MULTI_LINE_COMMENT));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_MULTI_LINE_COMMENT + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_SINGLE_LINE_COMMENT));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_SINGLE_LINE_COMMENT + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_KEYWORD));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_KEYWORD + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_KEYWORD + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_TYPE));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_TYPE + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_STRING));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_STRING + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_DEFAULT));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_DEFAULT + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_DEFAULT + "_bold"));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.MATCHING_BRACKETS_COLOR));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.MATCHING_BRACKETS));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.STRING,
|
||||
TextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
TextEditorPreferenceConstants.EDITOR_CURRENT_LINE));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.SPACES_FOR_TABS));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.STRING,
|
||||
TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.INT,
|
||||
TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.LINKED_POSITION_COLOR));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.STRING,
|
||||
TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
TextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.AUTOACTIVATION));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, ContentAssistPreference.AUTOACTIVATION_DELAY));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.AUTOACTIVATION));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, ContentAssistPreference.AUTOACTIVATION_DELAY));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.AUTOINSERT));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_BACKGROUND));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_FOREGROUND));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_BACKGROUND));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_FOREGROUND));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.STRING,
|
||||
ContentAssistPreference.AUTOACTIVATION_TRIGGERS_C));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(
|
||||
OverlayPreferenceStore.BOOLEAN,
|
||||
ContentAssistPreference.SHOW_DOCUMENTED_PROPOSALS));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.ORDER_PROPOSALS));
|
||||
overlayKeys.add(
|
||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.CASE_SENSITIVITY));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_BACKGROUND));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_FOREGROUND));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_BACKGROUND));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_FOREGROUND));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_C));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.SHOW_DOCUMENTED_PROPOSALS));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.ORDER_PROPOSALS));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.CASE_SENSITIVITY));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.ADD_INCLUDE));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.PROJECT_SCOPE_SEARCH));
|
||||
//new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_FOREGROUND),
|
||||
//new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_BACKGROUND),
|
||||
//new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_FOREGROUND),
|
||||
//new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_JAVADOC),
|
||||
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.PROJECT_SCOPE_SEARCH));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PreferenceConstants.EDITOR_TASK_TAG_COLOR));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_TASK_TAG_BOLD));
|
||||
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PreferenceConstants.EDITOR_TASK_INDICATION_COLOR));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_TASK_INDICATION));
|
||||
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_TASK_INDICATION_IN_OVERVIEW_RULER));
|
||||
|
||||
OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
|
||||
|
||||
OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
|
||||
overlayKeys.toArray(keys);
|
||||
return new OverlayPreferenceStore(getPreferenceStore(), keys);
|
||||
}
|
||||
|
@ -287,12 +227,12 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
|||
color = display.getSystemColor(SWT.COLOR_GRAY);
|
||||
PreferenceConverter.setDefault(store, CEditor.MATCHING_BRACKETS_COLOR, color.getRGB());
|
||||
|
||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_CURRENT_LINE, true);
|
||||
PreferenceConverter.setDefault(store, TextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR, new RGB(225, 235, 224));
|
||||
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE, true);
|
||||
PreferenceConverter.setDefault(store, ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR, new RGB(225, 235, 224));
|
||||
|
||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN, true);
|
||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN, 80);
|
||||
PreferenceConverter.setDefault(store, TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR, new RGB(176, 180, 185));
|
||||
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN, true);
|
||||
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN, 80);
|
||||
PreferenceConverter.setDefault(store, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR, new RGB(176, 180, 185));
|
||||
|
||||
WorkbenchChainedTextFontFieldEditor.startPropagate(store, JFaceResources.TEXT_FONT);
|
||||
|
||||
|
@ -328,10 +268,10 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
|||
|
||||
PreferenceConverter.setDefault(store, CEditor.LINKED_POSITION_COLOR, new RGB(0, 200, 100));
|
||||
|
||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, false);
|
||||
PreferenceConverter.setDefault(store, TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, new RGB(0, 0, 0));
|
||||
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, false);
|
||||
PreferenceConverter.setDefault(store, ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, new RGB(0, 0, 0));
|
||||
|
||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER, true);
|
||||
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER, true);
|
||||
|
||||
store.setDefault(ContentAssistPreference.AUTOACTIVATION, false);
|
||||
store.setDefault(ContentAssistPreference.AUTOACTIVATION_DELAY, 500);
|
||||
|
@ -792,7 +732,7 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
|||
addTextField(behaviorComposite, label, CSourceViewerConfiguration.PREFERENCE_TAB_WIDTH, 2, 0, true);
|
||||
|
||||
label = "Print margin col&umn:";
|
||||
addTextField(behaviorComposite, label, TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN, 4, 0, true);
|
||||
addTextField(behaviorComposite, label, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN, 4, 0, true);
|
||||
|
||||
label = "Insert &space for tabs";
|
||||
addCheckBox(behaviorComposite, label, CEditor.SPACES_FOR_TABS, 0);
|
||||
|
@ -801,16 +741,16 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
|||
fBracketHighlightButton = addCheckBox(behaviorComposite, label, CEditor.MATCHING_BRACKETS, 0);
|
||||
|
||||
label = "Show line numbers"; //$NON-NLS-1$
|
||||
addCheckBox(behaviorComposite, label, TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, 0);
|
||||
addCheckBox(behaviorComposite, label, ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, 0);
|
||||
|
||||
label = "Highlight ¤t line";
|
||||
fLineHighlightButton = addCheckBox(behaviorComposite, label, TextEditorPreferenceConstants.EDITOR_CURRENT_LINE, 0);
|
||||
fLineHighlightButton = addCheckBox(behaviorComposite, label, ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE, 0);
|
||||
|
||||
label = "Show overview ruler"; //$NON-NLS-1$
|
||||
addCheckBox(behaviorComposite, label, TextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER, 0);
|
||||
addCheckBox(behaviorComposite, label, ExtendedTextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER, 0);
|
||||
|
||||
label = "Show print &margin";
|
||||
addCheckBox(behaviorComposite, label, TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN, 0);
|
||||
addCheckBox(behaviorComposite, label, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN, 0);
|
||||
|
||||
Label l = new Label(behaviorComposite, SWT.LEFT);
|
||||
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
||||
|
@ -899,8 +839,8 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
|||
//label= "Show only proposals visible in the invocation conte&xt";
|
||||
//addCheckBox(contentAssistComposite, label, ContentAssistPreference.SHOW_VISIBLE_PROPOSALS, 0);
|
||||
|
||||
//label= "Show only proposals with &matching cases";
|
||||
//addCheckBox(contentAssistComposite, label, ContentAssistPreference.CASE_SENSITIVITY, 0);
|
||||
label= "Show only proposals with &matching cases";
|
||||
addCheckBox(contentAssistComposite, label, ContentAssistPreference.CASE_SENSITIVITY, 0);
|
||||
|
||||
//label= "Present proposals in a&lphabetical order";
|
||||
//addCheckBox(contentAssistComposite, label, ContentAssistPreference.ORDER_PROPOSALS, 0);
|
||||
|
|
|
@ -15,7 +15,7 @@ import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
|
|||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
||||
import org.eclipse.cdt.internal.ui.text.ContentAssistPreference;
|
||||
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
||||
import org.eclipse.cdt.internal.ui.text.template.TemplateVariableProcessor;
|
||||
import org.eclipse.cdt.internal.ui.util.SWTUtil;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.Vector;
|
|||
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditorTextHoverDispatcher;
|
||||
import org.eclipse.cdt.internal.ui.text.contentassist.*;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.ui.ICDTConstants;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package org.eclipse.cdt.internal.ui.text;
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
|
@ -26,7 +26,6 @@ import org.eclipse.cdt.core.search.BasicSearchResultCollector;
|
|||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||
import org.eclipse.cdt.core.search.SearchEngine;
|
||||
import org.eclipse.cdt.internal.core.contentassist.CompletionEngine;
|
||||
import org.eclipse.cdt.internal.core.model.CElement;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.cdt.internal.core.search.matching.OrPattern;
|
||||
|
@ -36,6 +35,8 @@ import org.eclipse.cdt.internal.corext.template.ContextTypeRegistry;
|
|||
import org.eclipse.cdt.internal.ui.CCompletionContributorManager;
|
||||
import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.text.CParameterListValidator;
|
||||
import org.eclipse.cdt.internal.ui.text.CWordFinder;
|
||||
import org.eclipse.cdt.internal.ui.text.template.TemplateEngine;
|
||||
import org.eclipse.cdt.ui.CSearchResultLabelProvider;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
@ -56,7 +57,6 @@ 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.IContextInformationValidator;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.ui.IEditorPart;
|
||||
|
||||
|
@ -472,7 +472,10 @@ public class CCompletionProcessor implements IContentAssistProcessor {
|
|||
// TODO: change that to resource scope later
|
||||
if (currentScope == null)
|
||||
return;
|
||||
|
||||
|
||||
// clear the completion list at the result collector
|
||||
resultCollector.clearCompletions();
|
||||
|
||||
IPreferenceStore store = CUIPlugin.getDefault().getPreferenceStore();
|
||||
boolean projectScope = store.getBoolean(ContentAssistPreference.PROJECT_SCOPE_SEARCH);
|
||||
ICSearchScope scope = null;
|
||||
|
@ -557,8 +560,41 @@ public class CCompletionProcessor implements IContentAssistProcessor {
|
|||
|
||||
BasicSearchMatch match = (BasicSearchMatch)i.next();
|
||||
int type = match.getElementType();
|
||||
switch (type){
|
||||
case ICElement.C_FIELD:
|
||||
int relevance = completionEngine.computeRelevance(type, frag, match.getName());
|
||||
if(relevance > 0){
|
||||
switch (type){
|
||||
case ICElement.C_FIELD:
|
||||
switch (match.getVisibility()){
|
||||
case ICElement.CPP_PUBLIC:
|
||||
visibility = ASTAccessVisibility.PUBLIC;
|
||||
break;
|
||||
case ICElement.CPP_PROTECTED:
|
||||
visibility = ASTAccessVisibility.PROTECTED;
|
||||
break;
|
||||
default:
|
||||
visibility = ASTAccessVisibility.PRIVATE;
|
||||
break;
|
||||
};
|
||||
resultCollector.acceptField(
|
||||
match.getName(),
|
||||
null,
|
||||
visibility,
|
||||
completionStart,
|
||||
completionLength,
|
||||
relevance);
|
||||
break;
|
||||
|
||||
case ICElement.C_VARIABLE:
|
||||
case ICElement.C_VARIABLE_DECLARATION:
|
||||
resultCollector.acceptVariable(
|
||||
match.getName(),
|
||||
null,
|
||||
completionStart,
|
||||
completionLength,
|
||||
relevance);
|
||||
break;
|
||||
case ICElement.C_METHOD:
|
||||
case ICElement.C_METHOD_DECLARATION:
|
||||
switch (match.getVisibility()){
|
||||
case ICElement.CPP_PUBLIC:
|
||||
visibility = ASTAccessVisibility.PUBLIC;
|
||||
|
@ -570,109 +606,79 @@ public class CCompletionProcessor implements IContentAssistProcessor {
|
|||
visibility = ASTAccessVisibility.PRIVATE;
|
||||
break;
|
||||
};
|
||||
resultCollector.acceptField(
|
||||
resultCollector.acceptMethod(
|
||||
match.getName(),
|
||||
null,
|
||||
null,
|
||||
match.getReturnType(),
|
||||
visibility,
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
|
||||
case ICElement.C_VARIABLE:
|
||||
case ICElement.C_VARIABLE_DECLARATION:
|
||||
resultCollector.acceptVariable(
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
case ICElement.C_FUNCTION:
|
||||
case ICElement.C_FUNCTION_DECLARATION:
|
||||
resultCollector.acceptFunction(
|
||||
match.getName(),
|
||||
null,
|
||||
null,
|
||||
match.getReturnType(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_METHOD:
|
||||
case ICElement.C_METHOD_DECLARATION:
|
||||
switch (match.getVisibility()){
|
||||
case ICElement.CPP_PUBLIC:
|
||||
visibility = ASTAccessVisibility.PUBLIC;
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
case ICElement.CPP_PROTECTED:
|
||||
visibility = ASTAccessVisibility.PROTECTED;
|
||||
case ICElement.C_CLASS:
|
||||
resultCollector.acceptClass(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
default:
|
||||
visibility = ASTAccessVisibility.PRIVATE;
|
||||
case ICElement.C_STRUCT:
|
||||
resultCollector.acceptStruct(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
};
|
||||
resultCollector.acceptMethod(
|
||||
match.getName(),
|
||||
null,
|
||||
match.getReturnType(),
|
||||
visibility,
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_FUNCTION:
|
||||
case ICElement.C_FUNCTION_DECLARATION:
|
||||
resultCollector.acceptFunction(
|
||||
match.getName(),
|
||||
null,
|
||||
match.getReturnType(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_CLASS:
|
||||
resultCollector.acceptClass(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_STRUCT:
|
||||
resultCollector.acceptStruct(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_UNION:
|
||||
resultCollector.acceptUnion(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_NAMESPACE:
|
||||
resultCollector.acceptNamespace(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_MACRO:
|
||||
resultCollector.acceptMacro(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_ENUMERATION:
|
||||
resultCollector.acceptEnumeration(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
case ICElement.C_ENUMERATOR:
|
||||
resultCollector.acceptEnumerator(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeTypeRelevance(type));
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
}
|
||||
case ICElement.C_UNION:
|
||||
resultCollector.acceptUnion(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
case ICElement.C_NAMESPACE:
|
||||
resultCollector.acceptNamespace(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
case ICElement.C_MACRO:
|
||||
resultCollector.acceptMacro(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
case ICElement.C_ENUMERATION:
|
||||
resultCollector.acceptEnumeration(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
case ICElement.C_ENUMERATOR:
|
||||
resultCollector.acceptEnumerator(
|
||||
match.getName(),
|
||||
completionStart,
|
||||
completionLength,
|
||||
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
} // end switch
|
||||
} // end if relevance
|
||||
} // end while
|
||||
completions.addAll(resultCollector.getCompletions());
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package org.eclipse.cdt.internal.ui.text;
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
/*
|
||||
* (c) Copyright QNX Software Systems Ltd. 2002.
|
|
@ -1,4 +1,4 @@
|
|||
package org.eclipse.cdt.internal.ui.text;
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
/*
|
||||
* (c) Copyright QNX Software Systems Ltd. 2002.
|
|
@ -0,0 +1,530 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
import java.io.CharArrayReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICompletionRequestor;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserFactoryException;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||
import org.eclipse.cdt.core.parser.ScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMacro;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNode.LookupResult;
|
||||
import org.eclipse.cdt.internal.core.CharOperation;
|
||||
import org.eclipse.cdt.internal.core.model.IWorkingCopy;
|
||||
import org.eclipse.cdt.internal.core.parser.util.ASTUtil;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
* This class is the entry point for code completions.
|
||||
* It contains a public API used to call ContentAssist on a given working copy
|
||||
* and a given completion offset.
|
||||
*
|
||||
*/
|
||||
public class CompletionEngine implements RelevanceConstants{
|
||||
List completions = new ArrayList();
|
||||
ICompletionRequestor requestor;
|
||||
int completionStart = 0;
|
||||
int completionLength = 0;
|
||||
IPreferenceStore store = CUIPlugin.getDefault().getPreferenceStore();
|
||||
// keywords types
|
||||
public static final int BASIC_TYPES_KEYWORDS = 0;
|
||||
private static final String basicTypesKeywords[] = {
|
||||
"namespace",
|
||||
"class",
|
||||
"struct",
|
||||
"union",
|
||||
"enum",
|
||||
"bool",
|
||||
"char",
|
||||
"wchar_t",
|
||||
"int",
|
||||
"float",
|
||||
"double",
|
||||
"void",
|
||||
"template",
|
||||
};
|
||||
private static final String exceptionKeyword = "...";
|
||||
|
||||
public CompletionEngine(ICompletionRequestor completionRequestor){
|
||||
completions.clear();
|
||||
requestor = completionRequestor;
|
||||
}
|
||||
|
||||
private int computeCaseMatchingRelevance(String prefix, String proposalName){
|
||||
if (CharOperation.prefixEquals(prefix.toCharArray(), proposalName.toCharArray(), true /* do not ignore case */)) {
|
||||
if(CharOperation.equals(prefix.toCharArray(), proposalName.toCharArray(), true /* do not ignore case */)) {
|
||||
return CASE_MATCH_RELEVANCE + EXACT_NAME_MATCH_RELEVANCE;
|
||||
} else {
|
||||
return CASE_MATCH_RELEVANCE;
|
||||
}
|
||||
} else {
|
||||
boolean matchCase = store.getBoolean(ContentAssistPreference.CASE_SENSITIVITY);
|
||||
|
||||
if(matchCase)
|
||||
return CASE_NOT_VALID_RELEVANCE;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
private int computeTypeRelevance(int type){
|
||||
switch (type){
|
||||
case ICElement.C_FIELD:
|
||||
return FIELD_TYPE_RELEVANCE;
|
||||
case ICElement.C_VARIABLE:
|
||||
case ICElement.C_VARIABLE_DECLARATION:
|
||||
return VARIABLE_TYPE_RELEVANCE;
|
||||
case ICElement.C_METHOD:
|
||||
case ICElement.C_METHOD_DECLARATION:
|
||||
return METHOD_TYPE_RELEVANCE;
|
||||
case ICElement.C_FUNCTION:
|
||||
case ICElement.C_FUNCTION_DECLARATION:
|
||||
return FUNCTION_TYPE_RELEVANCE;
|
||||
case ICElement.C_CLASS:
|
||||
return CLASS_TYPE_RELEVANCE;
|
||||
case ICElement.C_STRUCT:
|
||||
return STRUCT_TYPE_RELEVANCE;
|
||||
case ICElement.C_UNION:
|
||||
return UNION_TYPE_RELEVANCE;
|
||||
case ICElement.C_NAMESPACE:
|
||||
return NAMESPACE_TYPE_RELEVANCE;
|
||||
case ICElement.C_MACRO:
|
||||
return MACRO_TYPE_RELEVANCE;
|
||||
case ICElement.C_ENUMERATION:
|
||||
return ENUMERATION_TYPE_RELEVANCE;
|
||||
case ICElement.C_ENUMERATOR:
|
||||
return ENUMERATOR_TYPE_RELEVANCE;
|
||||
default :
|
||||
return DEFAULT_TYPE_RELEVANCE;
|
||||
}
|
||||
}
|
||||
public int computeRelevance(int elementType, String prefix, String proposalName){
|
||||
// compute the relevance according to the elemnent type
|
||||
int relevance = computeTypeRelevance(elementType);
|
||||
// compute the relevance according to the case sensitivity
|
||||
relevance += computeCaseMatchingRelevance(prefix, proposalName);
|
||||
return relevance;
|
||||
}
|
||||
private IASTCompletionNode parse(IWorkingCopy sourceUnit, int completionOffset){
|
||||
ContentAssistElementRequestor requestor = new ContentAssistElementRequestor();
|
||||
// Get resource info
|
||||
IResource currentResource = sourceUnit.getResource();
|
||||
IPath realPath = currentResource.getLocation();
|
||||
IProject project = currentResource.getProject();
|
||||
Reader reader = new CharArrayReader( sourceUnit.getContents() );
|
||||
|
||||
//Get the scanner info
|
||||
IScannerInfo scanInfo = new ScannerInfo();
|
||||
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
|
||||
if (provider != null){
|
||||
IScannerInfo buildScanInfo = provider.getScannerInformation(project);
|
||||
if( buildScanInfo != null )
|
||||
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
|
||||
}
|
||||
|
||||
//C or CPP?
|
||||
ParserLanguage language = CoreModel.getDefault().hasCCNature(project) ? ParserLanguage.CPP : ParserLanguage.C;
|
||||
|
||||
IParser parser = null;
|
||||
try
|
||||
{
|
||||
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getParserLogService() );
|
||||
parser = ParserFactory.createParser( scanner, requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
|
||||
}
|
||||
catch( ParserFactoryException pfe )
|
||||
{
|
||||
|
||||
}
|
||||
if(parser != null){
|
||||
IASTCompletionNode result = parser.parse(completionOffset);
|
||||
return result;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void addNodeToCompletions(IASTNode node, String prefix){
|
||||
if(node instanceof IASTField){
|
||||
IASTField field = (IASTField)node;
|
||||
int relevance = computeRelevance(ICElement.C_FIELD, prefix, field.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptField(field.getName(),
|
||||
ASTUtil.getType(field.getAbstractDeclaration()),
|
||||
field.getVisiblity(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTVariable){
|
||||
IASTVariable variable = (IASTVariable)node;
|
||||
int relevance = computeRelevance(ICElement.C_VARIABLE, prefix, variable.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptVariable(variable.getName(),
|
||||
ASTUtil.getType(variable.getAbstractDeclaration()),
|
||||
completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTMethod) {
|
||||
IASTMethod method = (IASTMethod)node;
|
||||
int relevance = computeRelevance(ICElement.C_METHOD, prefix, method.getName());
|
||||
if(relevance >= 0){
|
||||
String parameterString = ASTUtil.getParametersString(ASTUtil.getFunctionParameterTypes(method));
|
||||
requestor.acceptMethod(method.getName(),
|
||||
ASTUtil.getType(method.getReturnType()), parameterString,
|
||||
method.getVisiblity(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTFunction){
|
||||
IASTFunction function = (IASTFunction)node;
|
||||
int relevance = computeRelevance(ICElement.C_FUNCTION, prefix, function.getName());
|
||||
if(relevance >= 0){
|
||||
String parameterString = ASTUtil.getParametersString(ASTUtil.getFunctionParameterTypes(function));
|
||||
requestor.acceptFunction(function.getName(),
|
||||
ASTUtil.getType(function.getReturnType()), parameterString,
|
||||
completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTClassSpecifier){
|
||||
IASTClassSpecifier classSpecifier = (IASTClassSpecifier)node;
|
||||
ASTClassKind classkind = classSpecifier.getClassKind();
|
||||
if(classkind == ASTClassKind.CLASS){
|
||||
int relevance = computeRelevance(ICElement.C_CLASS, prefix, classSpecifier.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptClass(classSpecifier.getName(),
|
||||
completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
if(classkind == ASTClassKind.STRUCT){
|
||||
int relevance = computeRelevance(ICElement.C_STRUCT, prefix, classSpecifier.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptStruct(classSpecifier.getName(),
|
||||
completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
if(classkind == ASTClassKind.UNION){
|
||||
int relevance = computeRelevance(ICElement.C_UNION, prefix, classSpecifier.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptUnion(classSpecifier.getName(),
|
||||
completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTMacro){
|
||||
IASTMacro macro = (IASTMacro)node;
|
||||
int relevance = computeRelevance(ICElement.C_MACRO, prefix, macro.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptMacro(macro.getName(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTNamespaceDefinition){
|
||||
IASTNamespaceDefinition namespace = (IASTNamespaceDefinition)node;
|
||||
int relevance = computeRelevance(ICElement.C_NAMESPACE, prefix, namespace.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptNamespace(namespace.getName(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTEnumerationSpecifier){
|
||||
IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier)node;
|
||||
int relevance = computeRelevance(ICElement.C_ENUMERATION, prefix, enumeration.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptEnumeration(enumeration.getName(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
else if(node instanceof IASTEnumerator){
|
||||
IASTEnumerator enumerator = (IASTEnumerator)node;
|
||||
int relevance = computeRelevance(ICElement.C_ENUMERATOR, prefix, enumerator.getName());
|
||||
if(relevance >= 0){
|
||||
requestor.acceptEnumerator(enumerator.getName(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void addKeywordToCompletions (String keyword){
|
||||
int relevance = KEYWORD_TYPE_RELEVANCE;
|
||||
requestor.acceptKeyword(keyword, completionStart, completionLength, relevance);
|
||||
|
||||
}
|
||||
private void addKeywordsToCompletions(Iterator keywords){
|
||||
while (keywords.hasNext()){
|
||||
String keyword = (String) keywords.next();
|
||||
addKeywordToCompletions(keyword);
|
||||
}
|
||||
}
|
||||
|
||||
private void addToCompletions (LookupResult result){
|
||||
Iterator nodes = result.getNodes();
|
||||
while (nodes.hasNext()){
|
||||
IASTNode node = (IASTNode) nodes.next();
|
||||
addNodeToCompletions(node, result.getPrefix());
|
||||
}
|
||||
Iterator keywords = result.getKeywords();
|
||||
addKeywordsToCompletions(keywords);
|
||||
return ;
|
||||
}
|
||||
|
||||
private List lookupKeyword(String prefix, int lookupType){
|
||||
List result = new ArrayList();
|
||||
switch (lookupType){
|
||||
case BASIC_TYPES_KEYWORDS:
|
||||
for(int i = 0; i <basicTypesKeywords.length; i++){
|
||||
String kw =basicTypesKeywords[i];
|
||||
if(kw.startsWith(prefix))
|
||||
result.add(kw);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
private void completionOnMember(IASTCompletionNode completionNode){
|
||||
// Completing after a dot
|
||||
// 1. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// 2. lookup fields & add to completion proposals
|
||||
LookupResult result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.FIELDS);
|
||||
addToCompletions (result);
|
||||
// 3. looup methods & add to completion proposals
|
||||
result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS);
|
||||
addToCompletions (result);
|
||||
// 4. lookup nested structures & add to completion proposals
|
||||
result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.STRUCTURES);
|
||||
addToCompletions (result);
|
||||
}
|
||||
private void completionOnType(IASTCompletionNode completionNode){
|
||||
// completing on a type
|
||||
// 1. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// if the prefix is not empty
|
||||
if(completionNode.getCompletionPrefix().length() > 0 ) {
|
||||
// 2. Lookup all types that could be used here
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.STRUCTURES);
|
||||
addToCompletions(result);
|
||||
// 3. Lookup keywords
|
||||
// basic types should be in the keyword list
|
||||
List keywords = lookupKeyword(completionNode.getCompletionPrefix(), BASIC_TYPES_KEYWORDS);
|
||||
addKeywordsToCompletions(keywords.iterator());
|
||||
} else // prefix is empty, we can not look for everything
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void completionOnFieldType(IASTCompletionNode completionNode){
|
||||
// 1. basic completion on all types
|
||||
completionOnType(completionNode);
|
||||
// 2. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// 3. lookup methods
|
||||
// we are at a field declaration place, the user could be trying to override a function.
|
||||
// We have to lookup functions that could be overridden here.
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS);
|
||||
addToCompletions(result);
|
||||
}
|
||||
private void completionOnVariableType(IASTCompletionNode completionNode){
|
||||
// 1. basic completion on all types
|
||||
completionOnType(completionNode);
|
||||
}
|
||||
private void completionOnMethodReturnType(IASTCompletionNode completionNode){
|
||||
// 1. basic completion on all types
|
||||
completionOnType(completionNode);
|
||||
}
|
||||
private void completionOnFunctionReturnType(IASTCompletionNode completionNode){
|
||||
// 1. basic completion on all types
|
||||
completionOnType(completionNode);
|
||||
}
|
||||
private void completionOnSingleNameReference(IASTCompletionNode completionNode){
|
||||
// 1. Get the search scope node
|
||||
// the search node is the code scope inwhich completion is requested
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// if prefix is not empty
|
||||
if (completionNode.getCompletionPrefix().length() > 0){
|
||||
// here we have to look for anything that could be referenced within this scope
|
||||
// 1. lookup local variables, global variables, functions, methods, structures, enums, macros, and namespaces
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.ALL);
|
||||
addToCompletions(result);
|
||||
} else // prefix is empty
|
||||
{
|
||||
// 1. look only for local variables
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.LOCAL_VARIABLES);
|
||||
addToCompletions(result);
|
||||
// 2. and what can be accessed through the "this" pointer
|
||||
// TODO : complete the lookup call
|
||||
}
|
||||
}
|
||||
private void completionOnQualifiedNameReference(IASTCompletionNode completionNode){
|
||||
// 1. Get the search scope node
|
||||
// the search node is the name before the qualification
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// here we have to look for anything that could be referenced within this scope
|
||||
// 1. lookup local variables, global variables, functions, methods, structures, enums, macros, and namespaces
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.ALL);
|
||||
addToCompletions(result);
|
||||
}
|
||||
private void completionOnStructureReference(IASTCompletionNode completionNode){
|
||||
// 1. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// only look for structures : classes, structs, and unions
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.STRUCTURES);
|
||||
addToCompletions(result);
|
||||
}
|
||||
private void completionOnClassReference(IASTCompletionNode completionNode){
|
||||
// 1. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// only look for classes
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.CLASSES);
|
||||
addToCompletions(result);
|
||||
}
|
||||
private void completionOnExceptionReference(IASTCompletionNode completionNode){
|
||||
// here we have to look for all types
|
||||
completionOnType(completionNode);
|
||||
// plus if the prefix is empty, add "..." to the proposals
|
||||
if(completionNode.getCompletionPrefix().length() == 0){
|
||||
addKeywordToCompletions(exceptionKeyword);
|
||||
}
|
||||
}
|
||||
private void completionOnMacroReference(IASTCompletionNode completionNode){
|
||||
// 1. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// only look for macros
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.MACROS);
|
||||
addToCompletions(result);
|
||||
}
|
||||
private void completionOnMessageSend(IASTCompletionNode completionNode){
|
||||
// TODO: complete the lookups
|
||||
}
|
||||
private void completionOnQualifiedAllocationExpression(IASTCompletionNode completionNode){
|
||||
// 1. Get the search scope node
|
||||
IASTNode searchNode = completionNode.getCompletionContext();
|
||||
// only lookup constructors
|
||||
LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.CONSTRUCTORS);
|
||||
}
|
||||
private void completionOnKeyword(IASTCompletionNode completionNode){
|
||||
// lookup every type of keywords
|
||||
// 1. basic types keword list
|
||||
List result = lookupKeyword(completionNode.getCompletionPrefix(), BASIC_TYPES_KEYWORDS);
|
||||
addKeywordsToCompletions(result.iterator());
|
||||
}
|
||||
|
||||
public void complete(IWorkingCopy sourceUnit, int completionOffset, List completionList) {
|
||||
|
||||
// 1- Parse the translation unit
|
||||
IASTCompletionNode completionNode = parse(sourceUnit, completionOffset);
|
||||
|
||||
if (completionNode == null)
|
||||
return;
|
||||
|
||||
// set the completionStart and the completionLength
|
||||
completionStart = completionOffset;
|
||||
completionLength = completionNode.getCompletionPrefix().length();
|
||||
|
||||
// 2- Check the return value
|
||||
if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.DOT_MEMBER){
|
||||
// CompletionOnDotMember
|
||||
completionOnMember(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARROW_MEMBER){
|
||||
//CompletionOnArrowMember
|
||||
completionOnMember(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIEDNAME_MEMBER){
|
||||
//CompletionOnQualifiedNameMember
|
||||
completionOnMember(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FIELD_TYPE){
|
||||
// CompletionOnFieldType
|
||||
completionOnFieldType(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.VARIABLE_TYPE){
|
||||
// CompletionOnVariableType
|
||||
completionOnType(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARGUMENT_TYPE){
|
||||
// CompletionOnArgumentType
|
||||
completionOnVariableType(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.METHOD_RETURN_TYPE){
|
||||
// CompletionOnMethodReturnType
|
||||
completionOnMethodReturnType(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FUNCTIOND_RETURN_TYPE){
|
||||
// CompletionOnFunctionReturnType
|
||||
completionOnFunctionReturnType(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.SINGLE_NAME_REFERENCE){
|
||||
// CompletionOnSingleNameReference
|
||||
completionOnSingleNameReference(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_NAME_REFERENCE){
|
||||
// CompletionOnQualifiedNameReference
|
||||
completionOnQualifiedNameReference(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.STRUCTURE_REFERENCE){
|
||||
// CompletionOnStructureReference
|
||||
completionOnStructureReference(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.CLASS_REFERENCE){
|
||||
// CompletionOnClassReference
|
||||
completionOnClassReference(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.EXCEPTION_REFERENCE){
|
||||
// CompletionOnExceptionReference
|
||||
completionOnExceptionReference(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MACRO_REFERENCE){
|
||||
// CompletionOnMacroReference
|
||||
completionOnMacroReference(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MESSAGE_SEND){
|
||||
// CompletionOnMessageSend
|
||||
completionOnMessageSend(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_ALLOCATION_EXPRESSION){
|
||||
// CompletionOnQualifiedAllocationExpression
|
||||
completionOnQualifiedAllocationExpression(completionNode);
|
||||
}
|
||||
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.KEYWORD){
|
||||
// CompletionOnKeyword
|
||||
completionOnKeyword(completionNode);
|
||||
}
|
||||
|
||||
completionList.addAll(completions);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -8,7 +8,7 @@
|
|||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.contentassist;
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
import org.eclipse.cdt.core.ICompletionRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
||||
|
@ -125,4 +125,16 @@ public class CompletionRequestorAdaptor implements ICompletionRequestor {
|
|||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptKeyword(java.lang.String, int, int, int)
|
||||
*/
|
||||
public void acceptKeyword(
|
||||
String name,
|
||||
int completionStart,
|
||||
int completionLength,
|
||||
int relevance) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
* To change the template for this generated file go to
|
||||
* Window>Preferences>Java>Code Generation>Code and Comments
|
||||
*/
|
||||
package org.eclipse.cdt.internal.core.contentassist;
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
import org.eclipse.cdt.core.parser.NullSourceElementRequestor;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package org.eclipse.cdt.internal.ui.text;
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
/*
|
||||
* (c) Copyright IBM Corp. 2000, 2001.
|
||||
|
@ -8,6 +8,8 @@ package org.eclipse.cdt.internal.ui.text;
|
|||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
||||
import org.eclipse.cdt.internal.ui.text.IColorManager;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.preference.PreferenceConverter;
|
|
@ -0,0 +1,37 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
*/
|
||||
public interface RelevanceConstants {
|
||||
final int KEYWORD_TYPE_RELEVANCE = 13;
|
||||
final int LOCAL_VARIABLE_TYPE_RELEVANCE = 12;
|
||||
final int FIELD_TYPE_RELEVANCE = 11;
|
||||
final int VARIABLE_TYPE_RELEVANCE = 10;
|
||||
final int METHOD_TYPE_RELEVANCE = 9;
|
||||
final int FUNCTION_TYPE_RELEVANCE = 8;
|
||||
final int CLASS_TYPE_RELEVANCE = 7;
|
||||
final int STRUCT_TYPE_RELEVANCE = 6;
|
||||
final int UNION_TYPE_RELEVANCE = 5;
|
||||
final int NAMESPACE_TYPE_RELEVANCE = 4;
|
||||
final int MACRO_TYPE_RELEVANCE = 3;
|
||||
final int ENUMERATION_TYPE_RELEVANCE = 2;
|
||||
final int ENUMERATOR_TYPE_RELEVANCE = 1;
|
||||
final int DEFAULT_TYPE_RELEVANCE = 0;
|
||||
|
||||
final int CASE_MATCH_RELEVANCE = 10;
|
||||
final int EXACT_NAME_MATCH_RELEVANCE = 4;
|
||||
final int CASE_NOT_VALID_RELEVANCE = -100;
|
||||
|
||||
}
|
|
@ -8,13 +8,12 @@
|
|||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text;
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
||||
import org.eclipse.cdt.internal.core.contentassist.CompletionRequestorAdaptor;
|
||||
import org.eclipse.cdt.internal.ui.CElementImageProvider;
|
||||
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
@ -46,6 +45,9 @@ public class ResultCollector extends CompletionRequestorAdaptor {
|
|||
public List getCompletions() {
|
||||
return completions;
|
||||
}
|
||||
public void clearCompletions() {
|
||||
completions.clear();
|
||||
}
|
||||
/*
|
||||
* Create a proposal
|
||||
*/
|
||||
|
@ -420,4 +422,28 @@ public class ResultCollector extends CompletionRequestorAdaptor {
|
|||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptKeyword(java.lang.String, int, int, int)
|
||||
*/
|
||||
public void acceptKeyword(
|
||||
String name,
|
||||
int completionStart,
|
||||
int completionLength,
|
||||
int relevance) {
|
||||
String replaceString = "";
|
||||
String displayString = "";
|
||||
Image image = null;
|
||||
StringBuffer infoString = new StringBuffer();
|
||||
|
||||
// fill the replace, display and info strings
|
||||
replaceString = name;
|
||||
displayString = name;
|
||||
|
||||
// no image for keywords
|
||||
// create proposal and add it to completions list
|
||||
ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(),
|
||||
null, image, completionStart, completionLength, relevance);
|
||||
completions.add(proposal);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue