1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-17 22:15:23 +02:00

Restructure IASTServiceProvider & CDOM to encapsulate more the process of matching up a parse request w/an AST Service provider.

Clients should not need to figure out what provider fits them best, we can do that for them.
This commit is contained in:
John Camelon 2005-02-10 16:13:53 +00:00
parent b385ee2234
commit 4e7213552c
3 changed files with 30 additions and 43 deletions

View file

@ -9,8 +9,10 @@
* IBM - Initial API and implementation * IBM - Initial API and implementation
**********************************************************************/ **********************************************************************/
package org.eclipse.cdt.core.dom; package org.eclipse.cdt.core.dom;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.internal.core.dom.InternalASTServiceProvider; import org.eclipse.cdt.internal.core.dom.InternalASTServiceProvider;
import org.eclipse.cdt.internal.core.dom.SavedCodeReaderFactory; import org.eclipse.cdt.internal.core.dom.SavedCodeReaderFactory;
import org.eclipse.core.resources.IFile;
/** /**
* @author jcamelon * @author jcamelon
@ -18,7 +20,7 @@ import org.eclipse.cdt.internal.core.dom.SavedCodeReaderFactory;
* This class serves as the manager of the AST/DOM mechanisms for the CDT. * This class serves as the manager of the AST/DOM mechanisms for the CDT.
* It should be eventually added to CCorePlugin for startup. * It should be eventually added to CCorePlugin for startup.
*/ */
public class CDOM { public class CDOM implements IASTServiceProvider {
private CDOM() private CDOM()
{ {
@ -29,45 +31,14 @@ public class CDOM {
{ {
return instance; return instance;
} }
private IASTServiceProvider [] services = { new InternalASTServiceProvider() };
private IASTServiceProvider defaultService = new InternalASTServiceProvider();
public IASTServiceProvider[] getASTServices() {
return services; public IASTServiceProvider getASTService() {
return this;
} }
public IASTServiceProvider getDefaultASTService() {
IASTServiceProvider [] factories = getASTServices();
if( factories != null && factories.length > 0 )
return factories[0];
return null;
}
public IASTServiceProvider getASTServiceByName(String name) {
IASTServiceProvider [] factories = getASTServices();
if( factories == null || factories.length == 0 )
return null;
for( int i = 0; i < factories.length; ++i )
if( factories[i] != null && factories[i].getName().equals( name ) )
return factories[i];
return null;
}
public IASTServiceProvider getASTServiceByDialect( String dialect )
{
IASTServiceProvider [] factories = getASTServices();
if( factories == null || factories.length == 0 )
return null;
for( int i = 0; i < factories.length; ++i )
if( factories[i] != null )
{
String [] dialects = factories[i].getSupportedDialects();
if( dialects != null )
for( int j = 0; j < dialects.length; ++j )
if( dialects[j].equals( dialect ))
return factories[i];
}
return null;
}
public static final int PARSE_SAVED_RESOURCES = 0; public static final int PARSE_SAVED_RESOURCES = 0;
public static final int PARSE_WORKING_COPY_WITH_SAVED_INCLUSIONS = 1; public static final int PARSE_WORKING_COPY_WITH_SAVED_INCLUSIONS = 1;
@ -86,7 +57,26 @@ public class CDOM {
} }
return null; return null;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.IASTServiceProvider#getTranslationUnit(org.eclipse.core.resources.IFile)
*/
public IASTTranslationUnit getTranslationUnit(IFile fileToParse) throws UnsupportedDialectException {
return defaultService.getTranslationUnit(fileToParse);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.IASTServiceProvider#getTranslationUnit(org.eclipse.core.resources.IFile, org.eclipse.cdt.core.dom.ICodeReaderFactory)
*/
public IASTTranslationUnit getTranslationUnit(IFile fileToParse, ICodeReaderFactory fileCreator) throws UnsupportedDialectException {
return defaultService.getTranslationUnit(fileToParse, fileCreator );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.IASTServiceProvider#getTranslationUnit(org.eclipse.core.resources.IFile, org.eclipse.cdt.core.dom.ICodeReaderFactory, org.eclipse.cdt.core.dom.IParserConfiguration)
*/
public IASTTranslationUnit getTranslationUnit(IFile fileToParse, ICodeReaderFactory fileCreator, IParserConfiguration configuration) throws UnsupportedDialectException {
return defaultService.getTranslationUnit(fileToParse, fileCreator, configuration );
}
} }

View file

@ -22,13 +22,10 @@ public interface IASTServiceProvider {
{ {
} }
public String getName();
public IASTTranslationUnit getTranslationUnit( IFile fileToParse) throws UnsupportedDialectException; public IASTTranslationUnit getTranslationUnit( IFile fileToParse) throws UnsupportedDialectException;
public IASTTranslationUnit getTranslationUnit( IFile fileToParse, ICodeReaderFactory fileCreator )throws UnsupportedDialectException; public IASTTranslationUnit getTranslationUnit( IFile fileToParse, ICodeReaderFactory fileCreator )throws UnsupportedDialectException;
public IASTTranslationUnit getTranslationUnit( IFile fileToParse, ICodeReaderFactory fileCreator, IParserConfiguration configuration )throws UnsupportedDialectException; public IASTTranslationUnit getTranslationUnit( IFile fileToParse, ICodeReaderFactory fileCreator, IParserConfiguration configuration )throws UnsupportedDialectException;
public String [] getSupportedDialects();
} }

View file

@ -207,7 +207,7 @@ private static final String DOMAST_FILTER_GROUP_ID = "org.eclipse.cdt.ui.tests.D
IPopulateDOMASTAction action = null; IPopulateDOMASTAction action = null;
IASTTranslationUnit tu = null; IASTTranslationUnit tu = null;
try { try {
tu = CDOM.getInstance().getDefaultASTService().getTranslationUnit( tu = CDOM.getInstance().getASTService().getTranslationUnit(
aFile, aFile,
CDOM.getInstance().getCodeReaderFactory( CDOM.getInstance().getCodeReaderFactory(
CDOM.PARSE_SAVED_RESOURCES)); CDOM.PARSE_SAVED_RESOURCES));