[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] FIXED 87179, 95573
|
FIXED 87179- [Selection] selecting #ifdef
IASTName\r\n does not provide a proper IASTNode
FIXED 95573- [DOM AST] Code buffers
not refreshed after file is saved
Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada
Index: parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java,v
retrieving revision 1.3
diff -u -r1.3 AST2SelectionParseTest.java
--- parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java 17 May 2005 18:40:38 -0000 1.3
+++ parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SelectionParseTest.java 17 May 2005 20:25:00 -0000
@@ -1509,4 +1509,21 @@
assertNotNull(name.resolveBinding());
assertTrue(name.resolveBinding() instanceof IVariable);
}
+
+ public void testBug87179() throws Exception
+ {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("#define ONE 1\r\n"); //$NON-NLS-1$
+ buffer.append("#ifdef ONE\r\n"); //$NON-NLS-1$
+ buffer.append("int x=0;\r\n"); //$NON-NLS-1$
+ buffer.append("#else\r\n"); //$NON-NLS-1$
+ buffer.append("char c='c';\r\n"); //$NON-NLS-1$
+ buffer.append("#endif\r\n"); //$NON-NLS-1$
+
+ String code = buffer.toString();
+ int offset1 = code.indexOf( "#ifdef ONE" ); //$NON-NLS-1$
+ int length = "#ifdef ONE".length(); //$NON-NLS-1$
+ IASTNode node = parse( code, ParserLanguage.C, offset1, length );
+ assertNotNull(node);
+ }
}
Index: parser/org/eclipse/cdt/core/parser/tests/ast2/CodeReaderCacheTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/CodeReaderCacheTest.java,v
retrieving revision 1.1
diff -u -r1.1 CodeReaderCacheTest.java
--- parser/org/eclipse/cdt/core/parser/tests/ast2/CodeReaderCacheTest.java 22 Mar 2005 17:00:43 -0000 1.1
+++ parser/org/eclipse/cdt/core/parser/tests/ast2/CodeReaderCacheTest.java 17 May 2005 20:25:00 -0000
@@ -132,6 +132,44 @@
job.cancel();
}
+
+ public void testResourceChangedNestedPathUpdate() {
+ boolean hasPassed = false;
+ StringBuffer code = new StringBuffer();
+ code.append("int x;"); //$NON-NLS-1$
+ ICodeReaderCache cache = CDOM.getInstance().getCodeReaderFactory(CDOM.PARSE_SAVED_RESOURCES).getCodeReaderCache();
+
+ IFile file = null;
+
+ try {
+ importFolder("test");
+ file = importFile("test/test.c", code.toString()); //$NON-NLS-1$
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ // start a new job that repeatedly updates the file...
+ UpdateFileJob job = new UpdateFileJob("updater", file, "test/test.c", code.toString()); //$NON-NLS-1$ //$NON-NLS-2$
+ job.schedule();
+
+ while(!hasPassed) {
+ if (file != null) {
+ parse(file);
+ }
+
+ try {
+ Thread.sleep(1000); // give the updater thread some time to update the resource
+ file = job.getFile();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ if (cache.getCurrentSpace() == 0) // item was properly removed by the updater thread
+ hasPassed = true;
+ }
+
+ job.cancel();
+ }
// THIS MUST BE RUN LAST IN THIS TEST
public void testClearCache() {
Index: parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java,v
retrieving revision 1.37
diff -u -r1.37 BaseScanner.java
--- parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java 16 May 2005 20:16:33 -0000 1.37
+++ parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java 17 May 2005 20:24:43 -0000
@@ -3852,7 +3852,8 @@
int limit = bufferLimit[bufferStackPos];
int pos = ++bufferPos[bufferStackPos];
- if (pos < limit && buffer[pos] == '\n')
+ if ((pos < limit && buffer[pos] == '\n') ||
+ (pos+1 < limit && buffer[pos] == '\r' && buffer[pos+1] == '\n'))
return;
boolean escaped = false;
Index: src/org/eclipse/cdt/core/parser/CodeReaderCache.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java,v
retrieving revision 1.2
diff -u -r1.2 CodeReaderCache.java
--- src/org/eclipse/cdt/core/parser/CodeReaderCache.java 22 Apr 2005 17:49:54 -0000 1.2
+++ src/org/eclipse/cdt/core/parser/CodeReaderCache.java 17 May 2005 20:24:43 -0000
@@ -79,27 +79,27 @@
}
protected IStatus run(IProgressMonitor monitor) {
- String key = null;
-
if (event.getSource() instanceof IWorkspace && event.getDelta() != null) {
- IResourceDelta[] projects = event.getDelta().getAffectedChildren();
- for(int i=0; i<projects.length; i++) {
- if (projects[i].getResource().getType() == IResource.PROJECT) {
- IResourceDelta[] files = projects[i].getAffectedChildren();
- for(int j=0; j<files.length; j++) {
- if (files[j].getResource() instanceof IFile && ((IFile)files[j].getResource()).getLocation() != null) {
- key = ((IFile)files[j].getResource()).getLocation().toOSString();
- }
- }
- }
- }
+ removeKeys(event.getDelta().getAffectedChildren());
}
- if (key != null && cache1 != null)
- cache1.remove(key);
-
return Status.OK_STATUS;
}
+
+ private void removeKeys(IResourceDelta[] deltas) {
+ for(int j=0; j<deltas.length; j++) {
+ if (deltas[j].getResource().getType() == IResource.PROJECT || deltas[j].getResource().getType() == IResource.FOLDER) {
+ removeKeys(deltas[j].getAffectedChildren());
+ } else if (deltas[j].getResource() instanceof IFile && ((IFile)deltas[j].getResource()).getLocation() != null) {
+ removeKey(((IFile)deltas[j].getResource()).getLocation().toOSString());
+ }
+ }
+ }
+
+ private void removeKey(String key) {
+ if (key != null && cache1 != null)
+ cache1.remove(key);
+ }
}