diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java index a3b71c1d937..9cee0edbc7a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java @@ -45,4 +45,9 @@ public interface ICodeReaderCache { * @return */ public int getCurrentSpace(); + + /** + * + */ + public void flush(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java index 68c571802e4..059ee5332cc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java @@ -62,4 +62,9 @@ public class EmptyCodeReaderCache implements ICodeReaderCache { return 0; } + public void flush() { + // nothing to do + + } + } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java index cf96514b07f..82f90b8e222 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java @@ -295,4 +295,8 @@ public class CodeReaderCache implements ICodeReaderCache { return cache.getCurrentSpace(); } + public void flush() { + cache.flush(); + } + } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java index 2a421db9847..eb438592dbe 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java @@ -16,6 +16,7 @@ import org.eclipse.cdt.core.dom.ICodeReaderFactory; import org.eclipse.cdt.core.parser.CodeReader; import org.eclipse.cdt.core.parser.CodeReaderCache; import org.eclipse.cdt.core.parser.ICodeReaderCache; +import org.eclipse.core.runtime.Preferences; /** * @author jcamelon @@ -34,13 +35,29 @@ public class SavedCodeReaderFactory implements ICodeReaderFactory { private SavedCodeReaderFactory() { int size=0; - if (CCorePlugin.getDefault() == null || CCorePlugin.getDefault().getPluginPreferences() == null) + Preferences pluginPreferences = CCorePlugin.getDefault().getPluginPreferences(); + if (CCorePlugin.getDefault() == null || pluginPreferences == null) size = CodeReaderCache.DEFAULT_CACHE_SIZE_IN_MB; else - size = CCorePlugin.getDefault().getPluginPreferences().getInt(CodeReaderCache.CODE_READER_BUFFER); - - if (size >= 0) + size = pluginPreferences.getInt(CodeReaderCache.CODE_READER_BUFFER); + + if (size > 0) cache = new CodeReaderCache(size); + else if( size == 0 ) + { + //necessary for cache to work headless + String [] properties = pluginPreferences.propertyNames(); + boolean found = false; + for( int j = 0; j < properties.length; ++j ) + if( properties[j].equals( CodeReaderCache.CODE_READER_BUFFER ) ) + { + found = true; + break; + } + + if( !found && size == 0 ) + cache = new CodeReaderCache(CodeReaderCache.DEFAULT_CACHE_SIZE_IN_MB); + } else cache = new CodeReaderCache(CodeReaderCache.DEFAULT_CACHE_SIZE_IN_MB); }