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 e2c1e686cc2..7d8414451ad 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2014 Symbian Software Systems and others.
+ * Copyright (c) 2006, 2015 Symbian Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -88,7 +88,8 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
super.tearDown();
}
- protected IASTName findName(String section, int len, boolean preferImplicitName) {
+ protected IASTName findName(String section, int offset, int len,
+ boolean preferImplicitName) {
if (len <= 0)
len += section.length();
@@ -97,21 +98,21 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
final IASTNodeSelector nodeSelector = ast.getNodeSelector(null);
String source = ast.getRawSignature();
// Skip the automatically added code.
- int offset = source.indexOf(END_OF_ADDED_CODE_MARKER);
- if (offset >= 0) {
- offset += END_OF_ADDED_CODE_MARKER.length();
- if (source.charAt(offset) == '\n')
- offset++;
+ int sectionOffset = source.indexOf(END_OF_ADDED_CODE_MARKER);
+ if (sectionOffset >= 0) {
+ sectionOffset += END_OF_ADDED_CODE_MARKER.length();
+ if (source.charAt(sectionOffset) == '\n')
+ sectionOffset++;
} else {
- offset = 0;
+ sectionOffset = 0;
}
- offset = source.indexOf(section, offset);
- if (offset >= 0) {
+ sectionOffset = source.indexOf(section, sectionOffset);
+ if (sectionOffset >= 0) {
IASTName name= null;
if (!preferImplicitName)
- name= nodeSelector.findName(offset, len);
+ name= nodeSelector.findName(sectionOffset + offset, len);
if (name == null)
- name= nodeSelector.findImplicitName(offset, len);
+ name= nodeSelector.findImplicitName(sectionOffset + offset, len);
return name;
}
}
@@ -119,12 +120,20 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
return null;
}
- protected IASTName findName(String section, int len) {
- return findName(section, len, false);
+ protected IASTName findName(String section, int offset, int len) {
+ return findName(section, offset, len, false);
}
+ protected IASTName findName(String section, int len) {
+ return findName(section, 0, len);
+ }
+
+ protected IASTName findImplicitName(String section, int offset, int len) {
+ return findName(section, offset, len, true);
+ }
+
protected IASTName findImplicitName(String section, int len) {
- return findName(section, len, true);
+ return findName(section, 0, len);
}
/**
@@ -135,17 +144,19 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
*
The binding associated with the name is null or a problem binding
* The binding is not an instance of the specified class
*
- * @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.
+ * @param section the code fragment to search for in the AST. The first occurrence of an identical
+ * section is used.
+ * @param offset the offset of the name within the section
+ * @param len the length of the name. This can also be useful for distinguishing between template names
+ * and template ids.
* @param clazz an expected class type or interface that the binding should extend/implement
* @return the associated name's binding
*/
- protected T getBindingFromASTName(String section, int len, Class clazz, Class... cs) {
+ protected T getBindingFromASTName(String section, int offset, int len, Class clazz, Class... cs) {
if (len <= 0)
- len += section.length();
+ len += section.length() - offset;
- IASTName name= findName(section, len);
+ IASTName name= findName(section, offset, len);
assertNotNull("Name not found for \"" + section + "\"", name);
assertEquals(section.substring(0, len), name.getRawSignature());
@@ -156,6 +167,10 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
return clazz.cast(binding);
}
+ protected T getBindingFromASTName(String section, int len, Class clazz, Class... cs) {
+ return getBindingFromASTName(section, 0, len, clazz, cs);
+ }
+
/**
* Attempts to get an IBinding attached to an implicit name from the initial specified
* number of characters from the specified code fragment. Fails the test if
@@ -164,18 +179,20 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
* The binding associated with the implicit name is null or a problem binding
* The binding is not an instance of the specified class
*
- * @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
+ * @param section the code fragment to search for in the AST. The first occurrence of an identical
+ * section is used.
+ * @param offset the offset of the name within the section
+ * @param len the length of the name
* @param clazz an expected class type or interface that the binding should extend/implement
* @return the associated implicit name's binding
*/
- protected T getBindingFromImplicitASTName(String section, int len, Class clazz, Class... cs) {
+ protected T getBindingFromImplicitASTName(String section, int offset, int len, Class clazz, Class... cs) {
if (len <= 0)
- len += section.length();
+ len += section.length() - offset;
- IASTName name= findImplicitName(section, len);
+ IASTName name= findImplicitName(section, offset, len);
assertNotNull("Name not found for \"" + section + "\"", name);
- assertEquals(section.substring(0, len), name.getRawSignature());
+ assertEquals(section.substring(offset, offset + len), name.getRawSignature());
IBinding binding = name.resolveBinding();
assertNotNull("No binding for " + name.getRawSignature(), binding);
@@ -184,16 +201,27 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
return clazz.cast(binding);
}
- /*
+ protected T getBindingFromImplicitASTName(String section, int len, Class clazz, Class... cs) {
+ return getBindingFromImplicitASTName(section, 0, len, clazz, cs);
+ }
+
+ /**
* @see IndexBindingResolutionTestBase#getBindingFromASTName(String, int, Class, Class...)
*/
protected T getBindingFromASTName(String section, int len) {
- if (len <= 0)
- len += section.length();
+ return getBindingFromASTName(section, 0, len);
+ }
- IASTName name= findName(section, len);
+ /**
+ * @see IndexBindingResolutionTestBase#getBindingFromASTName(String, int, Class, Class...)
+ */
+ protected T getBindingFromASTName(String section, int offset, int len) {
+ if (len <= 0)
+ len += section.length() - offset;
+
+ IASTName name= findName(section, offset, len);
assertNotNull("Name not found for \"" + section + "\"", name);
- assertEquals(section.substring(0, len), name.getRawSignature());
+ assertEquals(section.substring(offset, offset + len), name.getRawSignature());
IBinding binding = name.resolveBinding();
assertNotNull("No binding for " + name.getRawSignature(), binding);
@@ -202,11 +230,13 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
}
protected T getBindingFromFirstIdentifier(String section) {
- return getBindingFromASTName(section, getIdentifierLength(section));
+ int offset = getIdentifierOffset(section);
+ return getBindingFromASTName(section, offset, getIdentifierLength(section, offset));
}
protected T getBindingFromFirstIdentifier(String section, Class clazz, Class... cs) {
- return getBindingFromASTName(section, getIdentifierLength(section), clazz, cs);
+ int offset = getIdentifierOffset(section);
+ return getBindingFromASTName(section, offset, getIdentifierLength(section, offset), clazz, cs);
}
/*
@@ -216,7 +246,7 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
if (len <= 0)
len += section.length();
- IASTName name= findImplicitName(section, len);
+ IASTName name= findImplicitName(section, 0, len);
assertNotNull("Name not found for \"" + section + "\"", name);
assertEquals(section.substring(0, len), name.getRawSignature());
@@ -234,7 +264,7 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
* @return the associated name's binding
*/
protected IBinding getProblemFromASTName(String section, int len) {
- IASTName name= findName(section, len);
+ IASTName name= findName(section, 0, len);
assertNotNull("Name not found for \"" + section + "\"", name);
assertEquals(section.substring(0, len), name.getRawSignature());
@@ -246,7 +276,8 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
}
protected IBinding getProblemFromFirstIdentifier(String section) {
- return getProblemFromASTName(section, getIdentifierLength(section));
+ int offset = getIdentifierOffset(section);
+ return getProblemFromASTName(section, getIdentifierLength(section, offset));
}
protected static void assertQNEquals(String expectedQN, IBinding b) {
@@ -338,11 +369,20 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
}
}
- protected int getIdentifierLength(String str) {
- int i;
- for (i = 0; i < str.length() && Character.isJavaIdentifierPart(str.charAt(i)); ++i) {
+ private int getIdentifierOffset(String str) {
+ for (int i = 0; i < str.length(); ++i) {
+ if (Character.isJavaIdentifierPart(str.charAt(i)))
+ return i;
}
- return i;
+ fail("Didn't find identifier in \"" + str + "\"");
+ return -1;
+ }
+
+ private int getIdentifierLength(String str, int offset) {
+ int i;
+ for (i = offset; i < str.length() && Character.isJavaIdentifierPart(str.charAt(i)); ++i) {
+ }
+ return i - offset;
}
static protected class NameCollector extends ASTVisitor {