1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Rewrite to use the new Parser ISourceElementRequestor.

This commit is contained in:
Alain Magloire 2003-08-30 05:21:06 +00:00
parent bd74b169fb
commit d3a258b4d7
5 changed files with 717 additions and 506 deletions

View file

@ -0,0 +1,56 @@
package org.eclipse.cdt.internal.ui.compare;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.DocumentRangeNode;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.graphics.Image;
/**
*
*/
class CNode extends DocumentRangeNode implements ITypedElement {
private CNode fParent;
public CNode(CNode parent, int type, String id, IDocument doc, int start, int length) {
super(type, id, doc, start, length);
fParent= parent;
if (parent != null) {
parent.addChild(this);
}
}
public CNode(CNode parent, int type, String id, int start, int length) {
this(parent, type, id, parent.getDocument(), start, length);
}
/**
* @see ITypedInput#getName
*/
public String getName() {
return getId();
}
/**
* @see ITypedInput#getType
*/
public String getType() {
return "c2"; //$NON-NLS-1$
}
/**
* @see ITypedInput#getImage
*/
public Image getImage() {
ImageDescriptor descriptor = CElementImageProvider.getImageDescriptor(getTypeCode());
return CUIPlugin.getImageDescriptorRegistry().get(descriptor);
}
}

View file

@ -0,0 +1,309 @@
package org.eclipse.cdt.internal.ui.compare;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.util.Stack;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
import org.eclipse.jface.text.IDocument;
/**
*
*/
public class CParseTreeBuilder extends SourceElementRequestorAdapter {
private Stack fStack = new Stack();
private IDocument fDocument;
/**
* Syntax Error.
*/
public class ParseError extends Error {
}
public CParseTreeBuilder(CNode root, IDocument doc) {
fDocument = doc;
fStack.clear();
fStack.push(root);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
*/
public void enterClassSpecifier(IASTClassSpecifier classSpecification) {
String name = classSpecification.getName();
int start = classSpecification.getStartingOffset();
if (classSpecification.getClassKind().equals(ASTClassKind.CLASS)) {
push(ICElement.C_CLASS, name, start);
} else if (classSpecification.getClassKind().equals(ASTClassKind.STRUCT)) {
push(ICElement.C_STRUCT, name, start);
} else if (classSpecification.getClassKind().equals(ASTClassKind.UNION)) {
push(ICElement.C_UNION, name, start);
} else if (classSpecification.getClassKind().equals(ASTClassKind.ENUM)) {
push(ICElement.C_ENUMERATION, name, start);
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {
push(ICElement.C_UNIT, "Translation Unit", 0);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void enterFunctionBody(IASTFunction function) {
push(ICElement.C_FUNCTION, function.getName(), function.getStartingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void enterInclusion(IASTInclusion inclusion) {
push(ICElement.C_INCLUDE, inclusion.getName(), inclusion.getStartingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
*/
public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec) {
push(ICElement.C_STORAGE_EXTERN, linkageSpec.getLinkageString(), linkageSpec.getStartingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void enterMethodBody(IASTMethod method) {
push(ICElement.C_METHOD, method.getName(), method.getStartingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
push(ICElement.C_NAMESPACE, namespaceDefinition.getName(), namespaceDefinition.getStartingOffset());;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
*/
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) {
push(ICElement.C_TEMPLATE_VARIABLE, "export", declaration.getStartingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
*/
public void enterTemplateInstantiation(IASTTemplateInstantiation instantiation) {
push(ICElement.C_TEMPLATE_VARIABLE, "template instanciation", instantiation.getStartingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
*/
public void enterTemplateSpecialization(IASTTemplateSpecialization specialization) {
push(ICElement.C_TEMPLATE_VARIABLE, "template specialization", specialization.getStartingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
*/
public void exitClassSpecifier(IASTClassSpecifier classSpecification) {
pop(classSpecification.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void exitCompilationUnit(IASTCompilationUnit translationUnit) {
pop(fDocument.getLength());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void exitFunctionBody(IASTFunction function) {
pop(function.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void exitInclusion(IASTInclusion inclusion) {
pop(inclusion.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
*/
public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec) {
pop(linkageSpec.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void exitMethodBody(IASTMethod method) {
pop(method.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
pop(namespaceDefinition.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
*/
public void exitTemplateDeclaration(IASTTemplateDeclaration declaration) {
pop(declaration.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
*/
public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) {
pop(instantiation.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
*/
public void exitTemplateSpecialization(IASTTemplateSpecialization specialization) {
pop(specialization.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier)
*/
public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration) {
push(ICElement.C_ENUMERATION, enumeration.getName(), enumeration.getStartingOffset());
pop(enumeration.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void acceptFunctionDeclaration(IASTFunction function) {
push(ICElement.C_FUNCTION_DECLARATION, function.getName(), function.getStartingOffset());
pop(function.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMacro(org.eclipse.cdt.core.parser.ast.IASTMacro)
*/
public void acceptMacro(IASTMacro macro) {
push(ICElement.C_MACRO, macro.getName(), macro.getStartingOffset());
pop(macro.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void acceptMethodDeclaration(IASTMethod method) {
push(ICElement.C_METHOD_DECLARATION, method.getName(), method.getStartingOffset());
pop(method.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptProblem(org.eclipse.cdt.core.parser.IProblem)
*/
public void acceptProblem(IProblem problem) {
int problemId = problem.getID();
if (problem.isError() && ((problemId & IProblem.Syntax) != 0)) {
throw new ParseError();
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedefDeclaration(org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration)
*/
public void acceptTypedefDeclaration(IASTTypedefDeclaration typedef) {
push(ICElement.C_TYPEDEF, typedef.getName(), typedef.getStartingOffset());
pop(typedef.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration)
*/
public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration) {
push(ICElement.C_USING, usageDeclaration.usingTypeName(), usageDeclaration.getStartingOffset());
pop(usageDeclaration.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDirective(org.eclipse.cdt.core.parser.ast.IASTUsingDirective)
*/
public void acceptUsingDirective(IASTUsingDirective usageDirective) {
push(ICElement.C_USING, usageDirective.getNamespaceName(), usageDirective.getStartingOffset());
pop(usageDirective.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariable(org.eclipse.cdt.core.parser.ast.IASTVariable)
*/
public void acceptVariable(IASTVariable variable) {
push(ICElement.C_VARIABLE, variable.getName(), variable.getStartingOffset());
pop(variable.getEndingOffset());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
*/
public void acceptField(IASTField field) {
push(ICElement.C_FIELD, field.getName(), field.getStartingOffset());
pop(field.getEndingOffset());
}
private CNode getCurrentContainer() {
return (CNode) fStack.peek();
}
/**
* Adds a new JavaNode with the given type and name to the current container.
*/
private void push(int type, String name, int declarationStart) {
fStack.push(new CNode(getCurrentContainer(), type, name, declarationStart, 0));
}
/**
* Closes the current Java node by setting its end position
* and pops it off the stack.
*/
private void pop(int declarationEnd) {
CNode current = getCurrentContainer();
if (current.getTypeCode() == ICElement.C_UNIT) {
current.setAppendPosition(declarationEnd + 1);
} else {
current.setAppendPosition(declarationEnd);
}
current.setLength(declarationEnd - current.getRange().getOffset() + 1);
fStack.pop();
}
}

View file

@ -4,134 +4,127 @@ package org.eclipse.cdt.internal.ui.compare;
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import org.eclipse.swt.graphics.Image;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.parser.ScannerInfo;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.compare.IEditableContent;
import org.eclipse.compare.IStreamContentAccessor;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.Differencer;
import org.eclipse.compare.structuremergeviewer.DocumentRangeNode;
import org.eclipse.compare.structuremergeviewer.IDiffContainer;
import org.eclipse.compare.structuremergeviewer.IStructureComparator;
import org.eclipse.compare.structuremergeviewer.IStructureCreator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.Position;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.internal.parser.CStructurizer;
import org.eclipse.cdt.internal.parser.IStructurizerCallback;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.DocumentInputStream;
import org.eclipse.cdt.ui.CUIPlugin;
/**
*
*/
public class CStructureCreator implements IStructureCreator {
public class CStructureCreator implements IStructureCreator {
private static final String NAME= "CStructureCreator.name";
private static final String NAME = "CStructureCreator.name";
public CStructureCreator() {
}
/**
* @see IStructureCreator#getTitle
*/
*/
public String getName() {
return CUIPlugin.getResourceString(NAME);
}
/**
* @see IStructureCreator#getStructure
*/
*/
public IStructureComparator getStructure(Object input) {
String s= null;
String s = null;
if (input instanceof IStreamContentAccessor) {
try {
s= readString(((IStreamContentAccessor) input).getContents());
} catch(CoreException ex) {
s = readString(((IStreamContentAccessor) input).getContents());
} catch (CoreException ex) {
}
}
Document doc= new Document(s != null ? s : "");
CNode root= new CNode(null, ICElement.C_UNIT, "root", doc, 0, 0);
DocumentInputStream is= new DocumentInputStream(doc);
IStructurizerCallback callback= new CNodeTreeConstructor(root, doc);
if (s == null) {
s = new String();
}
Document doc = new Document(s);
CNode root = new CNode(null, ICElement.C_UNIT, "root", doc, 0, 0);
ISourceElementRequestor builder = new CParseTreeBuilder(root, doc);
try {
if (CCorePlugin.getDefault().useNewParser()) {
// new parser
ComparatorModelBuilder modelBuilder = new ComparatorModelBuilder(callback, (s != null ? s : ""));
modelBuilder.parse();
} else {
CStructurizer.getCStructurizer().parse(callback, is);
}
} catch (NodeConstructorError e) {
System.out.println("Parse error: " + e);
return null;
} catch (IOException e) {
return null;
IScanner scanner =
ParserFactory.createScanner(new StringReader(s), "code", new ScannerInfo(), ParserMode.QUICK_PARSE, builder);
IParser parser = ParserFactory.createParser(scanner, builder, ParserMode.QUICK_PARSE);
parser.parse();
} catch (Exception e) {
// What to do when error ?
// The CParseTreeBuilder will throw CParseTreeBuilder.ParseError
// for acceptProblem.
}
return root;
}
}
/**
* @see IStructureCreator#canSave
*/
*/
public boolean canSave() {
return true;
}
/**
* @see IStructureCreator#locate
*/
*/
public IStructureComparator locate(Object path, Object source) {
return null;
}
/**
* @see IStructureCreator#canRewriteTree
*/
*/
public boolean canRewriteTree() {
return false;
}
/**
* @see IStructureCreator#rewriteTree
*/
*/
public void rewriteTree(Differencer differencer, IDiffContainer root) {
}
}
/**
* @see IStructureCreator#save
*/
*/
public void save(IStructureComparator structure, Object input) {
if (input instanceof IEditableContent && structure instanceof CNode) {
IDocument doc= ((CNode)structure).getDocument();
IEditableContent bca= (IEditableContent) input;
String c= doc.get();
IDocument doc = ((CNode) structure).getDocument();
IEditableContent bca = (IEditableContent) input;
String c = doc.get();
bca.setContent(c.getBytes());
}
}
/**
* @see IStructureCreator#getContents
*/
public String getContents(Object node, boolean ignoreWhitespace) {
if (node instanceof IStreamContentAccessor) {
IStreamContentAccessor sca= (IStreamContentAccessor) node;
IStreamContentAccessor sca = (IStreamContentAccessor) node;
try {
return readString(sca.getContents());
} catch (CoreException ex) {
@ -140,166 +133,24 @@ public class CStructureCreator implements IStructureCreator {
return null;
}
private static class CNode extends DocumentRangeNode implements ITypedElement {
private String fImageKey;
private CNode fParent;
private int fCode;
public CNode(CNode parent, int type, String id, IDocument doc, int start, int length) {
super(type, id, doc, start, length);
fCode = type;
fImageKey= CPluginImages.IMG_OBJS_STRUCT;
fParent= parent;
}
/**
* Returns the type code of this node.
* The type code is uninterpreted client data which can be set in the constructor.
*
* @return the type code of this node
*/
public int getTypeCode() {
return fCode;
}
public void setTypeCode(int code) {
fCode = code;
}
public CNode getParent() {
return fParent;
}
/**
* @see ITypedInput#getName
*/
public String getName() {
return getId();
}
/**
* @see ITypedInput#getType
*/
public String getType() {
return "c2";
}
/**
* @see ITypedInput#getImage
*/
public Image getImage() {
if (fImageKey != null) {
return CPluginImages.get(fImageKey);
}
return null;
}
};
private static class NodeConstructorError extends Error {
}
private static class CNodeTreeConstructor implements IStructurizerCallback {
private CNode fRoot;
private CNode fCurrent;
private IDocument fDocument;
public CNodeTreeConstructor(CNode root, IDocument doc) {
fRoot= root;
fCurrent= root;
fDocument= doc;
}
private CNode getParent(CNode node) {
CNode parent= node.getParent();
if (parent == null) {
throw new NodeConstructorError();
}
return parent;
}
private final int fixLength(int startPos, int endPos) {
if (endPos < startPos) {
return 0;
} else {
return endPos - startPos + 1;
}
}
public void includeDecl(String name, int startPos, int endPos, int startLine, int endLine) {
CNode node= new CNode(fRoot, ICElement.C_INCLUDE, name, fDocument, startPos, fixLength(startPos, endPos));
fRoot.addChild(node);
}
public void defineDecl(String name, int startPos, int endPos, int startLine, int endLine) {
CNode node= new CNode(fRoot, ICElement.C_MACRO, name, fDocument, startPos, fixLength(startPos, endPos));
fRoot.addChild(node);
}
public void functionDeclBegin(String name, int nameStartPos, int nameEndPos,
int declStartPos, int startLine, int type, int modifiers) {
CNode node= new CNode(fCurrent, ICElement.C_FUNCTION, name, fDocument, declStartPos, 0);
fCurrent.addChild(node);
fCurrent= node;
}
public void functionDeclEnd(int declEndPos, int endLine, boolean prototype) {
if(prototype) {
fCurrent.setTypeCode(ICElement.C_FUNCTION_DECLARATION);
}
Position p= fCurrent.getRange();
fCurrent.setLength(fixLength(p.getOffset(), declEndPos));
fCurrent= getParent(fCurrent);
}
public void fieldDecl(String name, int nameStartPos, int nameEndPos, int declStartPos,
int declEndPos, int startLine, int endLine, int modifiers) {
CNode node= new CNode(fCurrent, ICElement.C_FIELD, name, fDocument, declStartPos, fixLength(declStartPos, declEndPos));
fCurrent.addChild(node);
}
public void structDeclBegin(String name, int kind, int nameStartPos, int nameEndPos,
int declStartPos, int startLine, int modifiers) {
CNode node= new CNode(fCurrent, kind, name, fDocument, declStartPos, 0);
fCurrent.addChild(node);
fCurrent= node;
}
public void structDeclEnd(int declEndPos, int endLine) {
Position p= fCurrent.getRange();
fCurrent.setLength(fixLength(p.getOffset(), declEndPos));
fCurrent= getParent(fCurrent);
}
public void superDecl(String name) {
}
public void reportError(Throwable throwable) {
throw new NodeConstructorError();
}
}
/**
* Returns null if an error occurred.
*/
private static String readString(InputStream is) {
if (is == null)
return null;
BufferedReader reader= null;
BufferedReader reader = null;
try {
StringBuffer buffer= new StringBuffer();
char[] part= new char[2048];
int read= 0;
reader= new BufferedReader(new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
char[] part = new char[2048];
int read = 0;
reader = new BufferedReader(new InputStreamReader(is));
while ((read= reader.read(part)) != -1)
while ((read = reader.read(part)) != -1)
buffer.append(part, 0, read);
return buffer.toString();
} catch (IOException ex) {
} finally {
if (reader != null) {
@ -311,5 +162,5 @@ public class CStructureCreator implements IStructureCreator {
}
return null;
}
}

View file

@ -1,300 +0,0 @@
/*******************************************************************************
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QnX Software Systems - initial implementation base on code from rational/IBM
******************************************************************************/
package org.eclipse.cdt.internal.ui.compare;
import java.io.StringReader;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.ClassKey;
import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.dom.Declaration;
import org.eclipse.cdt.internal.core.dom.Declarator;
import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier;
import org.eclipse.cdt.internal.core.dom.IOffsetable;
import org.eclipse.cdt.internal.core.dom.Inclusion;
import org.eclipse.cdt.internal.core.dom.Macro;
import org.eclipse.cdt.internal.core.dom.NamespaceDefinition;
import org.eclipse.cdt.internal.core.dom.ParameterDeclarationClause;
import org.eclipse.cdt.internal.core.dom.SimpleDeclaration;
import org.eclipse.cdt.internal.core.dom.TemplateDeclaration;
import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.dom.TypeSpecifier;
import org.eclipse.cdt.internal.core.parser.ScannerInfo;
import org.eclipse.cdt.internal.parser.IStructurizerCallback;
/**
* @author alain
* TODO: this should be remove when the new parser provides proper callbacks.
*
*/
public class ComparatorModelBuilder {
IStructurizerCallback callback;
String code;
/**
*/
public ComparatorModelBuilder(IStructurizerCallback cb, String buffer) {
callback = cb;
code = buffer;
}
public void parse() {
DOMBuilder domBuilder = new DOMBuilder();
try {
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), "junk", new ScannerInfo(), ParserMode.QUICK_PARSE, domBuilder ), domBuilder, ParserMode.QUICK_PARSE);
parser.parse();
} catch (Exception e) {
callback.reportError(e);
}
generateModelElements(domBuilder.getTranslationUnit());
}
protected void generateModelElements(TranslationUnit tu) {
Iterator i = tu.iterateOffsetableElements();
while (i.hasNext()) {
IOffsetable offsetable = (IOffsetable) i.next();
if (offsetable instanceof Inclusion) {
createInclusion((Inclusion) offsetable);
} else if (offsetable instanceof Macro) {
createMacro((Macro) offsetable);
} else if (offsetable instanceof Declaration) {
generateModelElements((Declaration) offsetable);
}
}
}
protected void generateModelElements(Declaration declaration) {
// Namespace Definition
if (declaration instanceof NamespaceDefinition) {
NamespaceDefinition nsDef = (NamespaceDefinition) declaration;
createNamespace(nsDef);
List nsDeclarations = nsDef.getDeclarations();
Iterator nsDecls = nsDeclarations.iterator();
while (nsDecls.hasNext()) {
Declaration subNsDeclaration = (Declaration) nsDecls.next();
generateModelElements(subNsDeclaration);
}
} // end Namespace Definition
// Simple Declaration
if (declaration instanceof SimpleDeclaration) {
SimpleDeclaration simpleDeclaration = (SimpleDeclaration) declaration;
/*-------------------------------------------
* Checking the type if it is a composite one
*-------------------------------------------*/
TypeSpecifier typeSpec = simpleDeclaration.getTypeSpecifier();
// Enumeration
if (typeSpec instanceof EnumerationSpecifier) {
EnumerationSpecifier enumSpecifier = (EnumerationSpecifier) typeSpec;
createEnumeration(enumSpecifier);
} else if (typeSpec instanceof ClassSpecifier) { // Structure
ClassSpecifier classSpecifier = (ClassSpecifier) typeSpec;
createClass(simpleDeclaration, classSpecifier, false);
// create the sub declarations
List declarations = classSpecifier.getDeclarations();
Iterator j = declarations.iterator();
while (j.hasNext()) {
Declaration subDeclaration = (Declaration) j.next();
generateModelElements(subDeclaration);
} // end while j
}
/*-----------------------------------------
* Create declarators of simple declaration
* ----------------------------------------*/
List declarators = simpleDeclaration.getDeclarators();
Iterator d = declarators.iterator();
while (d.hasNext()) {
Declarator declarator = (Declarator) d.next();
createElement(simpleDeclaration, declarator);
} // end while d
} // end if SimpleDeclaration
// Template Declaration
if (declaration instanceof TemplateDeclaration) {
TemplateDeclaration templateDeclaration = (TemplateDeclaration) declaration;
SimpleDeclaration simpleDeclaration = (SimpleDeclaration) templateDeclaration.getDeclarations().get(0);
TypeSpecifier typeSpec = simpleDeclaration.getTypeSpecifier();
if (typeSpec instanceof ClassSpecifier) {
ClassSpecifier classSpecifier = (ClassSpecifier) typeSpec;
createClass(simpleDeclaration, classSpecifier, true);
// create the sub declarations
List declarations = classSpecifier.getDeclarations();
Iterator j = declarations.iterator();
while (j.hasNext()) {
Declaration subDeclaration = (Declaration) j.next();
generateModelElements(subDeclaration);
} // end while j
}
List declarators = simpleDeclaration.getDeclarators();
Iterator d = declarators.iterator();
while (d.hasNext()) {
Declarator declarator = (Declarator) d.next();
createTemplateElement(templateDeclaration, simpleDeclaration, declarator);
} // end while d
} // end Template Declaration
}
private void createElement(SimpleDeclaration simpleDeclaration, Declarator declarator) {
// typedef
if (simpleDeclaration.getDeclSpecifier().isTypedef()) {
createTypeDef(declarator, simpleDeclaration);
} else {
ParameterDeclarationClause pdc = declarator.getParms();
if (pdc == null) {
createVariableSpecification(simpleDeclaration, declarator);
} else {
createFunctionSpecification(simpleDeclaration, declarator, pdc, false);
}
}
}
private void createTemplateElement(
TemplateDeclaration templateDeclaration,
SimpleDeclaration simpleDeclaration,
Declarator declarator) {
// TODO: no template in the old parser
ParameterDeclarationClause pdc = declarator.getParms();
if (pdc != null) {
createFunctionSpecification(simpleDeclaration, declarator, pdc, true);
}
}
private void createInclusion(Inclusion inclusion) {
callback.includeDecl(inclusion.getName(), inclusion.getStartingOffset(), inclusion.getTotalLength(), 0, 0);
}
private void createMacro(Macro macro) {
callback.defineDecl(macro.getName(), macro.getStartingOffset(), macro.getTotalLength(), 0, 0);
}
private void createNamespace(NamespaceDefinition nsDef) {
// TODO: the old parser callback does not know about namespace.
}
private void createEnumeration(EnumerationSpecifier enumSpecifier) {
callback.structDeclBegin(
enumSpecifier.getName().toString(),
ICElement.C_ENUMERATION,
enumSpecifier.getNameOffset(),
enumSpecifier.getName().length(),
enumSpecifier.getStartingOffset(),
0,
0);
callback.structDeclEnd(enumSpecifier.getTotalLength(), 0);
}
private void createClass(SimpleDeclaration simpleDeclaration, ClassSpecifier classSpecifier, boolean isTemplate) {
// create element
String className = (classSpecifier.getName() == null) ? "" : classSpecifier.getName().toString();
int kind;
switch (classSpecifier.getClassKey()) {
case ClassKey.t_class :
kind = ICElement.C_CLASS;
break;
case ClassKey.t_struct :
kind = ICElement.C_STRUCT;
break;
default :
kind = ICElement.C_UNION;
break;
}
// set element position
if (classSpecifier.getName() != null) {
callback.structDeclBegin(
className,
kind,
classSpecifier.getNameOffset(),
classSpecifier.getName().length(),
classSpecifier.getStartingOffset(),
0,
0);
} else {
callback.structDeclBegin(
className,
kind,
classSpecifier.getStartingOffset(),
classSpecifier.getClassKeyImage().length(),
classSpecifier.getStartingOffset(),
0,
0);
}
callback.structDeclBegin(
className,
kind,
classSpecifier.getStartingOffset(),
classSpecifier.getClassKeyEndOffset(),
classSpecifier.getStartingOffset(),
0,
0);
callback.structDeclEnd(classSpecifier.getTotalLength(), 0);
}
private void createTypeDef(Declarator declarator, SimpleDeclaration simpleDeclaration) {
// TODO:No typedef in the old callback
String domName = (declarator.getDeclarator() != null) ? declarator.getDeclarator().getName() : declarator.getName();
String declaratorName = domName.toString();
callback.fieldDecl(
declaratorName,
declarator.getNameOffset(),
domName.length(),
simpleDeclaration.getStartingOffset(),
simpleDeclaration.getTotalLength(),
0,
0,
0);
}
private void createVariableSpecification(SimpleDeclaration simpleDeclaration, Declarator declarator) {
String domName = (declarator.getDeclarator() != null) ? declarator.getDeclarator().getName() : declarator.getName();
String declaratorName = domName.toString();
callback.fieldDecl(
declaratorName,
declarator.getNameOffset(),
domName.length(),
simpleDeclaration.getStartingOffset(),
simpleDeclaration.getTotalLength(),
0,
0,
0);
}
private void createFunctionSpecification(
SimpleDeclaration simpleDeclaration,
Declarator declarator,
ParameterDeclarationClause pdc,
boolean isTemplate) {
String domName = (declarator.getDeclarator() != null) ? declarator.getDeclarator().getName() : declarator.getName();
String declaratorName = domName.toString();
callback.functionDeclBegin(
declaratorName,
declarator.getNameOffset(),
domName.length(),
simpleDeclaration.getStartingOffset(),
0,
0,
0);
callback.functionDeclEnd(simpleDeclaration.getTotalLength(), 0, simpleDeclaration.isFunctionDefinition());
}
}

View file

@ -0,0 +1,295 @@
/*******************************************************************************
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* QnX Software Systems - initial implementation base on code from rational/IBM
******************************************************************************/
package org.eclipse.cdt.internal.ui.compare;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
/**
*
*/
public class SourceElementRequestorAdapter implements ISourceElementRequestor {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptAbstractTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration)
*/
public void acceptAbstractTypeSpecDeclaration(IASTAbstractTypeSpecifierDeclaration abstractDeclaration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptASMDefinition(org.eclipse.cdt.core.parser.ast.IASTASMDefinition)
*/
public void acceptASMDefinition(IASTASMDefinition asmDefinition) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptClassReference(org.eclipse.cdt.core.parser.ast.IASTClassReference)
*/
public void acceptClassReference(IASTClassReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
*/
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationReference(org.eclipse.cdt.core.parser.ast.IASTEnumerationReference)
*/
public void acceptEnumerationReference(IASTEnumerationReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier)
*/
public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
*/
public void acceptField(IASTField field) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFieldReference(org.eclipse.cdt.core.parser.ast.IASTFieldReference)
*/
public void acceptFieldReference(IASTFieldReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void acceptFunctionDeclaration(IASTFunction function) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionReference(org.eclipse.cdt.core.parser.ast.IASTFunctionReference)
*/
public void acceptFunctionReference(IASTFunctionReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMacro(org.eclipse.cdt.core.parser.ast.IASTMacro)
*/
public void acceptMacro(IASTMacro macro) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void acceptMethodDeclaration(IASTMethod method) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodReference(org.eclipse.cdt.core.parser.ast.IASTMethodReference)
*/
public void acceptMethodReference(IASTMethodReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptNamespaceReference(org.eclipse.cdt.core.parser.ast.IASTNamespaceReference)
*/
public void acceptNamespaceReference(IASTNamespaceReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptProblem(org.eclipse.cdt.core.parser.IProblem)
*/
public void acceptProblem(IProblem problem) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedefDeclaration(org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration)
*/
public void acceptTypedefDeclaration(IASTTypedefDeclaration typedef) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedefReference(org.eclipse.cdt.core.parser.ast.IASTTypedefReference)
*/
public void acceptTypedefReference(IASTTypedefReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration)
*/
public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDirective(org.eclipse.cdt.core.parser.ast.IASTUsingDirective)
*/
public void acceptUsingDirective(IASTUsingDirective usageDirective) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariable(org.eclipse.cdt.core.parser.ast.IASTVariable)
*/
public void acceptVariable(IASTVariable variable) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariableReference(org.eclipse.cdt.core.parser.ast.IASTVariableReference)
*/
public void acceptVariableReference(IASTVariableReference reference) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
*/
public void enterClassSpecifier(IASTClassSpecifier classSpecification) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void enterFunctionBody(IASTFunction function) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void enterInclusion(IASTInclusion inclusion) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
*/
public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void enterMethodBody(IASTMethod method) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
*/
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
*/
public void enterTemplateInstantiation(IASTTemplateInstantiation instantiation) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
*/
public void enterTemplateSpecialization(IASTTemplateSpecialization specialization) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
*/
public void exitClassSpecifier(IASTClassSpecifier classSpecification) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void exitCompilationUnit(IASTCompilationUnit compilationUnit) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void exitFunctionBody(IASTFunction function) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void exitInclusion(IASTInclusion inclusion) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
*/
public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void exitMethodBody(IASTMethod method) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
*/
public void exitTemplateDeclaration(IASTTemplateDeclaration declaration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
*/
public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
*/
public void exitTemplateSpecialization(IASTTemplateSpecialization specialization) {
}
}