mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-24 01:15:29 +02:00
Partial Fix for bug#52948
This commit is contained in:
parent
0a6f297707
commit
29adda7a82
13 changed files with 213 additions and 18 deletions
|
@ -1,3 +1,6 @@
|
|||
2004-03-08 Hoda Amer
|
||||
Partial fix for bug#52948 : Content Assist: typedef-ed types do not appear in the completion list.
|
||||
|
||||
2004-03-04 Alain Magloire
|
||||
|
||||
Large cleanup(?) of the BinaryParser classes.
|
||||
|
|
|
@ -22,8 +22,8 @@ public interface IASTNode {
|
|||
|
||||
public static class LookupKind extends Enum {
|
||||
|
||||
public static final LookupKind ALL = new LookupKind( 0 );
|
||||
public static final LookupKind STRUCTURES = new LookupKind( 1 );
|
||||
public static final LookupKind ALL = new LookupKind( 0 ); // includes everything
|
||||
public static final LookupKind STRUCTURES = new LookupKind( 1 ); // includes STRUCTS + UNIONS + CLASSES
|
||||
public static final LookupKind STRUCTS = new LookupKind( 2 );
|
||||
public static final LookupKind UNIONS = new LookupKind( 3 );
|
||||
public static final LookupKind CLASSES = new LookupKind( 4 );
|
||||
|
@ -38,6 +38,8 @@ public interface IASTNode {
|
|||
public static final LookupKind ENUMERATIONS = new LookupKind( 13 );
|
||||
public static final LookupKind ENUMERATORS = new LookupKind( 14 );
|
||||
public static final LookupKind THIS = new LookupKind(15);
|
||||
public static final LookupKind TYPEDEFS = new LookupKind(16);
|
||||
public static final LookupKind TYPES = new LookupKind(17); // includes STRUCTURES + ENUMERATIONS + TYPEDEFS
|
||||
|
||||
/**
|
||||
* @param enumValue
|
||||
|
|
|
@ -106,6 +106,7 @@ public class TypeFilter {
|
|||
else if ( kind == LookupKind.NAMESPACES ) { acceptedTypes.add( TypeInfo.t_namespace ); }
|
||||
else if ( kind == LookupKind.ENUMERATIONS ){ acceptedTypes.add( TypeInfo.t_enumeration ); }
|
||||
else if ( kind == LookupKind.ENUMERATORS ) { acceptedTypes.add( TypeInfo.t_enumerator ); }
|
||||
else if ( kind == LookupKind.TYPEDEFS ) { acceptedTypes.add( TypeInfo.t_type ); }
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
2004-03-08 Hoda Amer
|
||||
Added one failed test: CompletionFailedTest_TypeDef_Bug52948
|
||||
|
||||
2004-03-03 John Camelon
|
||||
Updated failed test to fail in new way as Content Assist feature work continues on ...
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#include "CompletionTestStart.h"
|
||||
|
||||
typedef int myType;
|
||||
|
||||
m
|
|
@ -34,7 +34,7 @@ public class AutomatedSuite extends TestSuite {
|
|||
public AutomatedSuite() {
|
||||
|
||||
// Success Tests
|
||||
addTest(PartitionTokenScannerTest.suite());
|
||||
//addTest(PartitionTokenScannerTest.suite());
|
||||
addTest(TextBufferTest.suite());
|
||||
// completion tests
|
||||
addTest(CompletionTest_FieldType_Prefix.suite());
|
||||
|
@ -75,6 +75,7 @@ public class AutomatedSuite extends TestSuite {
|
|||
addTest(CompletionTest_MacroRef_Prefix.suite());
|
||||
addTest(CompletionFailedTest_FunctionReference_Bug50807.suite());
|
||||
addTest(CompletionFailedTest_ConstructorReference_Bug50808.suite());
|
||||
addTest(CompletionFailedTest_TypeDef_Bug52948.suite());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,122 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2004 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.ui.tests.text.contentassist.failedtests;
|
||||
|
||||
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
|
||||
import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
*
|
||||
* Testing Typedef as a possible returned type.
|
||||
* Bug#52948
|
||||
*
|
||||
*/
|
||||
public class CompletionFailedTest_TypeDef_Bug52948 extends CompletionProposalsBaseTest{
|
||||
|
||||
private final String fileName = "CompletionTestStart37.cpp";
|
||||
private final String fileFullPath ="resources/contentassist/" + fileName;
|
||||
private final String headerFileName = "CompletionTestStart.h";
|
||||
private final String headerFileFullPath ="resources/contentassist/" + headerFileName;
|
||||
private final String expectedScopeName = "ASTCompilationUnit";
|
||||
private final String expectedContextName = "null";
|
||||
private final CompletionKind expectedKind = CompletionKind.VARIABLE_TYPE;
|
||||
private final String expectedPrefix = "m";
|
||||
private final String[] expectedResults = {
|
||||
// should be
|
||||
// "myType"
|
||||
};
|
||||
|
||||
public CompletionFailedTest_TypeDef_Bug52948(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite= new TestSuite(CompletionFailedTest_TypeDef_Bug52948.class.getName());
|
||||
suite.addTest(new CompletionFailedTest_TypeDef_Bug52948("testCompletionProposals"));
|
||||
return suite;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getCompletionPosition()
|
||||
*/
|
||||
protected int getCompletionPosition() {
|
||||
return getBuffer().indexOf(" m ") + 2;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedScope()
|
||||
*/
|
||||
protected String getExpectedScopeClassName() {
|
||||
return expectedScopeName;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedContext()
|
||||
*/
|
||||
protected String getExpectedContextClassName() {
|
||||
return expectedContextName;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedKind()
|
||||
*/
|
||||
protected CompletionKind getExpectedKind() {
|
||||
return expectedKind;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedPrefix()
|
||||
*/
|
||||
protected String getExpectedPrefix() {
|
||||
return expectedPrefix;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedResultsValues()
|
||||
*/
|
||||
protected String[] getExpectedResultsValues() {
|
||||
return expectedResults;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileName()
|
||||
*/
|
||||
protected String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileFullPath()
|
||||
*/
|
||||
protected String getFileFullPath() {
|
||||
return fileFullPath;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileFullPath()
|
||||
*/
|
||||
protected String getHeaderFileFullPath() {
|
||||
return headerFileFullPath;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileName()
|
||||
*/
|
||||
protected String getHeaderFileName() {
|
||||
return headerFileName;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,3 +1,6 @@
|
|||
2004-03-08 Hoda Amer
|
||||
Partial fix for bug#52948 : Content Assist: typedef-ed types do not appear in the completion list.
|
||||
|
||||
2004-03-08 Bogdan Gheorghe
|
||||
|
||||
Minor refactoring to Chris Wiebe's jumbo patch - modified TypeSearchResultCollector.createMatch
|
||||
|
|
|
@ -51,6 +51,7 @@ import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNode.ILookupResult;
|
||||
|
@ -92,6 +93,7 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
private int numEnumerations = 0;
|
||||
private int numEnumerators = 0;
|
||||
private int numNamespaces = 0;
|
||||
private int numTypedefs = 0;
|
||||
|
||||
public CompletionEngine(ICompletionRequestor completionRequestor){
|
||||
requestor = completionRequestor;
|
||||
|
@ -130,6 +132,8 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
return STRUCT_TYPE_RELEVANCE;
|
||||
case ICElement.C_UNION:
|
||||
return UNION_TYPE_RELEVANCE;
|
||||
case ICElement.C_TYPEDEF:
|
||||
return TYPEDEF_TYPE_RELEVANCE;
|
||||
case ICElement.C_NAMESPACE:
|
||||
return NAMESPACE_TYPE_RELEVANCE;
|
||||
case ICElement.C_MACRO:
|
||||
|
@ -314,6 +318,14 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
|
||||
requestor.acceptEnumerator(enumerator.getName(), completionStart, completionLength, relevance);
|
||||
}
|
||||
else if(node instanceof IASTTypedefDeclaration){
|
||||
numTypedefs++;
|
||||
IASTTypedefDeclaration typedef = (IASTTypedefDeclaration)node;
|
||||
int relevance = computeRelevance(ICElement.C_TYPEDEF, prefix, typedef.getName());
|
||||
relevance += totalNumberOfResults - numTypedefs;
|
||||
|
||||
requestor.acceptTypedef(typedef.getName(), completionStart, completionLength, relevance);
|
||||
}
|
||||
}
|
||||
|
||||
private void addKeywordToCompletions (String keyword){
|
||||
|
@ -359,6 +371,7 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
numEnumerations = 0;
|
||||
numEnumerators = 0;
|
||||
numNamespaces = 0;
|
||||
numTypedefs = 0;
|
||||
}
|
||||
private void addToCompletions (ILookupResult result){
|
||||
if(result == null){
|
||||
|
@ -441,11 +454,12 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
// IASTScope searchNode = completionNode.getCompletionScope();
|
||||
// // here we have to look for anything that could be referenced within this scope
|
||||
// // 1. lookup local variables, global variables, functions, methods, structures, enums, and namespaces
|
||||
// IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[4];
|
||||
// IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[5];
|
||||
// kinds[0] = IASTNode.LookupKind.VARIABLES;
|
||||
// kinds[1] = IASTNode.LookupKind.STRUCTURES;
|
||||
// kinds[2] = IASTNode.LookupKind.ENUMERATIONS;
|
||||
// kinds[3] = IASTNode.LookupKind.NAMESPACES;
|
||||
// kinds[4] = IASTNode.LookupKind.TYPEDEFS;
|
||||
// ILookupResult result = lookup(searchNode, completionNode.getCompletionPrefix(), kinds, completionNode.getCompletionContext());
|
||||
// addToCompletions(result);
|
||||
// // TODO
|
||||
|
@ -459,10 +473,11 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
if(completionNode.getCompletionPrefix().length() > 0 ) {
|
||||
// 2. Lookup all types that could be used here
|
||||
ILookupResult result;
|
||||
IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[3];
|
||||
IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[4];
|
||||
kinds[0] = IASTNode.LookupKind.STRUCTURES;
|
||||
kinds[1] = IASTNode.LookupKind.ENUMERATIONS;
|
||||
kinds[2] = IASTNode.LookupKind.NAMESPACES;
|
||||
kinds[3] = IASTNode.LookupKind.TYPEDEFS;
|
||||
result = lookup(searchNode, completionNode.getCompletionPrefix(), kinds, completionNode.getCompletionContext());
|
||||
addToCompletions(result);
|
||||
} else // prefix is empty, we can not look for everything
|
||||
|
@ -697,7 +712,7 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
|
||||
}
|
||||
private void logKind(String message, IASTCompletionNode.CompletionKind kind){
|
||||
if (! CCorePlugin.getDefault().isDebugging() && Util.isActive(IDebugLogConstants.CONTENTASSIST) )
|
||||
if (! CUIPlugin.getDefault().isDebugging() && Util.isActive(IDebugLogConstants.CONTENTASSIST))
|
||||
return;
|
||||
|
||||
String kindStr = ""; //$NON-NLS-1$
|
||||
|
@ -737,7 +752,7 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
log (message + kindStr);
|
||||
}
|
||||
private void logNode(String message, IASTNode node){
|
||||
if (! CCorePlugin.getDefault().isDebugging() && Util.isActive(IDebugLogConstants.CONTENTASSIST))
|
||||
if (! CUIPlugin.getDefault().isDebugging() && Util.isActive(IDebugLogConstants.CONTENTASSIST))
|
||||
return;
|
||||
|
||||
if(node == null){
|
||||
|
@ -772,13 +787,17 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
log(message + name);
|
||||
return;
|
||||
}
|
||||
|
||||
if(node instanceof IASTNamespaceDefinition){
|
||||
String name = "Namespace "; //$NON-NLS-1$
|
||||
log(message + name);
|
||||
return;
|
||||
}
|
||||
log(message + node.toString());
|
||||
return;
|
||||
|
||||
}
|
||||
private void logLookups(LookupKind[] kinds){
|
||||
if (! CCorePlugin.getDefault().isDebugging() && Util.isActive(IDebugLogConstants.CONTENTASSIST))
|
||||
if (! CUIPlugin.getDefault().isDebugging() && Util.isActive(IDebugLogConstants.CONTENTASSIST))
|
||||
return;
|
||||
|
||||
StringBuffer kindName = new StringBuffer("Looking For "); //$NON-NLS-1$
|
||||
|
@ -816,6 +835,8 @@ public class CompletionEngine implements RelevanceConstants {
|
|||
kindName.append("ENUMERATORS"); //$NON-NLS-1$
|
||||
else if(kind == IASTNode.LookupKind.THIS)
|
||||
kindName.append("THIS"); //$NON-NLS-1$
|
||||
else if(kind == IASTNode.LookupKind.TYPEDEFS)
|
||||
kindName.append("TYPEDEFS"); //$NON-NLS-1$
|
||||
|
||||
kindName.append(", "); //$NON-NLS-1$
|
||||
}
|
||||
|
|
|
@ -139,4 +139,11 @@ public class CompletionRequestorAdaptor implements ICompletionRequestor {
|
|||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.ui.text.contentassist.ICompletionRequestor#acceptTypedef(java.lang.String, int, int, int)
|
||||
*/
|
||||
public void acceptTypedef(String name, int completionStart,
|
||||
int completionLength, int relevance) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ public interface ICompletionRequestor {
|
|||
void acceptClass(String name, int completionStart, int completionLength, int relevance);
|
||||
void acceptStruct(String name, int completionStart, int completionLength, int relevance);
|
||||
void acceptUnion(String name, int completionStart, int completionLength, int relevance);
|
||||
void acceptTypedef(String name, int completionStart, int completionLength, int relevance);
|
||||
void acceptNamespace(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);
|
||||
|
|
|
@ -11,17 +11,18 @@
|
|||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
public interface RelevanceConstants {
|
||||
final int CASE_MATCH_RELEVANCE = 150;
|
||||
final int CASE_MATCH_RELEVANCE = 160;
|
||||
final int EXACT_NAME_MATCH_RELEVANCE = 40;
|
||||
|
||||
final int LOCAL_VARIABLE_TYPE_RELEVANCE = 130;
|
||||
final int FIELD_TYPE_RELEVANCE = 120;
|
||||
final int VARIABLE_TYPE_RELEVANCE = 110;
|
||||
final int METHOD_TYPE_RELEVANCE = 100;
|
||||
final int FUNCTION_TYPE_RELEVANCE = 90;
|
||||
final int CLASS_TYPE_RELEVANCE = 80;
|
||||
final int STRUCT_TYPE_RELEVANCE = 70;
|
||||
final int UNION_TYPE_RELEVANCE = 60;
|
||||
final int LOCAL_VARIABLE_TYPE_RELEVANCE = 140;
|
||||
final int FIELD_TYPE_RELEVANCE = 130;
|
||||
final int VARIABLE_TYPE_RELEVANCE = 120;
|
||||
final int METHOD_TYPE_RELEVANCE = 110;
|
||||
final int FUNCTION_TYPE_RELEVANCE = 100;
|
||||
final int CLASS_TYPE_RELEVANCE = 90;
|
||||
final int STRUCT_TYPE_RELEVANCE = 80;
|
||||
final int UNION_TYPE_RELEVANCE = 70;
|
||||
final int TYPEDEF_TYPE_RELEVANCE = 60;
|
||||
final int NAMESPACE_TYPE_RELEVANCE = 50;
|
||||
final int MACRO_TYPE_RELEVANCE = 40;
|
||||
final int ENUMERATION_TYPE_RELEVANCE = 30;
|
||||
|
|
|
@ -475,6 +475,31 @@ public class ResultCollector extends CompletionRequestorAdaptor {
|
|||
completions.add(proposal);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.ui.text.contentassist.ICompletionRequestor#acceptTypedef(java.lang.String, int, int, int)
|
||||
*/
|
||||
public void acceptTypedef(String name,
|
||||
int completionStart,
|
||||
int completionLength,
|
||||
int relevance) {
|
||||
String replaceString = ""; //$NON-NLS-1$
|
||||
String displayString = ""; //$NON-NLS-1$
|
||||
Image image = null;
|
||||
StringBuffer infoString = new StringBuffer();
|
||||
|
||||
// fill the replace, display and info strings
|
||||
replaceString = name;
|
||||
displayString = name;
|
||||
|
||||
// get the image
|
||||
ImageDescriptor imageDescriptor = CElementImageProvider.getTypedefImageDescriptor();
|
||||
image = registry.get( imageDescriptor );
|
||||
|
||||
// create proposal and add it to completions list
|
||||
ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(),
|
||||
null, image, completionStart, completionLength, relevance);
|
||||
completions.add(proposal);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptKeyword(java.lang.String, int, int, int)
|
||||
|
|
Loading…
Add table
Reference in a new issue