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.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
import org.eclipse.cdt.internal.core.model.TranslationUnit;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
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.cdt.testplugin.CProjectHelper;
|
||||||
import org.eclipse.core.internal.resources.ResourceException;
|
import org.eclipse.core.internal.resources.ResourceException;
|
||||||
import org.eclipse.core.resources.IFile;
|
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
|
2003-11-27 Hoda Amer
|
||||||
Content Assist work : Added an ICompletionRequestor interface
|
Content Assist work : Added an ICompletionRequestor interface
|
||||||
and a CompletionRequestorAdaptor classe.
|
and a CompletionRequestorAdaptor classe.
|
||||||
|
|
|
@ -49,7 +49,7 @@ public interface IASTCompletionNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public CompletionKind getCompletionKind();
|
public CompletionKind getCompletionKind();
|
||||||
public IASTNode getCompletionContext();
|
public IASTNode getCompletionContext();
|
||||||
public String getCompletionPrefix();
|
public String getCompletionPrefix();
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,8 +32,12 @@ public interface IASTNode {
|
||||||
public static final LookupKind LOCAL_VARIABLES = new LookupKind( 7 );
|
public static final LookupKind LOCAL_VARIABLES = new LookupKind( 7 );
|
||||||
public static final LookupKind METHODS = new LookupKind( 8 );
|
public static final LookupKind METHODS = new LookupKind( 8 );
|
||||||
public static final LookupKind FIELDS = new LookupKind( 9 );
|
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
|
* @param enumValue
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -31,4 +31,5 @@ public interface ICompletionRequestor {
|
||||||
void acceptMacro(String name, int completionStart, int completionLength, int relevance);
|
void acceptMacro(String name, int completionStart, int completionLength, int relevance);
|
||||||
void acceptEnumeration(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 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
|
2003-11-27 Hoda Amer
|
||||||
Content Assist work : Added a ResultCollector class
|
Content Assist work : Added a ResultCollector class
|
||||||
and moved the ICCompletionProposal from an internal package
|
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.CPairMatcher;
|
||||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
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.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.IWorkingCopyManager;
|
import org.eclipse.cdt.ui.IWorkingCopyManager;
|
||||||
import org.eclipse.core.resources.IFile;
|
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.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
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.ICColorConstants;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.PreferenceConstants;
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
import org.eclipse.cdt.utils.ui.controls.TabFolderLayout;
|
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.swt.widgets.Text;
|
||||||
import org.eclipse.ui.IWorkbench;
|
import org.eclipse.ui.IWorkbench;
|
||||||
import org.eclipse.ui.IWorkbenchPreferencePage;
|
import org.eclipse.ui.IWorkbenchPreferencePage;
|
||||||
import org.eclipse.ui.editors.text.TextEditorPreferenceConstants;
|
|
||||||
import org.eclipse.ui.help.WorkbenchHelp;
|
import org.eclipse.ui.help.WorkbenchHelp;
|
||||||
import org.eclipse.ui.texteditor.AnnotationPreference;
|
import org.eclipse.ui.texteditor.AnnotationPreference;
|
||||||
|
import org.eclipse.ui.texteditor.ExtendedTextEditorPreferenceConstants;
|
||||||
import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
|
import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
|
||||||
import org.eclipse.ui.texteditor.WorkbenchChainedTextFontFieldEditor;
|
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 }
|
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$
|
"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$
|
"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()));
|
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, info.getOverviewRulerPreferenceKey()));
|
||||||
}
|
}
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.PREFERENCE_COLOR_FOREGROUND));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.PREFERENCE_COLOR_FOREGROUND));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,CEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT));
|
||||||
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.STRING, CEditor.PREFERENCE_COLOR_BACKGROUND));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,CEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT));
|
||||||
new OverlayPreferenceStore.OverlayKey(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSourceViewerConfiguration.PREFERENCE_TAB_WIDTH));
|
||||||
OverlayPreferenceStore.BOOLEAN,
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_MULTI_LINE_COMMENT));
|
||||||
CEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_MULTI_LINE_COMMENT + "_bold"));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_SINGLE_LINE_COMMENT));
|
||||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSourceViewerConfiguration.PREFERENCE_TAB_WIDTH));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_SINGLE_LINE_COMMENT + "_bold"));
|
||||||
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.STRING, ICColorConstants.C_KEYWORD));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_KEYWORD + "_bold"));
|
||||||
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.STRING, ICColorConstants.C_TYPE));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_TYPE + "_bold"));
|
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.STRING, ICColorConstants.C_STRING));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_STRING + "_bold"));
|
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.STRING, ICColorConstants.C_DEFAULT));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_DEFAULT + "_bold"));
|
||||||
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.STRING, CEditor.MATCHING_BRACKETS_COLOR));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.MATCHING_BRACKETS));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.MATCHING_BRACKETS));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR));
|
||||||
new OverlayPreferenceStore.OverlayKey(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE));
|
||||||
OverlayPreferenceStore.STRING,
|
|
||||||
TextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR));
|
|
||||||
overlayKeys.add(
|
|
||||||
new OverlayPreferenceStore.OverlayKey(
|
|
||||||
OverlayPreferenceStore.BOOLEAN,
|
|
||||||
TextEditorPreferenceConstants.EDITOR_CURRENT_LINE));
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.SPACES_FOR_TABS));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.SPACES_FOR_TABS));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR));
|
||||||
new OverlayPreferenceStore.OverlayKey(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN));
|
||||||
OverlayPreferenceStore.STRING,
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN));
|
||||||
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, CEditor.LINKED_POSITION_COLOR));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.LINKED_POSITION_COLOR));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR));
|
||||||
new OverlayPreferenceStore.OverlayKey(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER));
|
||||||
OverlayPreferenceStore.STRING,
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ExtendedTextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER));
|
||||||
TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.AUTOACTIVATION));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, ContentAssistPreference.AUTOACTIVATION_DELAY));
|
||||||
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.BOOLEAN, ContentAssistPreference.AUTOINSERT));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.AUTOINSERT));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_BACKGROUND));
|
||||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_BACKGROUND));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_FOREGROUND));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_BACKGROUND));
|
||||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PROPOSALS_FOREGROUND));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_FOREGROUND));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_C));
|
||||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_BACKGROUND));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.SHOW_DOCUMENTED_PROPOSALS));
|
||||||
overlayKeys.add(
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.ORDER_PROPOSALS));
|
||||||
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.PARAMETERS_FOREGROUND));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.CASE_SENSITIVITY));
|
||||||
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.ADD_INCLUDE));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.PROJECT_SCOPE_SEARCH));
|
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.STRING, PreferenceConstants.EDITOR_TASK_TAG_COLOR));
|
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.BOOLEAN, PreferenceConstants.EDITOR_TASK_TAG_BOLD));
|
||||||
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PreferenceConstants.EDITOR_TASK_INDICATION_COLOR));
|
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));
|
||||||
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_TASK_INDICATION_IN_OVERVIEW_RULER));
|
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);
|
overlayKeys.toArray(keys);
|
||||||
return new OverlayPreferenceStore(getPreferenceStore(), keys);
|
return new OverlayPreferenceStore(getPreferenceStore(), keys);
|
||||||
}
|
}
|
||||||
|
@ -287,12 +227,12 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP
|
||||||
color = display.getSystemColor(SWT.COLOR_GRAY);
|
color = display.getSystemColor(SWT.COLOR_GRAY);
|
||||||
PreferenceConverter.setDefault(store, CEditor.MATCHING_BRACKETS_COLOR, color.getRGB());
|
PreferenceConverter.setDefault(store, CEditor.MATCHING_BRACKETS_COLOR, color.getRGB());
|
||||||
|
|
||||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_CURRENT_LINE, true);
|
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE, true);
|
||||||
PreferenceConverter.setDefault(store, TextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR, new RGB(225, 235, 224));
|
PreferenceConverter.setDefault(store, ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR, new RGB(225, 235, 224));
|
||||||
|
|
||||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN, true);
|
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN, true);
|
||||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN, 80);
|
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN, 80);
|
||||||
PreferenceConverter.setDefault(store, TextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR, new RGB(176, 180, 185));
|
PreferenceConverter.setDefault(store, ExtendedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR, new RGB(176, 180, 185));
|
||||||
|
|
||||||
WorkbenchChainedTextFontFieldEditor.startPropagate(store, JFaceResources.TEXT_FONT);
|
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));
|
PreferenceConverter.setDefault(store, CEditor.LINKED_POSITION_COLOR, new RGB(0, 200, 100));
|
||||||
|
|
||||||
store.setDefault(TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, false);
|
store.setDefault(ExtendedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, false);
|
||||||
PreferenceConverter.setDefault(store, TextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, new RGB(0, 0, 0));
|
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, false);
|
||||||
store.setDefault(ContentAssistPreference.AUTOACTIVATION_DELAY, 500);
|
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);
|
addTextField(behaviorComposite, label, CSourceViewerConfiguration.PREFERENCE_TAB_WIDTH, 2, 0, true);
|
||||||
|
|
||||||
label = "Print margin col&umn:";
|
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";
|
label = "Insert &space for tabs";
|
||||||
addCheckBox(behaviorComposite, label, CEditor.SPACES_FOR_TABS, 0);
|
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);
|
fBracketHighlightButton = addCheckBox(behaviorComposite, label, CEditor.MATCHING_BRACKETS, 0);
|
||||||
|
|
||||||
label = "Show line numbers"; //$NON-NLS-1$
|
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";
|
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$
|
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";
|
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);
|
Label l = new Label(behaviorComposite, SWT.LEFT);
|
||||||
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
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";
|
//label= "Show only proposals visible in the invocation conte&xt";
|
||||||
//addCheckBox(contentAssistComposite, label, ContentAssistPreference.SHOW_VISIBLE_PROPOSALS, 0);
|
//addCheckBox(contentAssistComposite, label, ContentAssistPreference.SHOW_VISIBLE_PROPOSALS, 0);
|
||||||
|
|
||||||
//label= "Show only proposals with &matching cases";
|
label= "Show only proposals with &matching cases";
|
||||||
//addCheckBox(contentAssistComposite, label, ContentAssistPreference.CASE_SENSITIVITY, 0);
|
addCheckBox(contentAssistComposite, label, ContentAssistPreference.CASE_SENSITIVITY, 0);
|
||||||
|
|
||||||
//label= "Present proposals in a&lphabetical order";
|
//label= "Present proposals in a&lphabetical order";
|
||||||
//addCheckBox(contentAssistComposite, label, ContentAssistPreference.ORDER_PROPOSALS, 0);
|
//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.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
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.text.template.TemplateVariableProcessor;
|
||||||
import org.eclipse.cdt.internal.ui.util.SWTUtil;
|
import org.eclipse.cdt.internal.ui.util.SWTUtil;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
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.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditorTextHoverDispatcher;
|
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.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.ICDTConstants;
|
import org.eclipse.cdt.ui.ICDTConstants;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
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.
|
* (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.ICSearchConstants;
|
||||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||||
import org.eclipse.cdt.core.search.SearchEngine;
|
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.model.CElement;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.core.search.matching.OrPattern;
|
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.CCompletionContributorManager;
|
||||||
import org.eclipse.cdt.internal.ui.CPluginImages;
|
import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
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.internal.ui.text.template.TemplateEngine;
|
||||||
import org.eclipse.cdt.ui.CSearchResultLabelProvider;
|
import org.eclipse.cdt.ui.CSearchResultLabelProvider;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
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.IContentAssistProcessor;
|
||||||
import org.eclipse.jface.text.contentassist.IContextInformation;
|
import org.eclipse.jface.text.contentassist.IContextInformation;
|
||||||
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
|
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
|
||||||
import org.eclipse.swt.graphics.Image;
|
|
||||||
import org.eclipse.swt.graphics.Point;
|
import org.eclipse.swt.graphics.Point;
|
||||||
import org.eclipse.ui.IEditorPart;
|
import org.eclipse.ui.IEditorPart;
|
||||||
|
|
||||||
|
@ -472,7 +472,10 @@ public class CCompletionProcessor implements IContentAssistProcessor {
|
||||||
// TODO: change that to resource scope later
|
// TODO: change that to resource scope later
|
||||||
if (currentScope == null)
|
if (currentScope == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// clear the completion list at the result collector
|
||||||
|
resultCollector.clearCompletions();
|
||||||
|
|
||||||
IPreferenceStore store = CUIPlugin.getDefault().getPreferenceStore();
|
IPreferenceStore store = CUIPlugin.getDefault().getPreferenceStore();
|
||||||
boolean projectScope = store.getBoolean(ContentAssistPreference.PROJECT_SCOPE_SEARCH);
|
boolean projectScope = store.getBoolean(ContentAssistPreference.PROJECT_SCOPE_SEARCH);
|
||||||
ICSearchScope scope = null;
|
ICSearchScope scope = null;
|
||||||
|
@ -557,8 +560,41 @@ public class CCompletionProcessor implements IContentAssistProcessor {
|
||||||
|
|
||||||
BasicSearchMatch match = (BasicSearchMatch)i.next();
|
BasicSearchMatch match = (BasicSearchMatch)i.next();
|
||||||
int type = match.getElementType();
|
int type = match.getElementType();
|
||||||
switch (type){
|
int relevance = completionEngine.computeRelevance(type, frag, match.getName());
|
||||||
case ICElement.C_FIELD:
|
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()){
|
switch (match.getVisibility()){
|
||||||
case ICElement.CPP_PUBLIC:
|
case ICElement.CPP_PUBLIC:
|
||||||
visibility = ASTAccessVisibility.PUBLIC;
|
visibility = ASTAccessVisibility.PUBLIC;
|
||||||
|
@ -570,109 +606,79 @@ public class CCompletionProcessor implements IContentAssistProcessor {
|
||||||
visibility = ASTAccessVisibility.PRIVATE;
|
visibility = ASTAccessVisibility.PRIVATE;
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
resultCollector.acceptField(
|
resultCollector.acceptMethod(
|
||||||
match.getName(),
|
match.getName(),
|
||||||
null,
|
null,
|
||||||
|
match.getReturnType(),
|
||||||
visibility,
|
visibility,
|
||||||
completionStart,
|
completionStart,
|
||||||
completionLength,
|
completionLength,
|
||||||
completionEngine.computeTypeRelevance(type));
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
break;
|
break;
|
||||||
|
case ICElement.C_FUNCTION:
|
||||||
case ICElement.C_VARIABLE:
|
case ICElement.C_FUNCTION_DECLARATION:
|
||||||
case ICElement.C_VARIABLE_DECLARATION:
|
resultCollector.acceptFunction(
|
||||||
resultCollector.acceptVariable(
|
|
||||||
match.getName(),
|
match.getName(),
|
||||||
null,
|
null,
|
||||||
|
match.getReturnType(),
|
||||||
completionStart,
|
completionStart,
|
||||||
completionLength,
|
completionLength,
|
||||||
completionEngine.computeTypeRelevance(type));
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
break;
|
|
||||||
case ICElement.C_METHOD:
|
|
||||||
case ICElement.C_METHOD_DECLARATION:
|
|
||||||
switch (match.getVisibility()){
|
|
||||||
case ICElement.CPP_PUBLIC:
|
|
||||||
visibility = ASTAccessVisibility.PUBLIC;
|
|
||||||
break;
|
break;
|
||||||
case ICElement.CPP_PROTECTED:
|
case ICElement.C_CLASS:
|
||||||
visibility = ASTAccessVisibility.PROTECTED;
|
resultCollector.acceptClass(
|
||||||
|
match.getName(),
|
||||||
|
completionStart,
|
||||||
|
completionLength,
|
||||||
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
break;
|
break;
|
||||||
default:
|
case ICElement.C_STRUCT:
|
||||||
visibility = ASTAccessVisibility.PRIVATE;
|
resultCollector.acceptStruct(
|
||||||
|
match.getName(),
|
||||||
|
completionStart,
|
||||||
|
completionLength,
|
||||||
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
break;
|
break;
|
||||||
};
|
case ICElement.C_UNION:
|
||||||
resultCollector.acceptMethod(
|
resultCollector.acceptUnion(
|
||||||
match.getName(),
|
match.getName(),
|
||||||
null,
|
completionStart,
|
||||||
match.getReturnType(),
|
completionLength,
|
||||||
visibility,
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
completionStart,
|
break;
|
||||||
completionLength,
|
case ICElement.C_NAMESPACE:
|
||||||
completionEngine.computeTypeRelevance(type));
|
resultCollector.acceptNamespace(
|
||||||
break;
|
match.getName(),
|
||||||
case ICElement.C_FUNCTION:
|
completionStart,
|
||||||
case ICElement.C_FUNCTION_DECLARATION:
|
completionLength,
|
||||||
resultCollector.acceptFunction(
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
match.getName(),
|
break;
|
||||||
null,
|
case ICElement.C_MACRO:
|
||||||
match.getReturnType(),
|
resultCollector.acceptMacro(
|
||||||
completionStart,
|
match.getName(),
|
||||||
completionLength,
|
completionStart,
|
||||||
completionEngine.computeTypeRelevance(type));
|
completionLength,
|
||||||
break;
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
case ICElement.C_CLASS:
|
break;
|
||||||
resultCollector.acceptClass(
|
case ICElement.C_ENUMERATION:
|
||||||
match.getName(),
|
resultCollector.acceptEnumeration(
|
||||||
completionStart,
|
match.getName(),
|
||||||
completionLength,
|
completionStart,
|
||||||
completionEngine.computeTypeRelevance(type));
|
completionLength,
|
||||||
break;
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
case ICElement.C_STRUCT:
|
break;
|
||||||
resultCollector.acceptStruct(
|
case ICElement.C_ENUMERATOR:
|
||||||
match.getName(),
|
resultCollector.acceptEnumerator(
|
||||||
completionStart,
|
match.getName(),
|
||||||
completionLength,
|
completionStart,
|
||||||
completionEngine.computeTypeRelevance(type));
|
completionLength,
|
||||||
break;
|
completionEngine.computeRelevance(type, prefix, match.getName()));
|
||||||
case ICElement.C_UNION:
|
break;
|
||||||
resultCollector.acceptUnion(
|
default :
|
||||||
match.getName(),
|
break;
|
||||||
completionStart,
|
} // end switch
|
||||||
completionLength,
|
} // end if relevance
|
||||||
completionEngine.computeTypeRelevance(type));
|
} // end while
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
completions.addAll(resultCollector.getCompletions());
|
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.
|
* (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.
|
* (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:
|
* Contributors:
|
||||||
* IBM Rational Software - Initial API and implementation
|
* 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.ICompletionRequestor;
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
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
|
* To change the template for this generated file go to
|
||||||
* Window>Preferences>Java>Code Generation>Code and Comments
|
* 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;
|
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.
|
* (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.Color;
|
||||||
import org.eclipse.swt.graphics.RGB;
|
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.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
import org.eclipse.jface.preference.PreferenceConverter;
|
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:
|
* Contributors:
|
||||||
* IBM Rational Software - Initial API and implementation
|
* 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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
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.CElementImageProvider;
|
||||||
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
|
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
@ -46,6 +45,9 @@ public class ResultCollector extends CompletionRequestorAdaptor {
|
||||||
public List getCompletions() {
|
public List getCompletions() {
|
||||||
return completions;
|
return completions;
|
||||||
}
|
}
|
||||||
|
public void clearCompletions() {
|
||||||
|
completions.clear();
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Create a proposal
|
* 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