diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java
index f1bf50b6337..cc7b7cffd0e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java
@@ -10,35 +10,55 @@
* Markus Schorn (Wind River Systems)
* IBM Corporation
* Anton Leherbauer (Wind River Systems)
+ * Mike Kucera - IBM
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast.gnu.c;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ILinkage;
+import org.eclipse.cdt.core.dom.parser.AbstractCLikeLanguage;
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
-import org.eclipse.cdt.core.dom.parser.c.AbstractCLanguage;
+import org.eclipse.cdt.core.dom.parser.ISourceCodeParser;
import org.eclipse.cdt.core.dom.parser.c.GCCParserExtensionConfiguration;
import org.eclipse.cdt.core.dom.parser.c.GCCScannerExtensionConfiguration;
-import org.eclipse.cdt.core.dom.parser.c.ICParserExtensionConfiguration;
+import org.eclipse.cdt.core.index.IIndex;
+import org.eclipse.cdt.core.parser.IParserLogService;
+import org.eclipse.cdt.core.parser.IScanner;
+import org.eclipse.cdt.core.parser.ParserLanguage;
+import org.eclipse.cdt.core.parser.ParserMode;
+import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser;
+import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
+import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory;
/**
- * @author Doug Schaefer
- *
+ * Concrete ILanguage implementation for the DOM C parser.
+ *
*/
-public class GCCLanguage extends AbstractCLanguage {
+public class GCCLanguage extends AbstractCLikeLanguage {
protected static final GCCScannerExtensionConfiguration C_GNU_SCANNER_EXTENSION = new GCCScannerExtensionConfiguration();
protected static final GCCParserExtensionConfiguration C_GNU_PARSER_EXTENSION = new GCCParserExtensionConfiguration();
// Must match the id in the extension
public static final String ID = CCorePlugin.PLUGIN_ID + ".gcc"; //$NON-NLS-1$
- private static final GCCLanguage myDefault = new GCCLanguage();
+ private static final GCCLanguage DEFAULT_INSTANCE = new GCCLanguage();
public static GCCLanguage getDefault() {
- return myDefault;
+ return DEFAULT_INSTANCE;
}
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Object getAdapter(Class adapter) {
+ if (adapter == IPDOMLinkageFactory.class) {
+ return new PDOMCLinkageFactory();
+ }
+ return super.getAdapter(adapter);
+ }
+
+
public String getId() {
return ID;
}
@@ -47,18 +67,26 @@ public class GCCLanguage extends AbstractCLanguage {
return ILinkage.C_LINKAGE_ID;
}
- /*
- * @see org.eclipse.cdt.core.dom.parser.c.AbstractCLanguage#getScannerExtensionConfiguration()
- */
+
+ @Override
protected IScannerExtensionConfiguration getScannerExtensionConfiguration() {
return C_GNU_SCANNER_EXTENSION;
}
-
- /*
- * @see org.eclipse.cdt.core.dom.parser.c.AbstractCLanguage#getParserExtensionConfiguration()
- */
- protected ICParserExtensionConfiguration getParserExtensionConfiguration() {
- return C_GNU_PARSER_EXTENSION;
+
+
+ @Override
+ protected ISourceCodeParser createParser(IScanner scanner, ParserMode parserMode, IParserLogService logService, IIndex index) {
+ return new GNUCSourceParser(scanner, parserMode, logService, C_GNU_PARSER_EXTENSION, index);
}
+
+ @Override
+ protected ParserLanguage getParserLanguage() {
+ return ParserLanguage.C;
+ }
+
+
+
+
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java
index 63bfe2193ff..9bb52e90ab9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java
@@ -10,31 +10,50 @@
* Markus Schorn (Wind River Systems)
* IBM Corporation
* Anton Leherbauer (Wind River Systems)
+ * Mike Kucera - IBM
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast.gnu.cpp;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ILinkage;
+import org.eclipse.cdt.core.dom.parser.AbstractCLikeLanguage;
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
-import org.eclipse.cdt.core.dom.parser.cpp.AbstractCPPLanguage;
-import org.eclipse.cdt.core.dom.parser.cpp.AbstractCPPParserExtensionConfiguration;
+import org.eclipse.cdt.core.dom.parser.ISourceCodeParser;
import org.eclipse.cdt.core.dom.parser.cpp.GPPParserExtensionConfiguration;
import org.eclipse.cdt.core.dom.parser.cpp.GPPScannerExtensionConfiguration;
+import org.eclipse.cdt.core.index.IIndex;
+import org.eclipse.cdt.core.parser.IParserLogService;
+import org.eclipse.cdt.core.parser.IScanner;
+import org.eclipse.cdt.core.parser.ParserLanguage;
+import org.eclipse.cdt.core.parser.ParserMode;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser;
+import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
+import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory;
/**
- * @author Doug Schaefer
+ * Concrete ILanguage implementation for the DOM C++ parser.
*
*/
-public class GPPLanguage extends AbstractCPPLanguage {
+public class GPPLanguage extends AbstractCLikeLanguage {
protected static final GPPScannerExtensionConfiguration CPP_GNU_SCANNER_EXTENSION = new GPPScannerExtensionConfiguration();
protected static final GPPParserExtensionConfiguration CPP_GNU_PARSER_EXTENSION = new GPPParserExtensionConfiguration();
public static final String ID = CCorePlugin.PLUGIN_ID + ".g++"; //$NON-NLS-1$
- private static final GPPLanguage myDefault = new GPPLanguage();
+ private static final GPPLanguage DEFAULT_INSTANCE = new GPPLanguage();
public static GPPLanguage getDefault() {
- return myDefault;
+ return DEFAULT_INSTANCE;
+ }
+
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Object getAdapter(Class adapter) {
+ if (adapter == IPDOMLinkageFactory.class) {
+ return new PDOMCPPLinkageFactory();
+ }
+ return super.getAdapter(adapter);
}
public String getId() {
@@ -46,18 +65,19 @@ public class GPPLanguage extends AbstractCPPLanguage {
return ILinkage.CPP_LINKAGE_ID;
}
- /*
- * @see org.eclipse.cdt.core.dom.parser.cpp.AbstractCPPLanguage#getScannerExtensionConfiguration()
- */
+ @Override
protected IScannerExtensionConfiguration getScannerExtensionConfiguration() {
return CPP_GNU_SCANNER_EXTENSION;
}
- /*
- * @see org.eclipse.cdt.core.dom.parser.cpp.AbstractCPPLanguage#getParserExtensionConfiguration()
- */
- protected AbstractCPPParserExtensionConfiguration getParserExtensionConfiguration() {
- return CPP_GNU_PARSER_EXTENSION;
+ @Override
+ protected ISourceCodeParser createParser(IScanner scanner, ParserMode parserMode, IParserLogService logService, IIndex index) {
+ return new GNUCPPSourceParser(scanner, parserMode, logService, CPP_GNU_PARSER_EXTENSION, index);
+ }
+
+ @Override
+ protected ParserLanguage getParserLanguage() {
+ return ParserLanguage.CPP;
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/AbstractCLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/AbstractCLikeLanguage.java
similarity index 69%
rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/AbstractCLanguage.java
rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/AbstractCLikeLanguage.java
index 4a6671a17b3..83bb6aeda73 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/AbstractCLanguage.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/AbstractCLikeLanguage.java
@@ -1,15 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. and others.
+ * Copyright (c) 2007, 2008 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:
- * Anton Leherbauer (Wind River Systems) - initial API and implementation
- * Markus Schorn (Wind River Systems)
+ * Anton Leherbauer (Wind River Systems) - initial API and implementation
+ * Markus Schorn (Wind River Systems)
+ * Mike Kucera (IBM)
*******************************************************************************/
-package org.eclipse.cdt.core.dom.parser.c;
+package org.eclipse.cdt.core.dom.parser;
import java.util.ArrayList;
import java.util.HashSet;
@@ -18,14 +19,11 @@ import java.util.List;
import java.util.Set;
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
+import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
-import org.eclipse.cdt.core.dom.ast.c.CASTVisitor;
-import org.eclipse.cdt.core.dom.parser.AbstractScannerExtensionConfiguration;
-import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
-import org.eclipse.cdt.core.dom.parser.ISourceCodeParser;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.model.AbstractLanguage;
import org.eclipse.cdt.core.model.ICLanguageKeywords;
@@ -39,17 +37,18 @@ import org.eclipse.cdt.core.parser.KeywordSetKey;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.util.CharArrayIntMap;
-import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser;
import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
-import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
-import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory;
import org.eclipse.core.runtime.CoreException;
/**
- * Abstract C language. Derived classes need only implement
- * {@link getScannerExtensionConfiguration()} and
- * {@link getParserExtensionConfiguration()}.
+ * This class provides a skeletal implementation of the ILanguage interface
+ * for the DOM parser framework.
+ *
+ * This class uses the template method pattern, derived classes need only implement
+ * {@link getScannerExtensionConfiguration()},
+ * {@link getParserLanguage()} and
+ * {@link createParser()}.
*
*
* EXPERIMENTAL. This class or interface has been added as
@@ -60,39 +59,57 @@ import org.eclipse.core.runtime.CoreException;
*
* @see AbstractScannerExtensionConfiguration
*
- * @since 4.0
+ * @since 5.0
*/
-public abstract class AbstractCLanguage extends AbstractLanguage implements ICLanguageKeywords {
+public abstract class AbstractCLikeLanguage extends AbstractLanguage implements ICLanguageKeywords {
- protected static class NameCollector extends CASTVisitor {
+
+ static class NameCollector extends ASTVisitor {
{
shouldVisitNames= true;
}
- private List nameList= new ArrayList();
+ private List nameList= new ArrayList();
- public int visit(IASTName name) {
+ @Override public int visit(IASTName name) {
nameList.add(name);
return PROCESS_CONTINUE;
}
public IASTName[] getNames() {
- return (IASTName[]) nameList.toArray(new IASTName[nameList.size()]);
+ return nameList.toArray(new IASTName[nameList.size()]);
}
}
+
+
+ /**
+ * @return the scanner extension configuration for this language, may not
+ * return null
+ */
+ protected abstract IScannerExtensionConfiguration getScannerExtensionConfiguration();
- public Object getAdapter(Class adapter) {
- if (adapter == IPDOMLinkageFactory.class) {
- return new PDOMCLinkageFactory();
- }
- return super.getAdapter(adapter);
- }
-
+
+ /**
+ * @returns the actual parser object.
+ */
+ protected abstract ISourceCodeParser createParser(IScanner scanner, ParserMode parserMode,
+ IParserLogService logService, IIndex index);
+
+
+ /**
+ * @return The ParserLanguage value corresponding to the language supported.
+ */
+ protected abstract ParserLanguage getParserLanguage();
+
+
+
public IASTTranslationUnit getASTTranslationUnit(CodeReader reader, IScannerInfo scanInfo,
ICodeReaderFactory fileCreator, IIndex index, IParserLogService log) throws CoreException {
return getASTTranslationUnit(reader, scanInfo, fileCreator, index, 0, log);
}
-
+
+
+ @Override
public IASTTranslationUnit getASTTranslationUnit(CodeReader reader, IScannerInfo scanInfo,
ICodeReaderFactory codeReaderFactory, IIndex index, int options, IParserLogService log) throws CoreException {
@@ -106,6 +123,7 @@ public abstract class AbstractCLanguage extends AbstractLanguage implements ICLa
IASTTranslationUnit ast= parser.parse();
return ast;
}
+
public IASTCompletionNode getCompletionNode(CodeReader reader, IScannerInfo scanInfo,
ICodeReaderFactory fileCreator, IIndex index, IParserLogService log, int offset) throws CoreException {
@@ -120,40 +138,8 @@ public abstract class AbstractCLanguage extends AbstractLanguage implements ICLa
IASTCompletionNode node= parser.getCompletionNode();
return node;
}
-
-
- public IASTName[] getSelectedNames(IASTTranslationUnit ast, int start, int length) {
- IASTNode selectedNode= ast.selectNodeForLocation(ast.getFilePath(), start, length);
-
- if (selectedNode == null)
- return new IASTName[0];
-
- if (selectedNode instanceof IASTName)
- return new IASTName[] { (IASTName) selectedNode };
-
- NameCollector collector= new NameCollector();
- selectedNode.accept(collector);
- return collector.getNames();
- }
-
- public IContributedModelBuilder createModelBuilder(ITranslationUnit tu) {
- // Use the default CDT model builder
- return null;
- }
-
- /**
- * Create the scanner to be used with the parser.
- *
- * @param reader the code reader for the main file
- * @param scanInfo the scanner information (macros, include pathes)
- * @param fileCreator the code reader factory for inclusions
- * @param log the log for debugging
- * @return an instance of IScanner
- */
- protected IScanner createScanner(CodeReader reader, IScannerInfo scanInfo, ICodeReaderFactory fileCreator, IParserLogService log) {
- return new CPreprocessor(reader, scanInfo, ParserLanguage.C, log, getScannerExtensionConfiguration(), fileCreator);
- }
-
+
+
/**
* Create the parser.
*
@@ -175,51 +161,68 @@ public abstract class AbstractCLanguage extends AbstractLanguage implements ICLa
else {
mode= ParserMode.COMPLETE_PARSE;
}
- return new GNUCSourceParser(scanner, mode, log, getParserExtensionConfiguration(), index);
+ return createParser(scanner, mode, log, index);
+ }
+
+
+ /**
+ * Create the scanner to be used with the parser.
+ *
+ * @param reader the code reader for the main file
+ * @param scanInfo the scanner information (macros, include pathes)
+ * @param fileCreator the code reader factory for inclusions
+ * @param log the log for debugging
+ * @return an instance of IScanner
+ */
+ protected IScanner createScanner(CodeReader reader, IScannerInfo scanInfo, ICodeReaderFactory fileCreator, IParserLogService log) {
+ return new CPreprocessor(reader, scanInfo, getParserLanguage(), log, getScannerExtensionConfiguration(), fileCreator);
+ }
+
+
+
+ public IASTName[] getSelectedNames(IASTTranslationUnit ast, int start, int length) {
+ IASTNode selectedNode= ast.selectNodeForLocation(ast.getFilePath(), start, length);
+
+ if (selectedNode == null)
+ return new IASTName[0];
+
+ if (selectedNode instanceof IASTName)
+ return new IASTName[] { (IASTName) selectedNode };
+
+ NameCollector collector = new NameCollector();
+ selectedNode.accept(collector);
+ return collector.getNames();
+ }
+
+
+ public IContributedModelBuilder createModelBuilder(ITranslationUnit tu) {
+ // use default model builder
+ return null;
}
- /**
- * @return the scanner extension configuration for this language, may not
- * return null
- */
- protected abstract IScannerExtensionConfiguration getScannerExtensionConfiguration();
-
- /**
- * @return the parser extension configuration for this language, may not
- * return null
- */
- protected abstract ICParserExtensionConfiguration getParserExtensionConfiguration();
-
- /*
- * @see org.eclipse.cdt.core.model.ICLanguageKeywords#getKeywords()
- */
+
public String[] getKeywords() {
- Set keywords= KeywordSets.getKeywords(KeywordSetKey.KEYWORDS, ParserLanguage.C);
- keywords= new HashSet(keywords);
- CharArrayIntMap additionalKeywords= getScannerExtensionConfiguration().getAdditionalKeywords();
+ Set keywords = new HashSet(KeywordSets.getKeywords(KeywordSetKey.KEYWORDS, getParserLanguage()));
+
+ CharArrayIntMap additionalKeywords = getScannerExtensionConfiguration().getAdditionalKeywords();
if (additionalKeywords != null) {
for (Iterator iterator = additionalKeywords.toList().iterator(); iterator.hasNext(); ) {
char[] name = (char[]) iterator.next();
keywords.add(new String(name));
}
}
- return (String[]) keywords.toArray(new String[keywords.size()]);
+ return keywords.toArray(new String[keywords.size()]);
}
- /*
- * @see org.eclipse.cdt.core.model.ICLanguageKeywords#getBuiltinTypes()
- */
+
public String[] getBuiltinTypes() {
- Set types= KeywordSets.getKeywords(KeywordSetKey.TYPES, ParserLanguage.C);
- return (String[]) types.toArray(new String[types.size()]);
+ Set types = KeywordSets.getKeywords(KeywordSetKey.TYPES, getParserLanguage());
+ return types.toArray(new String[types.size()]);
}
- /*
- * @see org.eclipse.cdt.core.model.ICLanguageKeywords#getPreprocessorKeywords()
- */
+
public String[] getPreprocessorKeywords() {
- Set keywords= KeywordSets.getKeywords(KeywordSetKey.PP_DIRECTIVE, ParserLanguage.C);
- keywords= new HashSet(keywords);
+ Set keywords = new HashSet(KeywordSets.getKeywords(KeywordSetKey.PP_DIRECTIVE, getParserLanguage()));
CharArrayIntMap additionalKeywords= getScannerExtensionConfiguration().getAdditionalPreprocessorKeywords();
if (additionalKeywords != null) {
for (Iterator iterator = additionalKeywords.toList().iterator(); iterator.hasNext(); ) {
@@ -227,6 +230,7 @@ public abstract class AbstractCLanguage extends AbstractLanguage implements ICLa
keywords.add(new String(name));
}
}
- return (String[]) keywords.toArray(new String[keywords.size()]);
+ return keywords.toArray(new String[keywords.size()]);
}
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/AbstractCPPLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/AbstractCPPLanguage.java
deleted file mode 100644
index c744759ce1b..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/AbstractCPPLanguage.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. 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:
- * Anton Leherbauer (Wind River Systems) - initial API and implementation
- * Markus Schorn (Wind River Systems)
- *******************************************************************************/
-package org.eclipse.cdt.core.dom.parser.cpp;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.cdt.core.dom.ICodeReaderFactory;
-import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
-import org.eclipse.cdt.core.dom.ast.IASTName;
-import org.eclipse.cdt.core.dom.ast.IASTNode;
-import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
-import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
-import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
-import org.eclipse.cdt.core.dom.parser.ISourceCodeParser;
-import org.eclipse.cdt.core.index.IIndex;
-import org.eclipse.cdt.core.model.AbstractLanguage;
-import org.eclipse.cdt.core.model.ICLanguageKeywords;
-import org.eclipse.cdt.core.model.IContributedModelBuilder;
-import org.eclipse.cdt.core.model.ITranslationUnit;
-import org.eclipse.cdt.core.parser.CodeReader;
-import org.eclipse.cdt.core.parser.IParserLogService;
-import org.eclipse.cdt.core.parser.IScanner;
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.core.parser.KeywordSetKey;
-import org.eclipse.cdt.core.parser.ParserLanguage;
-import org.eclipse.cdt.core.parser.ParserMode;
-import org.eclipse.cdt.core.parser.util.CharArrayIntMap;
-import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser;
-import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
-import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
-import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
-import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory;
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * Abstract C++ language. Derived classes need only implement
- * {@link getScannerExtensionConfiguration()} and
- * {@link getParserExtensionConfiguration()}.
- *
- *
- * 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.
- *
- *
- * @see IScannerExtensionConfiguration
- * @see ICPPParserExtensionConfiguration
- *
- * @since 4.0
- */
-public abstract class AbstractCPPLanguage extends AbstractLanguage implements ICLanguageKeywords {
-
- protected static class NameCollector extends CPPASTVisitor {
- {
- shouldVisitNames= true;
- }
-
- private List nameList= new ArrayList();
-
- public int visit(IASTName name) {
- nameList.add(name);
- return PROCESS_CONTINUE;
- }
-
- public IASTName[] getNames() {
- return (IASTName[]) nameList.toArray(new IASTName[nameList.size()]);
- }
- }
-
- public Object getAdapter(Class adapter) {
- if (adapter == IPDOMLinkageFactory.class) {
- return new PDOMCPPLinkageFactory();
- }
- return super.getAdapter(adapter);
- }
-
- public IASTTranslationUnit getASTTranslationUnit(CodeReader reader, IScannerInfo scanInfo,
- ICodeReaderFactory codeReaderFactory, IIndex index,IParserLogService log) throws CoreException {
- return getASTTranslationUnit(reader, scanInfo, codeReaderFactory, index, 0, log);
- }
-
- public IASTTranslationUnit getASTTranslationUnit(CodeReader reader, IScannerInfo scanInfo,
- ICodeReaderFactory codeReaderFactory, IIndex index, int options, IParserLogService log) throws CoreException {
-
- IScanner scanner= createScanner(reader, scanInfo, codeReaderFactory, log);
- scanner.setScanComments((options & OPTION_ADD_COMMENTS) != 0);
- ISourceCodeParser parser= createParser(scanner, log, index, false, options);
-
- // Parse
- IASTTranslationUnit ast= parser.parse();
- return ast;
- }
-
- public IASTCompletionNode getCompletionNode(CodeReader reader, IScannerInfo scanInfo,
- ICodeReaderFactory fileCreator, IIndex index, IParserLogService log, int offset) throws CoreException {
- IScanner scanner= createScanner(reader, scanInfo, fileCreator, log);
- scanner.setContentAssistMode(offset);
-
- ISourceCodeParser parser= createParser(scanner, log, index, true, 0);
-
- // Run the parse and return the completion node
- parser.parse();
- IASTCompletionNode node= parser.getCompletionNode();
- return node;
- }
-
- public IASTName[] getSelectedNames(IASTTranslationUnit ast, int start, int length) {
- IASTNode selectedNode= ast.selectNodeForLocation(ast.getFilePath(), start, length);
-
- if (selectedNode == null)
- return new IASTName[0];
-
- if (selectedNode instanceof IASTName)
- return new IASTName[] { (IASTName) selectedNode };
-
- NameCollector collector= new NameCollector();
- selectedNode.accept(collector);
- return collector.getNames();
- }
-
- public IContributedModelBuilder createModelBuilder(ITranslationUnit tu) {
- // Use the default CDT model builder
- return null;
- }
-
- /**
- * Create the scanner to be used with the parser.
- *
- * @param reader the code reader for the main file
- * @param scanInfo the scanner information (macros, include pathes)
- * @param fileCreator the code reader factory for inclusions
- * @param log the log for debugging
- * @return an instance of IScanner
- */
- protected IScanner createScanner(CodeReader reader, IScannerInfo scanInfo, ICodeReaderFactory fileCreator, IParserLogService log) {
- return new CPreprocessor(reader, scanInfo, ParserLanguage.CPP, log, getScannerExtensionConfiguration(), fileCreator);
- }
-
- /**
- * Create the parser.
- *
- * @param scanner the IScanner to get tokens from
- * @param log the parser log service
- * @param index the index to help resolve bindings
- * @param forCompletion whether the parser is used for code completion
- * @param options for valid options see {@link AbstractLanguage#getASTTranslationUnit(CodeReader, IScannerInfo, ICodeReaderFactory, IIndex, int, IParserLogService)}
- * @return an instance of ISourceCodeParser
- */
- protected ISourceCodeParser createParser(IScanner scanner, IParserLogService log, IIndex index, boolean forCompletion, int options) {
- ParserMode mode= null;
- if (forCompletion) {
- mode= ParserMode.COMPLETION_PARSE;
- }
- else if ((options & OPTION_SKIP_FUNCTION_BODIES) != 0) {
- mode= ParserMode.STRUCTURAL_PARSE;
- }
- else {
- mode= ParserMode.COMPLETE_PARSE;
- }
- return new GNUCPPSourceParser(scanner, mode, log, getParserExtensionConfiguration(), index);
- }
-
- /**
- * @return the scanner extension configuration for this language, may not
- * return null
- */
- protected abstract IScannerExtensionConfiguration getScannerExtensionConfiguration();
-
- /**
- * @return the parser extension configuration for this language, may not
- * return null
- */
- protected abstract AbstractCPPParserExtensionConfiguration getParserExtensionConfiguration();
-
- /*
- * @see org.eclipse.cdt.core.model.ICLanguageKeywords#getKeywords()
- */
- public String[] getKeywords() {
- Set keywords= KeywordSets.getKeywords(KeywordSetKey.KEYWORDS, ParserLanguage.CPP);
- keywords= new HashSet(keywords);
- CharArrayIntMap additionalKeywords= getScannerExtensionConfiguration().getAdditionalKeywords();
- if (additionalKeywords != null) {
- for (Iterator iterator = additionalKeywords.toList().iterator(); iterator.hasNext(); ) {
- char[] name = (char[]) iterator.next();
- keywords.add(new String(name));
- }
- }
- return (String[]) keywords.toArray(new String[keywords.size()]);
- }
-
- /*
- * @see org.eclipse.cdt.core.model.ICLanguageKeywords#getBuiltinTypes()
- */
- public String[] getBuiltinTypes() {
- Set types= KeywordSets.getKeywords(KeywordSetKey.TYPES, ParserLanguage.CPP);
- return (String[]) types.toArray(new String[types.size()]);
- }
-
- /*
- * @see org.eclipse.cdt.core.model.ICLanguageKeywords#getPreprocessorKeywords()
- */
- public String[] getPreprocessorKeywords() {
- Set keywords= KeywordSets.getKeywords(KeywordSetKey.PP_DIRECTIVE, ParserLanguage.CPP);
- keywords= new HashSet(keywords);
- CharArrayIntMap additionalKeywords= getScannerExtensionConfiguration().getAdditionalPreprocessorKeywords();
- if (additionalKeywords != null) {
- for (Iterator iterator = additionalKeywords.toList().iterator(); iterator.hasNext(); ) {
- char[] name = (char[]) iterator.next();
- keywords.add(new String(name));
- }
- }
- return (String[]) keywords.toArray(new String[keywords.size()]);
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java
index 1f6e5b7ab76..e471ac4c739 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java
@@ -10,8 +10,9 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.parser.token;
+import java.util.HashMap;
import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
@@ -25,16 +26,16 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
*/
public class KeywordSets {
- public static Set getKeywords( KeywordSetKey kind, ParserLanguage language )
+ public static Set getKeywords( KeywordSetKey kind, ParserLanguage language )
{
if( kind == KeywordSetKey.EMPTY )
return EMPTY_TABLE;
if( kind == KeywordSetKey.DECL_SPECIFIER_SEQUENCE )
- return (Set) DECL_SPECIFIER_SEQUENCE_TABLE.get( language );
+ return DECL_SPECIFIER_SEQUENCE_TABLE.get( language );
if( kind == KeywordSetKey.DECLARATION )
- return (Set) DECLARATION_TABLE.get( language );
+ return DECLARATION_TABLE.get( language );
if( kind == KeywordSetKey.STATEMENT )
- return (Set) STATEMENT_TABLE.get( language );
+ return STATEMENT_TABLE.get( language );
if( kind == KeywordSetKey.BASE_SPECIFIER )
return BASE_SPECIFIER_CPP;
if( kind == KeywordSetKey.MEMBER )
@@ -46,46 +47,46 @@ public class KeywordSets {
if( kind == KeywordSetKey.POST_USING )
return POST_USING_CPP;
if( kind == KeywordSetKey.FUNCTION_MODIFIER )
- return (Set) FUNCTION_MODIFIER_TABLE.get( language );
+ return FUNCTION_MODIFIER_TABLE.get( language );
if( kind == KeywordSetKey.NAMESPACE_ONLY )
return NAMESPACE_ONLY_SET;
if( kind == KeywordSetKey.MACRO )
return MACRO_ONLY;
if( kind == KeywordSetKey.PP_DIRECTIVE )
- return (Set) PP_DIRECTIVES_TABLE.get( language );
+ return PP_DIRECTIVES_TABLE.get( language );
if( kind == KeywordSetKey.EXPRESSION )
- return (Set) EXPRESSION_TABLE.get( language );
+ return EXPRESSION_TABLE.get( language );
if( kind == KeywordSetKey.ALL )
- return (Set) ALL_TABLE.get( language );
+ return ALL_TABLE.get( language );
if( kind == KeywordSetKey.KEYWORDS )
- return (Set) KEYWORDS_TABLE.get( language );
+ return KEYWORDS_TABLE.get( language );
if( kind == KeywordSetKey.TYPES )
- return (Set) TYPES_TABLE.get( language );
+ return TYPES_TABLE.get( language );
//TODO finish this
return null;
}
- private static final Set EMPTY_TABLE = new HashSet(0);
+ private static final Set EMPTY_TABLE = new HashSet(0);
- private static final Set NAMESPACE_ONLY_SET;
+ private static final Set NAMESPACE_ONLY_SET;
static
{
- NAMESPACE_ONLY_SET = new HashSet(1);
+ NAMESPACE_ONLY_SET = new HashSet(1);
NAMESPACE_ONLY_SET.add(Keywords.NAMESPACE );
}
- private static final Set MACRO_ONLY;
+ private static final Set MACRO_ONLY;
static
{
- MACRO_ONLY = new HashSet(1);
+ MACRO_ONLY = new HashSet(1);
MACRO_ONLY.add("defined()" ); //$NON-NLS-1$
}
- private static final Set DECL_SPECIFIER_SEQUENCE_C;
+ private static final Set DECL_SPECIFIER_SEQUENCE_C;
static
{
- DECL_SPECIFIER_SEQUENCE_C = new TreeSet();
+ DECL_SPECIFIER_SEQUENCE_C = new TreeSet();
DECL_SPECIFIER_SEQUENCE_C.add( Keywords.INLINE );
DECL_SPECIFIER_SEQUENCE_C.add( Keywords.AUTO);
DECL_SPECIFIER_SEQUENCE_C.add( Keywords.REGISTER);
@@ -113,10 +114,10 @@ public class KeywordSets {
DECL_SPECIFIER_SEQUENCE_C.add( Keywords.ENUM);
}
- private static final Set DECL_SPECIFIER_SEQUENCE_CPP;
+ private static final Set DECL_SPECIFIER_SEQUENCE_CPP;
static
{
- DECL_SPECIFIER_SEQUENCE_CPP = new TreeSet();
+ DECL_SPECIFIER_SEQUENCE_CPP = new TreeSet();
// add all of C then remove the ones we don't need
DECL_SPECIFIER_SEQUENCE_CPP.addAll( DECL_SPECIFIER_SEQUENCE_C );
DECL_SPECIFIER_SEQUENCE_CPP.remove( Keywords._COMPLEX);
@@ -132,18 +133,18 @@ public class KeywordSets {
DECL_SPECIFIER_SEQUENCE_CPP.add( Keywords.CLASS);
}
- private static final Hashtable DECL_SPECIFIER_SEQUENCE_TABLE;
+ private static final Map> DECL_SPECIFIER_SEQUENCE_TABLE;
static
{
- DECL_SPECIFIER_SEQUENCE_TABLE = new Hashtable();
+ DECL_SPECIFIER_SEQUENCE_TABLE = new HashMap>();
DECL_SPECIFIER_SEQUENCE_TABLE.put( ParserLanguage.CPP, DECL_SPECIFIER_SEQUENCE_CPP );
DECL_SPECIFIER_SEQUENCE_TABLE.put( ParserLanguage.C, DECL_SPECIFIER_SEQUENCE_C );
}
- private static final Set DECLARATION_CPP;
+ private static final Set DECLARATION_CPP;
static
{
- DECLARATION_CPP = new TreeSet();
+ DECLARATION_CPP = new TreeSet();
DECLARATION_CPP.addAll( DECL_SPECIFIER_SEQUENCE_CPP );
DECLARATION_CPP.add( Keywords.ASM );
DECLARATION_CPP.add( Keywords.TEMPLATE );
@@ -152,26 +153,26 @@ public class KeywordSets {
DECLARATION_CPP.add( Keywords.EXPORT );
}
- private static final Set DECLARATION_C;
+ private static final Set DECLARATION_C;
static
{
- DECLARATION_C = new TreeSet();
+ DECLARATION_C = new TreeSet();
DECLARATION_C.addAll(DECL_SPECIFIER_SEQUENCE_C );
DECLARATION_C.add(Keywords.ASM );
}
- private static final Hashtable DECLARATION_TABLE;
+ private static final Map> DECLARATION_TABLE;
static
{
- DECLARATION_TABLE = new Hashtable();
+ DECLARATION_TABLE = new HashMap>();
DECLARATION_TABLE.put( ParserLanguage.CPP, DECLARATION_CPP );
DECLARATION_TABLE.put( ParserLanguage.C, DECLARATION_C );
}
- private static final Set EXPRESSION_C;
+ private static final Set EXPRESSION_C;
static
{
- EXPRESSION_C = new TreeSet();
+ EXPRESSION_C = new TreeSet();
EXPRESSION_C.add( Keywords.CHAR );
EXPRESSION_C.add( Keywords.WCHAR_T);
EXPRESSION_C.add( Keywords.SHORT);
@@ -185,10 +186,10 @@ public class KeywordSets {
}
- private static final Set EXPRESSION_CPP;
+ private static final Set EXPRESSION_CPP;
static
{
- EXPRESSION_CPP = new TreeSet(EXPRESSION_C);
+ EXPRESSION_CPP = new TreeSet(EXPRESSION_C);
EXPRESSION_CPP.add( Keywords.BOOL );
EXPRESSION_CPP.add( Keywords.NEW );
EXPRESSION_CPP.add( Keywords.DELETE );
@@ -205,18 +206,18 @@ public class KeywordSets {
EXPRESSION_CPP.add( Keywords.THROW );
}
- private static final Hashtable EXPRESSION_TABLE;
+ private static final Map> EXPRESSION_TABLE;
static
{
- EXPRESSION_TABLE = new Hashtable();
+ EXPRESSION_TABLE = new HashMap>();
EXPRESSION_TABLE.put( ParserLanguage.CPP, EXPRESSION_CPP );
EXPRESSION_TABLE.put( ParserLanguage.C, EXPRESSION_C );
}
- private static final Set STATEMENT_C;
+ private static final Set STATEMENT_C;
static
{
- STATEMENT_C= new TreeSet();
+ STATEMENT_C= new TreeSet();
STATEMENT_C.addAll( DECLARATION_C );
STATEMENT_C.addAll( EXPRESSION_C );
STATEMENT_C.add( Keywords.FOR );
@@ -233,10 +234,10 @@ public class KeywordSets {
STATEMENT_C.add( Keywords.DO);
}
- private static final Set STATEMENT_CPP;
+ private static final Set STATEMENT_CPP;
static
{
- STATEMENT_CPP = new TreeSet( DECLARATION_CPP );
+ STATEMENT_CPP = new TreeSet( DECLARATION_CPP );
STATEMENT_CPP.addAll( EXPRESSION_CPP );
STATEMENT_CPP.add( Keywords.TRY );
STATEMENT_CPP.add( Keywords.FOR );
@@ -254,65 +255,65 @@ public class KeywordSets {
STATEMENT_CPP.add( Keywords.DO);
}
- private static final Hashtable STATEMENT_TABLE;
+ private static final Map> STATEMENT_TABLE;
static
{
- STATEMENT_TABLE = new Hashtable();
+ STATEMENT_TABLE = new HashMap>();
STATEMENT_TABLE.put( ParserLanguage.CPP, STATEMENT_CPP);
STATEMENT_TABLE.put( ParserLanguage.C, STATEMENT_C );
}
- private static final Set BASE_SPECIFIER_CPP;
+ private static final Set BASE_SPECIFIER_CPP;
static
{
- BASE_SPECIFIER_CPP = new TreeSet();
+ BASE_SPECIFIER_CPP = new TreeSet();
BASE_SPECIFIER_CPP.add(Keywords.PUBLIC);
BASE_SPECIFIER_CPP.add(Keywords.PROTECTED);
BASE_SPECIFIER_CPP.add(Keywords.PRIVATE);
BASE_SPECIFIER_CPP.add(Keywords.VIRTUAL);
}
- private static final Set CLASS_MEMBER;
+ private static final Set CLASS_MEMBER;
static
{
- CLASS_MEMBER = new TreeSet(DECL_SPECIFIER_SEQUENCE_CPP);
+ CLASS_MEMBER = new TreeSet(DECL_SPECIFIER_SEQUENCE_CPP);
CLASS_MEMBER.add(Keywords.PUBLIC);
CLASS_MEMBER.add(Keywords.PROTECTED);
CLASS_MEMBER.add(Keywords.PRIVATE);
}
- private static final Set POST_USING_CPP;
+ private static final Set POST_USING_CPP;
static
{
- POST_USING_CPP = new TreeSet();
+ POST_USING_CPP = new TreeSet();
POST_USING_CPP.add(Keywords.NAMESPACE);
POST_USING_CPP.add(Keywords.TYPENAME);
}
- private static final Set FUNCTION_MODIFIER_C = EMPTY_TABLE;
+ private static final Set FUNCTION_MODIFIER_C = EMPTY_TABLE;
- private static final Set FUNCTION_MODIFIER_CPP;
+ private static final Set FUNCTION_MODIFIER_CPP;
static
{
- FUNCTION_MODIFIER_CPP = new TreeSet( FUNCTION_MODIFIER_C );
+ FUNCTION_MODIFIER_CPP = new TreeSet( FUNCTION_MODIFIER_C );
FUNCTION_MODIFIER_CPP.add( Keywords.THROW);
FUNCTION_MODIFIER_CPP.add( Keywords.TRY );
FUNCTION_MODIFIER_CPP.add( Keywords.VOLATILE );
}
- private static final Hashtable FUNCTION_MODIFIER_TABLE;
+ private static final Map> FUNCTION_MODIFIER_TABLE;
static
{
- FUNCTION_MODIFIER_TABLE= new Hashtable(2);
+ FUNCTION_MODIFIER_TABLE= new HashMap>(2);
FUNCTION_MODIFIER_TABLE.put( ParserLanguage.CPP, FUNCTION_MODIFIER_CPP );
FUNCTION_MODIFIER_TABLE.put( ParserLanguage.C, FUNCTION_MODIFIER_C );
}
- private static final Set PP_DIRECTIVES_C;
+ private static final Set PP_DIRECTIVES_C;
static
{
- PP_DIRECTIVES_C = new TreeSet();
+ PP_DIRECTIVES_C = new TreeSet();
PP_DIRECTIVES_C.add(Directives.POUND_BLANK);
PP_DIRECTIVES_C.add(Directives.POUND_DEFINE);
PP_DIRECTIVES_C.add(Directives.POUND_UNDEF);
@@ -330,10 +331,10 @@ public class KeywordSets {
}
- private static final Set PP_DIRECTIVES_CPP;
+ private static final Set PP_DIRECTIVES_CPP;
static
{
- PP_DIRECTIVES_CPP = new TreeSet();
+ PP_DIRECTIVES_CPP = new TreeSet();
PP_DIRECTIVES_CPP.add(Directives.POUND_BLANK);
PP_DIRECTIVES_CPP.add(Directives.POUND_DEFINE);
PP_DIRECTIVES_CPP.add(Directives.POUND_UNDEF);
@@ -349,10 +350,10 @@ public class KeywordSets {
PP_DIRECTIVES_CPP.add(Directives.POUND_ELIF);
}
- private static final Set ALL_C;
+ private static final Set ALL_C;
static
{
- ALL_C = new TreeSet(PP_DIRECTIVES_CPP);
+ ALL_C = new TreeSet(PP_DIRECTIVES_CPP);
ALL_C.add( Keywords.AUTO);
ALL_C.add( Keywords.BREAK);
ALL_C.add( Keywords.CASE);
@@ -393,10 +394,10 @@ public class KeywordSets {
ALL_C.add( Keywords._IMAGINARY);
}
- private static final Set ALL_CPP;
+ private static final Set ALL_CPP;
static
{
- ALL_CPP = new TreeSet(PP_DIRECTIVES_CPP);
+ ALL_CPP = new TreeSet(PP_DIRECTIVES_CPP);
ALL_CPP.add( Keywords.AND );
ALL_CPP.add( Keywords.AND_EQ);
ALL_CPP.add( Keywords.ASM);
@@ -473,18 +474,18 @@ public class KeywordSets {
ALL_CPP.add( Keywords.XOR_EQ);
}
- private static final Hashtable ALL_TABLE;
+ private static final Map> ALL_TABLE;
static
{
- ALL_TABLE = new Hashtable( 2 );
+ ALL_TABLE = new HashMap>( 2 );
ALL_TABLE.put( ParserLanguage.C, ALL_C );
ALL_TABLE.put( ParserLanguage.CPP, ALL_CPP );
}
- private static final Set KEYWORDS_CPP;
+ private static final Set KEYWORDS_CPP;
static
{
- KEYWORDS_CPP = new TreeSet();
+ KEYWORDS_CPP = new TreeSet();
KEYWORDS_CPP.add( Keywords.AND );
KEYWORDS_CPP.add( Keywords.AND_EQ );
KEYWORDS_CPP.add( Keywords.ASM );
@@ -552,10 +553,10 @@ public class KeywordSets {
}
- private static Set KEYWORDS_C;
+ private static Set KEYWORDS_C;
static
{
- KEYWORDS_C = new TreeSet();
+ KEYWORDS_C = new TreeSet();
KEYWORDS_C.add( Keywords.ASM );
KEYWORDS_C.add( Keywords.AUTO );
KEYWORDS_C.add( Keywords.BREAK );
@@ -586,18 +587,18 @@ public class KeywordSets {
- private static final Hashtable KEYWORDS_TABLE;
+ private static final Map> KEYWORDS_TABLE;
static
{
- KEYWORDS_TABLE = new Hashtable(2);
+ KEYWORDS_TABLE = new HashMap>(2);
KEYWORDS_TABLE.put( ParserLanguage.C, KEYWORDS_C );
KEYWORDS_TABLE.put( ParserLanguage.CPP, KEYWORDS_CPP );
}
- private static final Set TYPES_C;
+ private static final Set TYPES_C;
static
{
- TYPES_C = new TreeSet();
+ TYPES_C = new TreeSet();
TYPES_C.add( Keywords.CHAR );
TYPES_C.add( Keywords.DOUBLE );
TYPES_C.add( Keywords.FLOAT );
@@ -611,10 +612,10 @@ public class KeywordSets {
TYPES_C.add( Keywords._COMPLEX );
TYPES_C.add( Keywords._IMAGINARY );
}
- private static final Set TYPES_CPP;
+ private static final Set TYPES_CPP;
static
{
- TYPES_CPP = new TreeSet();
+ TYPES_CPP = new TreeSet();
TYPES_CPP.add( Keywords.BOOL );
TYPES_CPP.add( Keywords.CHAR );
TYPES_CPP.add( Keywords.DOUBLE );
@@ -628,18 +629,18 @@ public class KeywordSets {
TYPES_CPP.add( Keywords.WCHAR_T );
}
- private static Hashtable TYPES_TABLE;
+ private static Map> TYPES_TABLE;
static
{
- TYPES_TABLE = new Hashtable( 2 );
+ TYPES_TABLE = new HashMap>( 2 );
TYPES_TABLE.put( ParserLanguage.C, TYPES_C );
TYPES_TABLE.put( ParserLanguage.CPP, TYPES_CPP );
}
- private static Hashtable PP_DIRECTIVES_TABLE;
+ private static Map> PP_DIRECTIVES_TABLE;
static
{
- PP_DIRECTIVES_TABLE = new Hashtable( 2 );
+ PP_DIRECTIVES_TABLE = new HashMap>( 2 );
PP_DIRECTIVES_TABLE.put( ParserLanguage.C, PP_DIRECTIVES_C );
PP_DIRECTIVES_TABLE.put( ParserLanguage.CPP, PP_DIRECTIVES_CPP );
}