From 30b7b74871ae68bb56ef370ad1504c080b8800d6 Mon Sep 17 00:00:00 2001 From: Chris Recoskie Date: Wed, 4 Apr 2007 15:51:14 +0000 Subject: [PATCH] RESOLVED - bug 179393: factor IScanner.addDefinition(IMacro) into its own interface https://bugs.eclipse.org/bugs/show_bug.cgi?id=179393 --- .../cdt/core/dom/ICodeReaderFactory.java | 3 +- .../eclipse/cdt/core/dom/IMacroCollector.java | 33 +++++++++++++++++++ .../org/eclipse/cdt/core/parser/IScanner.java | 10 +++++- .../index/IndexBasedCodeReaderFactory.java | 4 +-- .../scanner2/FileCodeReaderFactory.java | 6 ++-- .../core/dom/NullCodeReaderFactory.java | 6 ++-- .../PartialWorkingCopyCodeReaderFactory.java | 6 ++-- .../core/dom/SavedCodeReaderFactory.java | 6 ++-- 8 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IMacroCollector.java diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ICodeReaderFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ICodeReaderFactory.java index fb6c670dc39..771c5a7daf5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ICodeReaderFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ICodeReaderFactory.java @@ -12,7 +12,6 @@ package org.eclipse.cdt.core.dom; import org.eclipse.cdt.core.parser.CodeReader; import org.eclipse.cdt.core.parser.ICodeReaderCache; -import org.eclipse.cdt.core.parser.IScanner; /** * This is the interface that an AST Service uses to delegate the construction @@ -43,7 +42,7 @@ public interface ICodeReaderFactory { * @param path * @return CodeReader for contents at that path. */ - public CodeReader createCodeReaderForInclusion(IScanner scanner, String path); + public CodeReader createCodeReaderForInclusion(IMacroCollector callback, String path); /** * Returns the ICodeReaderCache used for this ICodeReaderFacotry. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IMacroCollector.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IMacroCollector.java new file mode 100644 index 00000000000..d19e9eb36fe --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IMacroCollector.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core.dom; + +import org.eclipse.cdt.core.parser.IMacro; + +/** + * Allows an ICodeReaderFactory to retrieve macro definitions from the index, + * and then add these definitions to the scanner. + * + *

+ * EXPERIMENTAL. This class or interface has been added as + * part of a work in progress. There is no guarantee that this API will + * work or that it will remain the same. Please do not use this API without + * consulting with the CDT team. + *

+ + * + * @since 4.0 + * + */ +public interface IMacroCollector { + + public void addDefinition(IMacro macro); +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java index 519a79ab281..9b6e3a8745b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java @@ -12,15 +12,23 @@ package org.eclipse.cdt.core.parser; import java.util.Map; +import org.eclipse.cdt.core.dom.IMacroCollector; import org.eclipse.cdt.core.parser.ast.IASTFactory; import org.eclipse.cdt.core.parser.util.CharArrayObjectMap; import org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver; /** * @author jcamelon + * + *

+ * EXPERIMENTAL. This class or interface has been added as + * part of a work in progress. There is no guarantee that this API will + * work or that it will remain the same. Please do not use this API without + * consulting with the CDT team. + *

* */ -public interface IScanner { +public interface IScanner extends IMacroCollector { public static final int tPOUNDPOUND = -6; public static final int tPOUND = -7; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexBasedCodeReaderFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexBasedCodeReaderFactory.java index 71245edc0c9..ea96e27f142 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexBasedCodeReaderFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IndexBasedCodeReaderFactory.java @@ -26,6 +26,7 @@ import java.util.Set; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ICodeReaderFactory; +import org.eclipse.cdt.core.dom.IMacroCollector; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.index.IIndexFile; import org.eclipse.cdt.core.index.IIndexFileLocation; @@ -35,7 +36,6 @@ import org.eclipse.cdt.core.index.IndexLocationFactory; import org.eclipse.cdt.core.parser.CodeReader; import org.eclipse.cdt.core.parser.ICodeReaderCache; import org.eclipse.cdt.core.parser.IMacro; -import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.ParserUtil; import org.eclipse.cdt.internal.core.parser.scanner2.ObjectStyleMacro; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMacro; @@ -103,7 +103,7 @@ public class IndexBasedCodeReaderFactory implements ICodeReaderFactory { return ParserUtil.createReader(path, null); } - public CodeReader createCodeReaderForInclusion(IScanner scanner, String path) { + public CodeReader createCodeReaderForInclusion(IMacroCollector scanner, String path) { // if the file is in the index, we skip it File location= new File(path); String canonicalPath= path; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/FileCodeReaderFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/FileCodeReaderFactory.java index a6d95396476..4bebad983d2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/FileCodeReaderFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/FileCodeReaderFactory.java @@ -11,10 +11,10 @@ package org.eclipse.cdt.internal.core.parser.scanner2; import org.eclipse.cdt.core.dom.ICodeReaderFactory; +import org.eclipse.cdt.core.dom.IMacroCollector; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.parser.CodeReader; import org.eclipse.cdt.core.parser.ICodeReaderCache; -import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.internal.core.dom.parser.EmptyCodeReaderCache; /** @@ -49,9 +49,9 @@ public class FileCodeReaderFactory implements ICodeReaderFactory { } /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(java.lang.String) + * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(org.eclipse.cdt.core.dom.ICodeReaderFactoryCallback, java.lang.String) */ - public CodeReader createCodeReaderForInclusion(IScanner scanner, String path) { + public CodeReader createCodeReaderForInclusion(IMacroCollector scanner, String path) { return cache.get(path); } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullCodeReaderFactory.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullCodeReaderFactory.java index a36ddbb44d3..5e326a0738e 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullCodeReaderFactory.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullCodeReaderFactory.java @@ -11,9 +11,9 @@ package org.eclipse.cdt.internal.core.dom; import org.eclipse.cdt.core.dom.ICodeReaderFactory; +import org.eclipse.cdt.core.dom.IMacroCollector; import org.eclipse.cdt.core.parser.CodeReader; import org.eclipse.cdt.core.parser.ICodeReaderCache; -import org.eclipse.cdt.core.parser.IScanner; /** * A ICodeReaderFactory which creates dummy CodeReaders without content. @@ -34,9 +34,9 @@ public class NullCodeReaderFactory implements ICodeReaderFactory { } /* - * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(org.eclipse.cdt.core.parser.IScanner, java.lang.String) + * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(org.eclipse.cdt.core.dom.ICodeReaderFactoryCallback, java.lang.String) */ - public CodeReader createCodeReaderForInclusion(IScanner scanner, String path) { + public CodeReader createCodeReaderForInclusion(IMacroCollector scanner, String path) { return new CodeReader(path, EMPTY_CHARS); } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/PartialWorkingCopyCodeReaderFactory.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/PartialWorkingCopyCodeReaderFactory.java index 1040bfbb355..e81b9827efe 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/PartialWorkingCopyCodeReaderFactory.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/PartialWorkingCopyCodeReaderFactory.java @@ -15,11 +15,11 @@ import java.util.Iterator; import org.eclipse.cdt.core.dom.CDOM; import org.eclipse.cdt.core.dom.ICodeReaderFactory; +import org.eclipse.cdt.core.dom.IMacroCollector; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopyProvider; import org.eclipse.cdt.core.parser.CodeReader; import org.eclipse.cdt.core.parser.ICodeReaderCache; -import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.ParserUtil; import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator; @@ -70,9 +70,9 @@ public class PartialWorkingCopyCodeReaderFactory } /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(java.lang.String) + * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(org.eclipse.cdt.core.dom.ICodeReaderFactoryCallback, java.lang.String) */ - public CodeReader createCodeReaderForInclusion(IScanner scanner, String path) { + public CodeReader createCodeReaderForInclusion(IMacroCollector scanner, String path) { return cache.get( path ); } 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 62432c65348..340569580c0 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 @@ -13,11 +13,11 @@ package org.eclipse.cdt.internal.core.dom; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.CDOM; import org.eclipse.cdt.core.dom.ICodeReaderFactory; +import org.eclipse.cdt.core.dom.IMacroCollector; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.parser.CodeReader; import org.eclipse.cdt.core.parser.CodeReaderCache; import org.eclipse.cdt.core.parser.ICodeReaderCache; -import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.core.runtime.Preferences; /** @@ -84,9 +84,9 @@ public class SavedCodeReaderFactory implements ICodeReaderFactory { } /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(java.lang.String) + * @see org.eclipse.cdt.core.dom.ICodeReaderFactory#createCodeReaderForInclusion(org.eclipse.cdt.core.dom.ICodeReaderFactoryCallback, java.lang.String) */ - public CodeReader createCodeReaderForInclusion(IScanner scanner, String path) { + public CodeReader createCodeReaderForInclusion(IMacroCollector scanner, String path) { return cache.get(path); }