diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java
index dff1780f5b2..1e1196581d2 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionTestBase.java
@@ -85,53 +85,9 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
protected IASTName[] findNames(String section, int len) {
// get the language from the language manager
ILanguage language = null;
- ICProject cproject = strategy.getCProject();
IASTTranslationUnit ast = strategy.getAst();
try {
- IProject project = cproject.getProject();
- ICConfigurationDescription configuration = CoreModel.getDefault().getProjectDescription(project, false).getActiveConfiguration();
- language = LanguageManager.getInstance().getLanguageForFile(strategy.getAst().getFilePath(), project, configuration);
- } catch (CoreException e) {
- fail("Unexpected exception while getting language for file.");
- }
-
-
- assertNotNull("No language for file " + ast.getFilePath().toString(), language);
-
- return language.getSelectedNames(ast, strategy.getTestData()[1].indexOf(section), len);
- }
-
-
- protected IBinding getBindingFromASTName(String section, int len) {
- return getBindingFromASTName(section, len, false);
- }
-
- protected IBinding getBindingFromASTName(String section, int len, boolean matchLength) {
- IASTName[] names= findNames(section, len);
- if(matchLength) {
- List lnames= new ArrayList(Arrays.asList(names));
- for(ListIterator li= lnames.listIterator(); li.hasNext(); ) {
- IASTName name= (IASTName) li.next();
- if(name.getRawSignature().length()!=len) {
- li.remove();
- }
- }
- names= (IASTName[]) lnames.toArray(new IASTName[lnames.size()]);
- }
- assertEquals("<>1 name found for \""+section+"\"", 1, names.length);
- IBinding binding = names[0].resolveBinding();
- assertNotNull("No binding for "+names[0].getRawSignature(), binding);
- assertFalse("Binding is a ProblemBinding for name "+names[0].getRawSignature(), IProblemBinding.class.isAssignableFrom(names[0].resolveBinding().getClass()));
- return names[0].resolveBinding();
- }
-
- protected IBinding getProblemFromASTName(String section, int len) {
- // get the language from the language manager
- ILanguage language = null;
- ICProject cproject = strategy.getCProject();
- IASTTranslationUnit ast = strategy.getAst();
- try {
- IProject project = cproject.getProject();
+ IProject project = strategy.getCProject().getProject();
ICConfigurationDescription configuration = CoreModel.getDefault().getProjectDescription(project, false).getActiveConfiguration();
language = LanguageManager.getInstance().getLanguageForFile(ast.getFilePath(), project, configuration);
} catch (CoreException e) {
@@ -139,9 +95,49 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
}
assertNotNull("No language for file " + ast.getFilePath().toString(), language);
-
- IASTName[] names= language.getSelectedNames(ast, strategy.getTestData()[1].indexOf(section), len);
+ return language.getSelectedNames(ast, strategy.getTestData()[1].indexOf(section), len);
+ }
+
+ /**
+ * Attempts to get an IBinding from the initial specified number of characters
+ * from the specified code fragment. Fails the test if
+ *
+ * - There is not a unique name with the specified criteria
+ *
- The binding associated with the name is null or a problem binding
+ *
+ * @param section the code fragment to search for in the AST. The first occurrence of an identical section is used.
+ * @param len the length of the specified section to use as a name. This can also be useful for distinguishing between
+ * template names, and template ids.
+ * @return the associated name's binding
+ */
+ protected IBinding getBindingFromASTName(String section, int len) {
+ IASTName[] names= findNames(section, len);
+ List lnames= new ArrayList(Arrays.asList(names));
+ for(ListIterator li= lnames.listIterator(); li.hasNext(); ) {
+ IASTName name= (IASTName) li.next();
+ if(name.getRawSignature().length()!=len) {
+ li.remove();
+ }
+ }
+ names= (IASTName[]) lnames.toArray(new IASTName[lnames.size()]);
assertEquals("<>1 name found for \""+section+"\"", 1, names.length);
+
+ IBinding binding = names[0].resolveBinding();
+ assertNotNull("No binding for "+names[0].getRawSignature(), binding);
+ assertFalse("Binding is a ProblemBinding for name "+names[0].getRawSignature(), IProblemBinding.class.isAssignableFrom(names[0].resolveBinding().getClass()));
+ return names[0].resolveBinding();
+ }
+
+ /**
+ * Attempts to verify that the resolved binding for a name is a problem binding.
+ * @param section the code fragment to search for in the AST. The first occurrence of an identical section is used.
+ * @param len the length of the specified section to use as a name
+ * @return the associated name's binding
+ */
+ protected IBinding getProblemFromASTName(String section, int len) {
+ IASTName[] names= findNames(section, len);
+ assertEquals("<>1 name found for \""+section+"\"", 1, names.length);
+
IBinding binding = names[0].resolveBinding();
assertNotNull("No binding for "+names[0].getRawSignature(), binding);
assertTrue("Binding is not a ProblemBinding for name "+names[0].getRawSignature(), IProblemBinding.class.isAssignableFrom(names[0].resolveBinding().getClass()));
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java
index 812e19928d0..202dc90d4c2 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java
@@ -111,8 +111,8 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas
// Bug 185828 reports a StackOverflowException is thrown before we get here.
// That the SOE is thrown is detected in BaseTestCase via an Error IStatus
- IBinding b0= getBindingFromASTName("C", 1);
- IBinding b1= getBindingFromASTName("C", 6, true);
+ IBinding b0= getBindingFromASTName("C", 1);
+ IBinding b1= getBindingFromASTName("C", 6);
IBinding b2= getProblemFromASTName("unresolvable", 12);
assertInstance(b0, ICPPClassType.class);
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
index 08fbe24d345..d120fe295c8 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
@@ -81,8 +81,8 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// // foo -> CPPMethodInstance
// }
public void testCPPConstructorTemplateSpecialization() throws Exception {
- IBinding b0= getBindingFromASTName("D(", 1, true);
- IBinding b1= getBindingFromASTName("D(", 6, true);
+ IBinding b0= getBindingFromASTName("D(", 1);
+ IBinding b1= getBindingFromASTName("D(", 6);
assertInstance(b0, ICPPClassTemplate.class); // *D*(5, 6)
assertInstance(b0, ICPPClassType.class); // *D*(5, 6)
@@ -111,7 +111,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// a.f= foo;
// }
public void _testOverloadedFunctionTemplate() {
- IBinding b0= getBindingFromASTName("foo;", 6, true);
+ IBinding b0= getBindingFromASTName("foo;", 6);
assertInstance(b0, ICPPFunction.class);
assertInstance(b0, ICPPSpecialization.class);
}
@@ -135,7 +135,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// }
public void _testTemplateTemplateParameter() throws Exception {
IBinding b0= getBindingFromASTName("Foo", 3);
- IBinding b1= getBindingFromASTName("Foo", 8, true);
+ IBinding b1= getBindingFromASTName("Foo", 8);
IBinding b2= getBindingFromASTName("f.s.foo", 1);
IBinding b3= getBindingFromASTName("s.foo", 1);
IBinding b4= getBindingFromASTName("foo(*", 3);
@@ -228,9 +228,9 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// template
// class D {};
public void _testClassPartialSpecializations() throws Exception {
- IBinding b0= getBindingFromASTName("D", 8, true);
- IBinding b1= getBindingFromASTName("D", 8, true);
- IBinding b2= getBindingFromASTName("D", 8, true);
+ IBinding b0= getBindingFromASTName("D", 8);
+ IBinding b1= getBindingFromASTName("D", 8);
+ IBinding b2= getBindingFromASTName("D", 8);
IBinding b3= getBindingFromASTName("D x;
// }
public void testClassImplicitInstantiations_188274() throws Exception {
- IBinding b2= getBindingFromASTName("X", 6, true);
+ IBinding b2= getBindingFromASTName("X", 6);
assertInstance(b2, ICPPClassType.class);
assertInstance(b2, ICPPTemplateInstance.class);
ICPPClassType ct2= (ICPPClassType) b2;
@@ -289,14 +289,14 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
ICPPClassType ct2b= (ICPPClassType) bss2[0].getBaseClass();
assertInstance(ct2b, ICPPTemplateInstance.class);
- IBinding b0= getBindingFromASTName("B", 6, true);
+ IBinding b0= getBindingFromASTName("B", 6);
assertInstance(b0, ICPPClassType.class);
ICPPClassType ct= (ICPPClassType) b0;
ICPPBase[] bss= ct.getBases();
assertEquals(1, bss.length);
assertInstance(bss[0].getBaseClass(), ICPPClassType.class);
- IBinding b1= getBindingFromASTName("B", 7, true);
+ IBinding b1= getBindingFromASTName("B", 7);
assertInstance(b1, ICPPClassType.class);
ICPPClassType ct1= (ICPPClassType) b1;
ICPPBase[] bss1= ct1.getBases();
@@ -324,7 +324,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// A ab;
public void testClassSpecializationMethods() throws Exception {
- IBinding b0= getBindingFromASTName("A ab", 4, true);
+ IBinding b0= getBindingFromASTName("A ab", 4);
assertInstance(b0, ICPPClassType.class);
assertInstance(b0, ICPPSpecialization.class);
assertFalse(b0 instanceof ICPPTemplateInstance);
@@ -593,7 +593,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// Foo b2;
public void _testClassSpecializations_180738() {
IBinding b1a = getBindingFromASTName("Foo b1;", 3);
- IBinding b1b = getBindingFromASTName("Foo b1;", 6, true);
+ IBinding b1b = getBindingFromASTName("Foo b1;", 6);
assertInstance(b1a, ICPPClassType.class);
assertInstance(b1a, ICPPClassTemplate.class);
@@ -608,7 +608,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
assertEquals("B", b1pct.getName());
IBinding b2a = getBindingFromASTName("Foo b2;", 3);
- IBinding b2b = getBindingFromASTName("Foo b2;", 6, true);
+ IBinding b2b = getBindingFromASTName("Foo b2;", 6);
assertInstance(b2a, ICPPClassType.class);
assertInstance(b2a, ICPPClassTemplate.class);