diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java
index 6bb116616ac..9e1bd7e621b 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java
@@ -99,9 +99,15 @@ public class IndexBugsTests extends BaseTestCase {
return fCProject.getProject();
}
- protected StringBuffer[] getContentsForTest(int blocks) throws IOException {
- return TestSourceReader.getContentsForTest(
+ protected String[] getContentsForTest(int blocks) throws IOException {
+ StringBuffer[] help= TestSourceReader.getContentsForTest(
CTestPlugin.getDefault().getBundle(), "parser", getClass(), getName(), blocks);
+ String[] result= new String[help.length];
+ int i=0;
+ for (StringBuffer buf : help) {
+ result[i++]= buf.toString();
+ }
+ return result;
}
protected IFile createFile(IContainer container, String fileName, String contents) throws Exception {
@@ -141,9 +147,9 @@ public class IndexBugsTests extends BaseTestCase {
// because of fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=193779
// this test case passes. However https://bugs.eclipse.org/bugs/show_bug.cgi?id=154563
// remains to be fixed.
- StringBuffer[] content= getContentsForTest(3);
+ String[] content= getContentsForTest(3);
- IFile file= createFile(getProject(), "header.h", content[0].toString());
+ IFile file= createFile(getProject(), "header.h", content[0]);
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
IIndex index= CCorePlugin.getIndexManager().getIndex(fCProject);
@@ -157,7 +163,7 @@ public class IndexBugsTests extends BaseTestCase {
index.releaseReadLock();
}
- file.setContents(new ByteArrayInputStream(content[1].toString().getBytes()), true, false, NPM);
+ file.setContents(new ByteArrayInputStream(content[1].getBytes()), true, false, NPM);
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
index= CCorePlugin.getIndexManager().getIndex(fCProject);
@@ -180,9 +186,9 @@ public class IndexBugsTests extends BaseTestCase {
// class B {};
// B var;
public void test173997_2() throws Exception {
- StringBuffer[] content= getContentsForTest(2);
+ String[] content= getContentsForTest(2);
- IFile file= createFile(getProject(), "header.h", content[0].toString());
+ IFile file= createFile(getProject(), "header.h", content[0]);
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
IIndex index= CCorePlugin.getIndexManager().getIndex(fCProject);
@@ -197,7 +203,7 @@ public class IndexBugsTests extends BaseTestCase {
index.releaseReadLock();
}
- file.setContents(new ByteArrayInputStream(content[1].toString().getBytes()), true, false, NPM);
+ file.setContents(new ByteArrayInputStream(content[1].getBytes()), true, false, NPM);
waitUntilFileIsIndexed(file, INDEX_WAIT_TIME);
index= CCorePlugin.getIndexManager().getIndex(fCProject);
@@ -220,7 +226,7 @@ public class IndexBugsTests extends BaseTestCase {
// void function162011(Class162011 x){};
// }
public void testBug162011() throws Exception {
- String content = getContentsForTest(1)[0].toString();
+ String content = getContentsForTest(1)[0];
String fileName = "bug162011.cpp";
String funcName = "function162011";
@@ -407,7 +413,7 @@ public class IndexBugsTests extends BaseTestCase {
// #define macro164500 2
public void test164500() throws Exception {
waitForIndexer();
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test164500.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
@@ -417,12 +423,12 @@ public class IndexBugsTests extends BaseTestCase {
IIndexFile ifile= fIndex.getFile(ILinkage.CPP_LINKAGE_ID, IndexLocationFactory.getWorkspaceIFL(file));
assertNotNull(ifile);
IIndexMacro[] macros= ifile.getMacros();
- assertEquals(2, macros.length);
+ assertEquals(3, macros.length);
IIndexMacro m= macros[0];
assertEquals("1", new String(m.getExpansionImage()));
assertEquals("macro164500", new String(m.getName()));
- m= macros[1];
+ m= macros[2];
assertEquals("2", new String(m.getExpansionImage()));
assertEquals("macro164500", new String(m.getName()));
}
@@ -441,7 +447,7 @@ public class IndexBugsTests extends BaseTestCase {
String pname = "deleteTest"+System.currentTimeMillis();
ICProject cproject = CProjectHelper.createCCProject(pname, "bin", IPDOMManager.ID_FAST_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(cproject.getProject(), "content.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(index, file, INDEX_WAIT_TIME);
CProjectHelper.delete(cproject);
@@ -468,7 +474,7 @@ public class IndexBugsTests extends BaseTestCase {
ICProject cproject = CProjectHelper.createCCProject("moveTest", "bin", IPDOMManager.ID_FAST_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(cproject.getProject(), "content.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(index, file, INDEX_WAIT_TIME);
@@ -504,9 +510,9 @@ public class IndexBugsTests extends BaseTestCase {
ICProject cproject = CProjectHelper.createCCProject("seq1", "bin", IPDOMManager.ID_FAST_INDEXER);
try {
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
- StringBuffer[] testData = getContentsForTest(3);
- IFile header= TestSourceReader.createFile(cproject.getProject(), "header.h", testData[0].toString());
- IFile referer= TestSourceReader.createFile(cproject.getProject(), "content.cpp", testData[1].toString());
+ String[] testData = getContentsForTest(3);
+ IFile header= TestSourceReader.createFile(cproject.getProject(), "header.h", testData[0]);
+ IFile referer= TestSourceReader.createFile(cproject.getProject(), "content.cpp", testData[1]);
TestSourceReader.waitUntilFileIsIndexed(index, referer, INDEX_WAIT_TIME);
index.acquireReadLock();
@@ -520,7 +526,7 @@ public class IndexBugsTests extends BaseTestCase {
index.releaseReadLock();
}
- InputStream in = new ByteArrayInputStream(testData[2].toString().getBytes());
+ InputStream in = new ByteArrayInputStream(testData[2].getBytes());
header.setContents(in, IResource.FORCE, null);
TestSourceReader.waitUntilFileIsIndexed(index, header, INDEX_WAIT_TIME);
@@ -544,7 +550,7 @@ public class IndexBugsTests extends BaseTestCase {
// } S20070201;
public void test172454_1() throws Exception {
waitForIndexer();
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test172454.c", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
@@ -579,7 +585,7 @@ public class IndexBugsTests extends BaseTestCase {
// } S20070201;
public void test172454_2() throws Exception {
waitForIndexer();
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test172454.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
@@ -615,7 +621,7 @@ public class IndexBugsTests extends BaseTestCase {
// enum {e20070206};
public void test156671() throws Exception {
waitForIndexer();
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test156671.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
@@ -634,7 +640,7 @@ public class IndexBugsTests extends BaseTestCase {
// typedef int T20070213;
public void test173997() throws Exception {
waitForIndexer();
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "test173997.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
@@ -691,7 +697,7 @@ public class IndexBugsTests extends BaseTestCase {
// };
public void testFindBindingsWithPrefix() throws Exception {
waitForIndexer();
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "testFBWP.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
@@ -725,7 +731,7 @@ public class IndexBugsTests extends BaseTestCase {
// class a { class b { class c { void f(); }; }; };
public void testFilterFindBindingsFQCharArray() throws Exception {
waitForIndexer();
- String content= getContentsForTest(1)[0].toString();
+ String content= getContentsForTest(1)[0];
IFile file= TestSourceReader.createFile(fCProject.getProject(), "testFilterFindBindingsFQCharArray.cpp", content);
TestSourceReader.waitUntilFileIsIndexed(fIndex, file, INDEX_WAIT_TIME);
@@ -758,13 +764,13 @@ public class IndexBugsTests extends BaseTestCase {
// #include "../__bugsTest__/common.h"
// StructA_T gvar2;
public void testFileInMultipleFragments_bug192352() throws Exception {
- StringBuffer[] contents= getContentsForTest(3);
+ String[] contents= getContentsForTest(3);
ICProject p2 = CProjectHelper.createCCProject("__bugsTest_2_", "bin", IPDOMManager.ID_FAST_INDEXER);
try {
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "common.h", contents[0].toString());
- IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1].toString());
- IFile f3= TestSourceReader.createFile(p2.getProject(), "src.cpp", contents[2].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "common.h", contents[0]);
+ IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1]);
+ IFile f3= TestSourceReader.createFile(p2.getProject(), "src.cpp", contents[2]);
waitForIndexer();
IIndex index= CCorePlugin.getIndexManager().getIndex(new ICProject[]{fCProject, p2});
@@ -808,14 +814,14 @@ public class IndexBugsTests extends BaseTestCase {
// #endif
public void testIncludeGuardsOutsideOfHeader_Bug167100() throws Exception {
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- StringBuffer[] contents= getContentsForTest(5);
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "header1.h", contents[0].toString());
- IFile f2= TestSourceReader.createFile(fCProject.getProject(), "header2.h", contents[1].toString());
- IFile f3= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[2].toString());
+ String[] contents= getContentsForTest(5);
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "header1.h", contents[0]);
+ IFile f2= TestSourceReader.createFile(fCProject.getProject(), "header2.h", contents[1]);
+ IFile f3= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[2]);
indexManager.reindex(fCProject);
waitForIndexer();
- IFile f4= TestSourceReader.createFile(fCProject.getProject(), "src2.cpp", contents[3].toString());
- IFile f5= TestSourceReader.createFile(fCProject.getProject(), "src3.cpp", contents[4].toString());
+ IFile f4= TestSourceReader.createFile(fCProject.getProject(), "src2.cpp", contents[3]);
+ IFile f5= TestSourceReader.createFile(fCProject.getProject(), "src3.cpp", contents[4]);
waitForIndexer();
IIndex index= indexManager.getIndex(fCProject);
@@ -849,7 +855,7 @@ public class IndexBugsTests extends BaseTestCase {
// globalVar++;
// }
public void testDependentProjectsWithFullIndexer_Bug197311() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
indexManager.setIndexerId(fCProject, IPDOMManager.ID_FULL_INDEXER);
ICProject p2 = CProjectHelper.createCCProject("bug197311", "bin", IPDOMManager.ID_FULL_INDEXER);
@@ -858,9 +864,9 @@ public class IndexBugsTests extends BaseTestCase {
pd.setReferencedProjects(refs);
p2.getProject().setDescription(pd, new NullProgressMonitor());
try {
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "common.h", contents[0].toString());
- IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1].toString());
- IFile f3= TestSourceReader.createFile(p2.getProject(), "src.cpp", contents[1].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "common.h", contents[0]);
+ IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1]);
+ IFile f3= TestSourceReader.createFile(p2.getProject(), "src.cpp", contents[1]);
waitForIndexer();
IIndex index= indexManager.getIndex(p2, IIndexManager.ADD_DEPENDENCIES);
@@ -909,11 +915,11 @@ public class IndexBugsTests extends BaseTestCase {
// MAC()= MAC(1) + MAC(1,2);
// }
public void testVariadicMacros_Bug200239_1() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0]);
waitUntilFileIsIndexed(f1, INDEX_WAIT_TIME);
- IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1].toString());
+ IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1]);
waitForIndexer();
fIndex.acquireReadLock();
@@ -936,11 +942,11 @@ public class IndexBugsTests extends BaseTestCase {
// GMAC()= GMAC(1) + GMAC(1,2);
// }
public void testVariadicMacros_Bug200239_2() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0]);
waitUntilFileIsIndexed(f1, INDEX_WAIT_TIME);
- IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1].toString());
+ IFile f2= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[1]);
waitForIndexer();
fIndex.acquireReadLock();
@@ -959,9 +965,9 @@ public class IndexBugsTests extends BaseTestCase {
// typedef bug200553_A bug200553_B;
// typedef bug200553_B bug200553_A;
public void testTypedefRecursionCpp_Bug200553() throws Exception {
- StringBuffer[] contents= getContentsForTest(1);
+ String[] contents= getContentsForTest(1);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[0].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "src.cpp", contents[0]);
waitForIndexer();
fIndex.acquireReadLock();
try {
@@ -1010,9 +1016,9 @@ public class IndexBugsTests extends BaseTestCase {
// typedef bug200553_A bug200553_B;
// typedef bug200553_B bug200553_A;
public void testTypedefRecursionC_Bug200553() throws Exception {
- StringBuffer[] contents= getContentsForTest(1);
+ String[] contents= getContentsForTest(1);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "src.c", contents[0].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "src.c", contents[0]);
waitForIndexer();
fIndex.acquireReadLock();
try {
@@ -1053,9 +1059,9 @@ public class IndexBugsTests extends BaseTestCase {
// #include "source.cpp"
// #endif
public void testIncludeSource_Bug199412() throws Exception {
- StringBuffer[] contents= getContentsForTest(1);
+ String[] contents= getContentsForTest(1);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[0].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[0]);
waitForIndexer();
final ITranslationUnit tu= (ITranslationUnit) fCProject.findElement(new Path("source.cpp"));
@@ -1087,9 +1093,9 @@ public class IndexBugsTests extends BaseTestCase {
// void func_209049(long long x);
public void testGPPTypes_Bug209049() throws Exception {
- StringBuffer[] contents= getContentsForTest(1);
+ String[] contents= getContentsForTest(1);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- IFile f1= TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[0].toString());
+ IFile f1= TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[0]);
waitForIndexer();
fIndex.acquireReadLock();
try {
@@ -1109,11 +1115,11 @@ public class IndexBugsTests extends BaseTestCase {
// staticInHeader();
// }
public void testStaticFunctionsInHeader_Bug180305() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source1.cpp", contents[1].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source2.cpp", contents[1].toString());
+ TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "source1.cpp", contents[1]);
+ TestSourceReader.createFile(fCProject.getProject(), "source2.cpp", contents[1]);
indexManager.reindex(fCProject);
waitForIndexer();
fIndex.acquireReadLock();
@@ -1136,11 +1142,11 @@ public class IndexBugsTests extends BaseTestCase {
// int a= staticConstInHeader;
// }
public void testStaticVariableInHeader_Bug180305() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source1.cpp", contents[1].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source2.cpp", contents[1].toString());
+ TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "source1.cpp", contents[1]);
+ TestSourceReader.createFile(fCProject.getProject(), "source2.cpp", contents[1]);
indexManager.reindex(fCProject);
waitForIndexer();
fIndex.acquireReadLock();
@@ -1163,11 +1169,11 @@ public class IndexBugsTests extends BaseTestCase {
// staticInHeader();
// }
public void testStaticFunctionsInHeaderC_Bug180305() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source1.c", contents[1].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source2.c", contents[1].toString());
+ TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "source1.c", contents[1]);
+ TestSourceReader.createFile(fCProject.getProject(), "source2.c", contents[1]);
indexManager.reindex(fCProject);
waitForIndexer();
fIndex.acquireReadLock();
@@ -1190,11 +1196,11 @@ public class IndexBugsTests extends BaseTestCase {
// int a= staticConstInHeader;
// }
public void testStaticVariableInHeaderC_Bug180305() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source1.c", contents[1].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source2.c", contents[1].toString());
+ TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "source1.c", contents[1]);
+ TestSourceReader.createFile(fCProject.getProject(), "source2.c", contents[1]);
indexManager.reindex(fCProject);
waitForIndexer();
fIndex.acquireReadLock();
@@ -1214,10 +1220,10 @@ public class IndexBugsTests extends BaseTestCase {
// #include "header.x"
public void testNonStandardSuffix_Bug205778() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- TestSourceReader.createFile(fCProject.getProject(), "header.x", contents[0].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[1].toString());
+ TestSourceReader.createFile(fCProject.getProject(), "header.x", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[1]);
indexManager.reindex(fCProject);
waitForIndexer();
fIndex.acquireReadLock();
@@ -1237,10 +1243,10 @@ public class IndexBugsTests extends BaseTestCase {
// };
// #include "MyClass_inline.h"
public void testAddingMemberBeforeContainer_Bug203170() throws Exception {
- StringBuffer[] contents= getContentsForTest(2);
+ String[] contents= getContentsForTest(2);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- TestSourceReader.createFile(fCProject.getProject(), "MyClass_inline.h", contents[0].toString());
- TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[1].toString());
+ TestSourceReader.createFile(fCProject.getProject(), "MyClass_inline.h", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "source.cpp", contents[1]);
indexManager.reindex(fCProject);
waitForIndexer();
fIndex.acquireReadLock();
@@ -1268,11 +1274,11 @@ public class IndexBugsTests extends BaseTestCase {
// a.b;
// }
public void testUnrelatedTypedef_Bug214146() throws Exception {
- StringBuffer[] contents= getContentsForTest(3);
+ String[] contents= getContentsForTest(3);
final IIndexManager indexManager = CCorePlugin.getIndexManager();
- TestSourceReader.createFile(fCProject.getProject(), "s1.cpp", contents[0].toString());
- TestSourceReader.createFile(fCProject.getProject(), "h1.h", contents[1].toString());
- TestSourceReader.createFile(fCProject.getProject(), "s2.h", contents[2].toString());
+ TestSourceReader.createFile(fCProject.getProject(), "s1.cpp", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "h1.h", contents[1]);
+ TestSourceReader.createFile(fCProject.getProject(), "s2.h", contents[2]);
indexManager.reindex(fCProject);
waitForIndexer();
fIndex.acquireReadLock();
@@ -1286,4 +1292,35 @@ public class IndexBugsTests extends BaseTestCase {
fIndex.releaseReadLock();
}
}
+
+
+ // #undef XXX
+
+ // #define XXX
+ // #include "header.h"
+ // #ifdef XXX
+ // int bug227088;
+ // #else
+ // int ok;
+ // #endif
+ public void testUndefInHeader_Bug227088() throws Exception {
+ String[] contents= getContentsForTest(2);
+ final IIndexManager indexManager = CCorePlugin.getIndexManager();
+ TestSourceReader.createFile(fCProject.getProject(), "header.h", contents[0]);
+ TestSourceReader.createFile(fCProject.getProject(), "s1.cpp", contents[1]);
+ TestSourceReader.createFile(fCProject.getProject(), "s2.cpp", contents[1]);
+ indexManager.reindex(fCProject);
+ waitForIndexer();
+ fIndex.acquireReadLock();
+ try {
+ IIndexBinding[] bindings = fIndex.findBindings("bug227088".toCharArray(), IndexFilter.ALL, NPM);
+ assertEquals(0, bindings.length);
+ bindings = fIndex.findBindings("ok".toCharArray(), IndexFilter.ALL, NPM);
+ assertEquals(1, bindings.length);
+ IIndexName[] decls = fIndex.findNames(bindings[0], IIndex.FIND_ALL_OCCURENCES);
+ assertEquals(2, decls.length);
+ } finally {
+ fIndex.releaseReadLock();
+ }
+ }
}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IMacroBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IMacroBinding.java
index e06f574685a..9f38c1e7950 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IMacroBinding.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IMacroBinding.java
@@ -36,7 +36,8 @@ public interface IMacroBinding extends IBinding {
char[][] getParameterList();
/**
- * Returns the expansion of this macro definition. For dynamic macros an exemplary image is returned.
+ * Returns the expansion of this macro definition, or null
if the definition is not
+ * available. For dynamic macros an exemplary image is returned.
* @since 5.0
*/
char[] getExpansion();
@@ -51,7 +52,8 @@ public interface IMacroBinding extends IBinding {
char[][] getParameterPlaceholderList();
/**
- * Returns the image of the expansion (also containing comments). For dynamic macros an exemplary image is returned.
+ * Returns the image of the expansion (also containing comments), or null
if the definition
+ * is not available. For dynamic macros an exemplary image is returned.
* @since 5.0
*/
char[] getExpansionImage();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexMacro.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexMacro.java
index b6cb8d71835..01e231a48e3 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexMacro.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/index/IIndexMacro.java
@@ -16,7 +16,7 @@ import org.eclipse.cdt.core.dom.ast.IMacroBinding;
import org.eclipse.core.runtime.CoreException;
/**
- * Represents a macro stored in the index.
+ * Represents a macro stored in the index.
*
* This interface is not intended to be implemented by clients. *
@@ -37,7 +37,7 @@ public interface IIndexMacro extends IMacroBinding, IIndexBinding { * If available, return the file location for the macro definition of this macro, * otherwise returnnull
.
*/
- IASTFileLocation getFileLocation();
+ IASTFileLocation getFileLocation() throws CoreException;
/**
* Returns the file in which this macro is defined and belongs to.
@@ -47,7 +47,8 @@ public interface IIndexMacro extends IMacroBinding, IIndexBinding {
/**
* Returns the name of the definition of this macro, or null
if not available.
+ * @throws CoreException
* @since 5.0
*/
- IIndexName getDefinition();
+ IIndexName getDefinition() throws CoreException;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java
index f6e941a5e53..21169115848 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java
@@ -16,7 +16,7 @@ import java.util.Collection;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement;
-import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition;
+import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexFile;
import org.eclipse.cdt.core.index.IIndexFileLocation;
@@ -72,7 +72,7 @@ public interface IWritableIndex extends IIndex {
*/
void setFileContent(IIndexFragmentFile sourceFile,
int linkageID, IncludeInformation[] includes,
- IASTPreprocessorMacroDefinition[] macros, IASTName[][] names,
+ IASTPreprocessorStatement[] macros, IASTName[][] names,
ASTFilePathResolver resolver) throws CoreException;
/**
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndexFragment.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndexFragment.java
index 60856b29c1c..713a6087020 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndexFragment.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndexFragment.java
@@ -15,7 +15,7 @@ package org.eclipse.cdt.internal.core.index;
import java.util.Collection;
import org.eclipse.cdt.core.dom.ast.IASTName;
-import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition;
+import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.internal.core.index.IWritableIndex.IncludeInformation;
import org.eclipse.cdt.internal.core.pdom.ASTFilePathResolver;
@@ -52,7 +52,7 @@ public interface IWritableIndexFragment extends IIndexFragment {
*/
void addFileContent(IIndexFragmentFile sourceFile,
IncludeInformation[] includes,
- IASTPreprocessorMacroDefinition[] macros, IASTName[][] names, ASTFilePathResolver resolver) throws CoreException;
+ IASTPreprocessorStatement[] macros, IASTName[][] names, ASTFilePathResolver resolver) throws CoreException;
/**
* Acquires a write lock, while giving up a certain amount of read locks.
@@ -69,7 +69,7 @@ public interface IWritableIndexFragment extends IIndexFragment {
/**
* Write the key, value mapping to the fragment properties. If a mapping for the
* same key already exists, it is overwritten.
- * @param key a non-null property name
+ * @param propertyName a non-null property name
* @param value a value to associate with the key. may not be null.
* @throws CoreException
* @throws NullPointerException if key is null
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/WritableCIndex.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/WritableCIndex.java
index 69e4babd474..3efb8e4ce5a 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/WritableCIndex.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/WritableCIndex.java
@@ -15,7 +15,7 @@ package org.eclipse.cdt.internal.core.index;
import java.util.Collection;
import org.eclipse.cdt.core.dom.ast.IASTName;
-import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition;
+import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
import org.eclipse.cdt.core.index.IIndexFile;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.internal.core.pdom.ASTFilePathResolver;
@@ -60,15 +60,14 @@ public class WritableCIndex extends CIndex implements IWritableIndex {
public void setFileContent(IIndexFragmentFile file, int linkageID,
IncludeInformation[] includes,
- IASTPreprocessorMacroDefinition[] macros, IASTName[][] names, ASTFilePathResolver resolver) throws CoreException {
+ IASTPreprocessorStatement[] macros, IASTName[][] names, ASTFilePathResolver resolver) throws CoreException {
IIndexFragment indexFragment = file.getIndexFragment();
if (!isWritableFragment(indexFragment)) {
assert false : "Attempt to update file of read-only fragment"; //$NON-NLS-1$
}
else {
- for (int i = 0; i < includes.length; i++) {
- IncludeInformation ii= includes[i];
+ for (IncludeInformation ii : includes) {
if (ii.fLocation != null) {
ii.fTargetFile= addFile(linkageID, ii.fLocation);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java
index 99ef0bd17e2..5d65ad0e563 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java
@@ -782,10 +782,17 @@ public class CPreprocessor implements ILexerLog, IScanner, IAdaptable {
private void addMacroDefinition(IIndexMacro macro) {
try {
- PreprocessorMacro result= MacroDefinitionParser.parseMacroDefinition(macro.getNameCharArray(), macro.getParameterList(), macro.getExpansionImage());
- final IASTFileLocation loc= macro.getFileLocation();
- fLocationMap.registerMacroFromIndex(result, loc, -1);
- fMacroDictionary.put(result.getNameCharArray(), result);
+ final char[] expansionImage = macro.getExpansionImage();
+ if (expansionImage == null) {
+ // this is an undef
+ fMacroDictionary.remove(macro.getNameCharArray());
+ }
+ else {
+ PreprocessorMacro result= MacroDefinitionParser.parseMacroDefinition(macro.getNameCharArray(), macro.getParameterList(), expansionImage);
+ final IASTFileLocation loc= macro.getFileLocation();
+ fLocationMap.registerMacroFromIndex(result, loc, -1);
+ fMacroDictionary.put(result.getNameCharArray(), result);
+ }
}
catch (Exception e) {
fLog.traceLog("Invalid macro definition: '" + macro.getName() + "'"); //$NON-NLS-1$//$NON-NLS-2$
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java
index 8e3e43a75da..1779ea3ceed 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java
@@ -20,6 +20,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
@@ -46,6 +47,7 @@ import org.eclipse.cdt.internal.core.index.IIndexFragmentFile;
import org.eclipse.cdt.internal.core.index.IWritableIndex;
import org.eclipse.cdt.internal.core.index.IndexBasedCodeReaderFactory;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
+import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -244,11 +246,10 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
final boolean checkConfig= (fUpdateFlags & IIndexManager.UPDATE_CHECK_CONFIGURATION) != 0;
int count= 0;
- for (int i = 0; i < fFilesToUpdate.length; i++) {
+ for (final Object tu : fFilesToUpdate) {
if (monitor.isCanceled())
return;
- final Object tu= fFilesToUpdate[i];
final IIndexFileLocation ifl= fResolver.resolveFile(tu);
if (ifl == null)
continue;
@@ -260,8 +261,8 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
if ((isSourceUnit && !isExcludedSource) || fIndexHeadersWithoutContext) {
// headers or sources required with a specific linkage
AbstractLanguage[] langs= fResolver.getLanguages(tu);
- for (int j = 0; j < langs.length; j++) {
- int linkageID = langs[j].getLinkageID();
+ for (AbstractLanguage lang : langs) {
+ int linkageID = lang.getLinkageID();
IIndexFragmentFile ifile= getFile(linkageID, indexFiles);
if (ifile == null || !ifile.hasContent()) {
store(tu, linkageID, isSourceUnit, files);
@@ -285,8 +286,7 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
}
// handle other files present in index
- for (int j = 0; j < indexFiles.length; j++) {
- IIndexFragmentFile ifile = indexFiles[j];
+ for (IIndexFragmentFile ifile : indexFiles) {
if (ifile != null && ifile.hasContent()) {
IIndexInclude ctx= ifile.getParsedInContext();
if (ctx == null) {
@@ -354,8 +354,7 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
}
private IIndexFragmentFile getFile(int linkageID, IIndexFragmentFile[] indexFiles) throws CoreException {
- for (int i = 0; i < indexFiles.length; i++) {
- IIndexFragmentFile ifile = indexFiles[i];
+ for (IIndexFragmentFile ifile : indexFiles) {
if (ifile != null && ifile.getLinkageID() == linkageID) {
return ifile;
}
@@ -391,26 +390,23 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
if (!filesToRemove.isEmpty() || !ifilesToRemove.isEmpty()) {
fIndex.acquireWriteLock(1);
try {
- for (Iterator