1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fixed Bug 92806 - Clean up C & C++ Syntax AST Nodes for array usage.

This commit is contained in:
John Camelon 2005-04-28 15:55:18 +00:00
parent 3c46b1d4bc
commit 3bdeb43cf3
31 changed files with 147 additions and 1125 deletions

View file

@ -13,6 +13,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier;
import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -20,47 +21,17 @@ import org.eclipse.cdt.core.dom.ast.IASTInitializer;
public class CASTArrayDeclarator extends CASTDeclarator implements public class CASTArrayDeclarator extends CASTDeclarator implements
IASTArrayDeclarator { IASTArrayDeclarator {
private int currentIndex = 0;
private void removeNullArrayModifiers() {
int nullCount = 0;
for( int i = 0; i < arrayMods.length; ++i )
if( arrayMods[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTArrayModifier [] old = arrayMods;
int newSize = old.length - nullCount;
arrayMods = new IASTArrayModifier[ newSize ];
for( int i = 0; i < newSize; ++i )
arrayMods[i] = old[i];
currentIndex = newSize;
}
private IASTArrayModifier [] arrayMods = null; private IASTArrayModifier [] arrayMods = null;
private static final int DEFAULT_ARRAYMODS_LIST_SIZE = 4;
public IASTArrayModifier[] getArrayModifiers() { public IASTArrayModifier[] getArrayModifiers() {
if( arrayMods == null ) return IASTArrayModifier.EMPTY_ARRAY; if( arrayMods == null ) return IASTArrayModifier.EMPTY_ARRAY;
removeNullArrayModifiers(); return (IASTArrayModifier[]) ArrayUtil.removeNulls( IASTArrayModifier.class, arrayMods );
return arrayMods;
} }
public void addArrayModifier(IASTArrayModifier arrayModifier) { public void addArrayModifier(IASTArrayModifier arrayModifier) {
if( arrayMods == null ) arrayMods = (IASTArrayModifier[]) ArrayUtil.append( IASTArrayModifier.class, arrayMods, arrayModifier );
{
arrayMods = new IASTArrayModifier[ DEFAULT_ARRAYMODS_LIST_SIZE ];
currentIndex = 0;
}
if( arrayMods.length == currentIndex )
{
IASTArrayModifier [] old = arrayMods;
arrayMods = new IASTArrayModifier[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
arrayMods[i] = old[i];
}
arrayMods[ currentIndex++ ] = arrayModifier;
} }
protected boolean postAccept( ASTVisitor action ){ protected boolean postAccept( ASTVisitor action ){

View file

@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -53,55 +54,26 @@ public class CASTCompositeTypeSpecifier extends CASTBaseDeclSpecifier implements
this.name = name; this.name = name;
} }
private int currentIndex = 0;
private IASTDeclaration [] declarations = null; private IASTDeclaration [] declarations = null;
private IScope scope = null; private IScope scope = null;
private static final int DEFAULT_DECLARATIONS_LIST_SIZE = 4;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#getMembers() * @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#getMembers()
*/ */
public IASTDeclaration [] getMembers() { public IASTDeclaration [] getMembers() {
if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY; if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
removeNullDeclarations(); return (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, declarations );
return declarations;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#addMemberDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration) * @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#addMemberDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration)
*/ */
public void addMemberDeclaration(IASTDeclaration declaration) { public void addMemberDeclaration(IASTDeclaration declaration) {
if( declarations == null ) declarations = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, declarations, declaration );
{
declarations = new IASTDeclaration[ DEFAULT_DECLARATIONS_LIST_SIZE ];
currentIndex = 0;
}
if( declarations.length == currentIndex )
{
IASTDeclaration [] old = declarations;
declarations = new IASTDeclaration[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
declarations[i] = old[i];
}
declarations[ currentIndex++ ] = declaration;
} }
/**
* @param decls2
*/
private void removeNullDeclarations() {
int nullCount = 0;
for( int i = 0; i < declarations.length; ++i )
if( declarations[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTDeclaration [] old = declarations;
int newSize = old.length - nullCount;
declarations = new IASTDeclaration[ newSize ];
for( int i = 0; i < newSize; ++i )
declarations[i] = old[i];
currentIndex = newSize;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#getScope() * @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#getScope()

View file

@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -22,25 +23,10 @@ import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
public class CASTCompoundStatement extends CASTNode implements public class CASTCompoundStatement extends CASTNode implements
IASTCompoundStatement, IASTAmbiguityParent { IASTCompoundStatement, IASTAmbiguityParent {
private int currentIndex = 0;
private void removeNullStatements() {
int nullCount = 0;
for( int i = 0; i < statements.length; ++i )
if( statements[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTStatement [] old = statements;
int newSize = old.length - nullCount;
statements = new IASTStatement[ newSize ];
for( int i = 0; i < newSize; ++i )
statements[i] = old[i];
currentIndex = newSize;
}
private IASTStatement [] statements = null; private IASTStatement [] statements = null;
private IScope scope = null; private IScope scope = null;
private static final int DEFAULT_STATEMENT_LIST_SIZE = 8;
/* (non-Javadoc) /* (non-Javadoc)
@ -48,27 +34,14 @@ public class CASTCompoundStatement extends CASTNode implements
*/ */
public IASTStatement[] getStatements() { public IASTStatement[] getStatements() {
if( statements == null ) return IASTStatement.EMPTY_STATEMENT_ARRAY; if( statements == null ) return IASTStatement.EMPTY_STATEMENT_ARRAY;
removeNullStatements(); return (IASTStatement[]) ArrayUtil.removeNulls( IASTStatement.class, statements );
return statements;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTCompoundStatement#addStatement(org.eclipse.cdt.core.dom.ast.IASTStatement) * @see org.eclipse.cdt.core.dom.ast.IASTCompoundStatement#addStatement(org.eclipse.cdt.core.dom.ast.IASTStatement)
*/ */
public void addStatement(IASTStatement statement) { public void addStatement(IASTStatement statement) {
if( statements == null ) statements = (IASTStatement[]) ArrayUtil.append( IASTStatement.class, statements, statement );
{
statements = new IASTStatement[ DEFAULT_STATEMENT_LIST_SIZE ];
currentIndex = 0;
}
if( statements.length == currentIndex )
{
IASTStatement [] old = statements;
statements = new IASTStatement[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
statements[i] = old[i];
}
statements[ currentIndex++ ] = statement;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -96,14 +69,14 @@ public class CASTCompoundStatement extends CASTNode implements
} }
public void replace(IASTNode child, IASTNode other) { public void replace(IASTNode child, IASTNode other) {
IASTStatement [] s = getStatements(); if( statements == null ) return;
for( int i = 0; i < s.length; ++i ) for( int i = 0; i < statements.length; ++i )
{ {
if( s[i] == child ) if( statements[i] == child )
{ {
other.setParent( s[i].getParent() ); other.setParent( statements[i].getParent() );
other.setPropertyInParent( s[i].getPropertyInParent() ); other.setPropertyInParent( statements[i].getPropertyInParent() );
s[i] = (IASTStatement) other; statements[i] = (IASTStatement) other;
break; break;
} }
} }

View file

@ -17,6 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -27,22 +28,7 @@ public class CASTDeclarator extends CASTNode implements IASTDeclarator {
private IASTName name; private IASTName name;
private IASTDeclarator nestedDeclarator; private IASTDeclarator nestedDeclarator;
private IASTPointerOperator [] pointerOps = null; private IASTPointerOperator [] pointerOps = null;
private static final int DEFAULT_PTROPS_LIST_SIZE = 2;
private int currentIndex;
private void removeNullPointers() {
int nullCount = 0;
for( int i = 0; i < pointerOps.length; ++i )
if( pointerOps[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTPointerOperator [] old = pointerOps;
int newSize = old.length - nullCount;
pointerOps = new IASTPointerOperator[ newSize ];
for( int i = 0; i < newSize; ++i )
pointerOps[i] = old[i];
currentIndex = newSize;
}
/* (non-Javadoc) /* (non-Javadoc)
@ -50,8 +36,7 @@ public class CASTDeclarator extends CASTNode implements IASTDeclarator {
*/ */
public IASTPointerOperator[] getPointerOperators() { public IASTPointerOperator[] getPointerOperators() {
if( pointerOps == null ) return IASTPointerOperator.EMPTY_ARRAY; if( pointerOps == null ) return IASTPointerOperator.EMPTY_ARRAY;
removeNullPointers(); return (IASTPointerOperator[]) ArrayUtil.removeNulls( IASTPointerOperator.class, pointerOps );
return pointerOps;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -86,19 +71,8 @@ public class CASTDeclarator extends CASTNode implements IASTDeclarator {
* @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#addPointerOperator(org.eclipse.cdt.core.dom.ast.IASTPointerOperator) * @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#addPointerOperator(org.eclipse.cdt.core.dom.ast.IASTPointerOperator)
*/ */
public void addPointerOperator(IASTPointerOperator operator) { public void addPointerOperator(IASTPointerOperator operator) {
if( pointerOps == null ) pointerOps = (IASTPointerOperator[]) ArrayUtil.append( IASTPointerOperator.class, pointerOps, operator );
{ }
pointerOps = new IASTPointerOperator[ DEFAULT_PTROPS_LIST_SIZE ];
currentIndex = 0;
}
if( pointerOps.length == currentIndex )
{
IASTPointerOperator [] old = pointerOps;
pointerOps = new IASTPointerOperator[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
pointerOps[i] = old[i];
}
pointerOps[ currentIndex++ ] = operator; }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#setNestedDeclarator(org.eclipse.cdt.core.dom.ast.IASTDeclarator) * @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#setNestedDeclarator(org.eclipse.cdt.core.dom.ast.IASTDeclarator)

View file

@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer;
import org.eclipse.cdt.core.dom.ast.c.ICASTDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignator;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -27,19 +28,7 @@ public class CASTDesignatedInitializer extends CASTNode implements
* @see org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer#addDesignator(org.eclipse.cdt.core.dom.ast.c.ICASTDesignator) * @see org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer#addDesignator(org.eclipse.cdt.core.dom.ast.c.ICASTDesignator)
*/ */
public void addDesignator(ICASTDesignator designator) { public void addDesignator(ICASTDesignator designator) {
if( designators == null ) designators = (ICASTDesignator[]) ArrayUtil.append( ICASTDesignator.class, designators, designator );
{
designators = new ICASTDesignator[ DEFAULT_DESIGNATORS_LIST_SIZE ];
currentIndex = 0;
}
if( designators.length == currentIndex )
{
ICASTDesignator [] old = designators;
designators = new ICASTDesignator[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
designators[i] = old[i];
}
designators[ currentIndex++ ] = designator;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -47,27 +36,10 @@ public class CASTDesignatedInitializer extends CASTNode implements
*/ */
public ICASTDesignator[] getDesignators() { public ICASTDesignator[] getDesignators() {
if( designators == null ) return ICASTDesignatedInitializer.EMPTY_DESIGNATOR_ARRAY; if( designators == null ) return ICASTDesignatedInitializer.EMPTY_DESIGNATOR_ARRAY;
removeNullDesignators(); return (ICASTDesignator[]) ArrayUtil.removeNulls( ICASTDesignator.class, designators );
return designators;
} }
private void removeNullDesignators() {
int nullCount = 0;
for( int i = 0; i < designators.length; ++i )
if( designators[i] == null )
++nullCount;
if( nullCount == 0 ) return;
ICASTDesignator [] old = designators;
int newSize = old.length - nullCount;
designators = new ICASTDesignator[ newSize ];
for( int i = 0; i < newSize; ++i )
designators[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private ICASTDesignator [] designators = null; private ICASTDesignator [] designators = null;
private static final int DEFAULT_DESIGNATORS_LIST_SIZE = 2;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer#getRHSInitializer() * @see org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer#getRHSInitializer()
*/ */

View file

@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c;
import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.c.ICASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -25,19 +26,7 @@ public class CASTEnumerationSpecifier extends CASTBaseDeclSpecifier implements
* @see org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier#addEnumerator(org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator) * @see org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier#addEnumerator(org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator)
*/ */
public void addEnumerator(IASTEnumerator enumerator) { public void addEnumerator(IASTEnumerator enumerator) {
if( enumerators == null ) enumerators = (IASTEnumerator[]) ArrayUtil.append( IASTEnumerator.class, enumerators, enumerator );
{
enumerators = new IASTEnumerator[ DEFAULT_ENUMERATOR_LIST_SIZE ];
currentIndex = 0;
}
if( enumerators.length == currentIndex )
{
IASTEnumerator [] old = enumerators;
enumerators = new IASTEnumerator[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
enumerators[i] = old[i];
}
enumerators[ currentIndex++ ] = enumerator;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -45,27 +34,10 @@ public class CASTEnumerationSpecifier extends CASTBaseDeclSpecifier implements
*/ */
public IASTEnumerator[] getEnumerators() { public IASTEnumerator[] getEnumerators() {
if( enumerators == null ) return IASTEnumerator.EMPTY_ENUMERATOR_ARRAY; if( enumerators == null ) return IASTEnumerator.EMPTY_ENUMERATOR_ARRAY;
removeNullEnumerators(); return (IASTEnumerator[]) ArrayUtil.removeNulls( IASTEnumerator.class, enumerators );
return enumerators;
} }
private void removeNullEnumerators() {
int nullCount = 0;
for( int i = 0; i < enumerators.length; ++i )
if( enumerators[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTEnumerator [] old = enumerators;
int newSize = old.length - nullCount;
enumerators = new IASTEnumerator[ newSize ];
for( int i = 0; i < newSize; ++i )
enumerators[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTEnumerator [] enumerators = null; private IASTEnumerator [] enumerators = null;
private static final int DEFAULT_ENUMERATOR_LIST_SIZE = 4;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier#setName(org.eclipse.cdt.core.dom.ast.IASTName) * @see org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier#setName(org.eclipse.cdt.core.dom.ast.IASTName)

View file

@ -13,6 +13,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTExpressionList; import org.eclipse.cdt.core.dom.ast.IASTExpressionList;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -29,8 +30,7 @@ public class CASTExpressionList extends CASTNode implements IASTExpressionList,
public IASTExpression[] getExpressions() { public IASTExpression[] getExpressions() {
if (expressions == null) if (expressions == null)
return IASTExpression.EMPTY_EXPRESSION_ARRAY; return IASTExpression.EMPTY_EXPRESSION_ARRAY;
removeNullExpressions(); return (IASTExpression[]) ArrayUtil.removeNulls( IASTExpression.class, expressions );
return expressions;
} }
/* /*
@ -39,42 +39,11 @@ public class CASTExpressionList extends CASTNode implements IASTExpressionList,
* @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#addExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) * @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#addExpression(org.eclipse.cdt.core.dom.ast.IASTExpression)
*/ */
public void addExpression(IASTExpression expression) { public void addExpression(IASTExpression expression) {
if (expressions == null) { expressions = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, expressions, expression );
expressions = new IASTExpression[DEFAULT_EXPRESSIONLIST_SIZE];
currentIndex = 0;
}
if (expressions.length == currentIndex) {
IASTExpression[] old = expressions;
expressions = new IASTExpression[old.length * 2];
for (int i = 0; i < old.length; ++i)
expressions[i] = old[i];
}
expressions[currentIndex++] = expression;
} }
/**
* @param decls2
*/
private void removeNullExpressions() {
int nullCount = 0;
for (int i = 0; i < expressions.length; ++i)
if (expressions[i] == null)
++nullCount;
if (nullCount == 0)
return;
IASTExpression[] old = expressions;
int newSize = old.length - nullCount;
expressions = new IASTExpression[newSize];
for (int i = 0; i < newSize; ++i)
expressions[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0; private IASTExpression [] expressions = new IASTExpression[2];
private IASTExpression[] expressions = null;
private static final int DEFAULT_EXPRESSIONLIST_SIZE = 4;
public boolean accept(ASTVisitor action) { public boolean accept(ASTVisitor action) {
if (action.shouldVisitExpressions) { if (action.shouldVisitExpressions) {
@ -97,12 +66,12 @@ public class CASTExpressionList extends CASTNode implements IASTExpressionList,
} }
public void replace(IASTNode child, IASTNode other) { public void replace(IASTNode child, IASTNode other) {
IASTExpression[] ez = getExpressions(); if( expressions == null ) return;
for (int i = 0; i < ez.length; ++i) { for (int i = 0; i < expressions.length; ++i) {
if (child == ez[i]) { if (child == expressions[i]) {
other.setPropertyInParent(child.getPropertyInParent()); other.setPropertyInParent(child.getPropertyInParent());
other.setParent(child.getParent()); other.setParent(child.getParent());
ez[i] = (IASTExpression) other; expressions[i] = (IASTExpression) other;
} }
} }
} }

View file

@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c;
import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -20,27 +21,8 @@ public class CASTFunctionDeclarator extends CASTDeclarator implements
IASTStandardFunctionDeclarator { IASTStandardFunctionDeclarator {
private IASTParameterDeclaration [] parameters = null; private IASTParameterDeclaration [] parameters = null;
private static final int DEFAULT_PARAMETERS_LIST_SIZE = 2;
private int currentIndex = 0;
private boolean varArgs; private boolean varArgs;
/**
* @param decls2
*/
private void removeNullParameters() {
int nullCount = 0;
for( int i = 0; i < parameters.length; ++i )
if( parameters[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTParameterDeclaration [] old = parameters;
int newSize = old.length - nullCount;
parameters = new IASTParameterDeclaration[ newSize ];
for( int i = 0; i < newSize; ++i )
parameters[i] = old[i];
currentIndex = newSize;
}
/* (non-Javadoc) /* (non-Javadoc)
@ -48,27 +30,14 @@ public class CASTFunctionDeclarator extends CASTDeclarator implements
*/ */
public IASTParameterDeclaration[] getParameters() { public IASTParameterDeclaration[] getParameters() {
if( parameters == null ) return IASTParameterDeclaration.EMPTY_PARAMETERDECLARATION_ARRAY; if( parameters == null ) return IASTParameterDeclaration.EMPTY_PARAMETERDECLARATION_ARRAY;
removeNullParameters(); return (IASTParameterDeclaration[]) ArrayUtil.removeNulls( IASTParameterDeclaration.class, parameters );
return parameters;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator#addParameterDeclaration(org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration) * @see org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator#addParameterDeclaration(org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration)
*/ */
public void addParameterDeclaration(IASTParameterDeclaration parameter) { public void addParameterDeclaration(IASTParameterDeclaration parameter) {
if( parameters == null ) parameters = (IASTParameterDeclaration[]) ArrayUtil.append( IASTParameterDeclaration.class, parameters, parameter );
{
parameters = new IASTParameterDeclaration[ DEFAULT_PARAMETERS_LIST_SIZE ];
currentIndex = 0;
}
if( parameters.length == currentIndex )
{
IASTParameterDeclaration [] old = parameters;
parameters = new IASTParameterDeclaration[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
parameters[i] = old[i];
}
parameters[ currentIndex++ ] = parameter;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c;
import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.IASTInitializerList; import org.eclipse.cdt.core.dom.ast.IASTInitializerList;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -20,55 +21,20 @@ public class CASTInitializerList extends CASTNode implements
IASTInitializerList { IASTInitializerList {
private int currentIndex = 0;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration#getDeclarators() * @see org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration#getDeclarators()
*/ */
public IASTInitializer[] getInitializers() { public IASTInitializer[] getInitializers() {
if( initializers == null ) return IASTInitializer.EMPTY_INITIALIZER_ARRAY; if( initializers == null ) return IASTInitializer.EMPTY_INITIALIZER_ARRAY;
removeNullInitializers(); return (IASTInitializer[]) ArrayUtil.removeNulls( IASTInitializer.class, initializers );
return initializers;
} }
public void addInitializer( IASTInitializer d ) public void addInitializer( IASTInitializer d )
{ {
if( initializers == null ) initializers = (IASTInitializer[]) ArrayUtil.append( IASTInitializer.class, initializers, d );
{
initializers = new IASTInitializer[ DEFAULT_INITIALIZERS_LIST_SIZE ];
currentIndex = 0;
}
if( initializers.length == currentIndex )
{
IASTInitializer [] old = initializers;
initializers = new IASTInitializer[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
initializers[i] = old[i];
}
initializers[ currentIndex++ ] = d;
} }
/**
* @param decls2
*/
private void removeNullInitializers() {
int nullCount = 0;
for( int i = 0; i < initializers.length; ++i )
if( initializers[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTInitializer [] old = initializers;
int newSize = old.length - nullCount;
initializers = new IASTInitializer[ newSize ];
for( int i = 0; i < newSize; ++i )
initializers[i] = old[i];
currentIndex = newSize;
}
private IASTInitializer [] initializers = null; private IASTInitializer [] initializers = null;
private static final int DEFAULT_INITIALIZERS_LIST_SIZE = 4;
public boolean accept( ASTVisitor action ){ public boolean accept( ASTVisitor action ){
if( action.shouldVisitInitializers ){ if( action.shouldVisitInitializers ){

View file

@ -13,6 +13,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -28,50 +29,21 @@ public class CASTSimpleDeclaration extends CASTNode implements
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration#getDeclarators() * @see org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration#getDeclarators()
*/ */
public IASTDeclarator[] getDeclarators() { public IASTDeclarator[] getDeclarators() {
if( declarators == null ) return IASTDeclarator.EMPTY_DECLARATOR_ARRAY; if( declarators == null ) return IASTDeclarator.EMPTY_DECLARATOR_ARRAY;
removeNullDeclarators(); return (IASTDeclarator[]) ArrayUtil.removeNulls( IASTDeclarator.class, declarators );
return declarators;
} }
public void addDeclarator( IASTDeclarator d ) public void addDeclarator( IASTDeclarator d )
{ {
if( declarators == null ) declarators = (IASTDeclarator[]) ArrayUtil.append( IASTDeclarator.class, declarators, d );
{
declarators = new IASTDeclarator[ DEFAULT_DECLARATORS_LIST_SIZE ];
currentIndex = 0;
}
if( declarators.length == currentIndex )
{
IASTDeclarator [] old = declarators;
declarators = new IASTDeclarator[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
declarators[i] = old[i];
}
declarators[ currentIndex++ ] = d;
} }
private void removeNullDeclarators() {
int nullCount = 0;
for( int i = 0; i < declarators.length; ++i )
if( declarators[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTDeclarator [] old = declarators;
int newSize = old.length - nullCount;
declarators = new IASTDeclarator[ newSize ];
for( int i = 0; i < newSize; ++i )
declarators[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTDeclarator [] declarators = null; private IASTDeclarator [] declarators = null;
private static final int DEFAULT_DECLARATORS_LIST_SIZE = 2;
private IASTDeclSpecifier declSpecifier; private IASTDeclSpecifier declSpecifier;
/** /**

View file

@ -36,6 +36,7 @@ import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.c.CASTVisitor; import org.eclipse.cdt.core.dom.ast.c.CASTVisitor;
import org.eclipse.cdt.core.dom.ast.c.ICASTDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignator;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.ASTPreprocessorSelectionResult; import org.eclipse.cdt.internal.core.dom.parser.ASTPreprocessorSelectionResult;
import org.eclipse.cdt.internal.core.dom.parser.IRequiresLocationInformation; import org.eclipse.cdt.internal.core.dom.parser.IRequiresLocationInformation;
@ -50,10 +51,6 @@ public class CASTTranslationUnit extends CASTNode implements
private IASTDeclaration[] decls = null; private IASTDeclaration[] decls = null;
private static final int DEFAULT_CHILDREN_LIST_SIZE = 8;
private int currentIndex = 0;
// Binding // Binding
private CScope compilationUnit = null; private CScope compilationUnit = null;
@ -74,17 +71,7 @@ public class CASTTranslationUnit extends CASTNode implements
private static final IASTName[] EMPTY_NAME_ARRAY = new IASTName[0]; private static final IASTName[] EMPTY_NAME_ARRAY = new IASTName[0];
public void addDeclaration(IASTDeclaration d) { public void addDeclaration(IASTDeclaration d) {
if (decls == null) { decls = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, decls, d );
decls = new IASTDeclaration[DEFAULT_CHILDREN_LIST_SIZE];
currentIndex = 0;
}
if (decls.length == currentIndex) {
IASTDeclaration[] old = decls;
decls = new IASTDeclaration[old.length * 2];
for (int i = 0; i < old.length; ++i)
decls[i] = old[i];
}
decls[currentIndex++] = d;
} }
/* /*
@ -93,29 +80,10 @@ public class CASTTranslationUnit extends CASTNode implements
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getDeclarations() * @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getDeclarations()
*/ */
public IASTDeclaration[] getDeclarations() { public IASTDeclaration[] getDeclarations() {
if (decls == null) if (decls == null) return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
return IASTDeclaration.EMPTY_DECLARATION_ARRAY; return (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, decls );
removeNullDeclarations();
return decls;
} }
/**
* @param decls2
*/
private void removeNullDeclarations() {
int nullCount = 0;
for (int i = 0; i < decls.length; ++i)
if (decls[i] == null)
++nullCount;
if (nullCount == 0)
return;
IASTDeclaration[] old = decls;
int newSize = old.length - nullCount;
decls = new IASTDeclaration[newSize];
for (int i = 0; i < newSize; ++i)
decls[i] = old[i];
currentIndex = newSize;
}
/* /*
* (non-Javadoc) * (non-Javadoc)

View file

@ -1938,7 +1938,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IASTDeclarator d = null; IASTDeclarator d = null;
if (numKnRCParms > 0) { if (numKnRCParms > 0) {
ICASTKnRFunctionDeclarator functionDecltor = createKnRFunctionDeclarator(); ICASTKnRFunctionDeclarator functionDecltor = createKnRFunctionDeclarator();
parmDeclarations = removeNullDeclarations(parmDeclarations); parmDeclarations = (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, parmDeclarations );
for (int i = 0; i < parmDeclarations.length; ++i) { for (int i = 0; i < parmDeclarations.length; ++i) {
if (parmDeclarations[i] != null) { if (parmDeclarations[i] != null) {
parmDeclarations[i].setParent(functionDecltor); parmDeclarations[i].setParent(functionDecltor);
@ -2014,29 +2014,6 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
return d; return d;
} }
/**
* @param parmDeclarations
* @return
*/
private IASTDeclaration[] removeNullDeclarations(
IASTDeclaration[] parmDeclarations) {
int nullCount = 0;
for (int i = 0; i < parmDeclarations.length; ++i) {
if (parmDeclarations[i] == null)
++nullCount;
}
if (nullCount == 0)
return parmDeclarations;
IASTDeclaration[] result = new IASTDeclaration[parmDeclarations.length
- nullCount];
int count = 0;
for (int i = 0; i < parmDeclarations.length; ++i) {
if (parmDeclarations[i] != null)
result[count++] = parmDeclarations[i];
}
return result;
}
protected IASTArrayDeclarator createArrayDeclarator() { protected IASTArrayDeclarator createArrayDeclarator() {
return new CASTArrayDeclarator(); return new CASTArrayDeclarator();
} }

View file

@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier;
import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -21,47 +22,16 @@ import org.eclipse.cdt.core.dom.ast.IASTInitializer;
public class CPPASTArrayDeclarator extends CPPASTDeclarator implements public class CPPASTArrayDeclarator extends CPPASTDeclarator implements
IASTArrayDeclarator { IASTArrayDeclarator {
private int currentIndex = 0;
private void removeNullArrayModifiers() {
int nullCount = 0;
for( int i = 0; i < arrayMods.length; ++i )
if( arrayMods[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTArrayModifier [] old = arrayMods;
int newSize = old.length - nullCount;
arrayMods = new IASTArrayModifier[ newSize ];
for( int i = 0; i < newSize; ++i )
arrayMods[i] = old[i];
currentIndex = newSize;
}
private IASTArrayModifier [] arrayMods = null; private IASTArrayModifier [] arrayMods = null;
private static final int DEFAULT_ARRAYMODS_LIST_SIZE = 4;
public IASTArrayModifier[] getArrayModifiers() { public IASTArrayModifier[] getArrayModifiers() {
if( arrayMods == null ) return IASTArrayModifier.EMPTY_ARRAY; if( arrayMods == null ) return IASTArrayModifier.EMPTY_ARRAY;
removeNullArrayModifiers(); return (IASTArrayModifier[]) ArrayUtil.removeNulls( IASTArrayModifier.class, arrayMods );
return arrayMods;
} }
public void addArrayModifier(IASTArrayModifier arrayModifier) { public void addArrayModifier(IASTArrayModifier arrayModifier) {
if( arrayMods == null ) arrayMods = (IASTArrayModifier[]) ArrayUtil.append( IASTArrayModifier.class, arrayMods, arrayModifier );
{
arrayMods = new IASTArrayModifier[ DEFAULT_ARRAYMODS_LIST_SIZE ];
currentIndex = 0;
}
if( arrayMods.length == currentIndex )
{
IASTArrayModifier [] old = arrayMods;
arrayMods = new IASTArrayModifier[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
arrayMods[i] = old[i];
}
arrayMods[ currentIndex++ ] = arrayModifier;
} }
protected boolean postAccept( ASTVisitor action ){ protected boolean postAccept( ASTVisitor action ){

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -38,27 +39,14 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier
*/ */
public ICPPASTBaseSpecifier[] getBaseSpecifiers() { public ICPPASTBaseSpecifier[] getBaseSpecifiers() {
if( baseSpecs == null ) return ICPPASTBaseSpecifier.EMPTY_BASESPECIFIER_ARRAY; if( baseSpecs == null ) return ICPPASTBaseSpecifier.EMPTY_BASESPECIFIER_ARRAY;
removeNullBaseSpecs(); return (ICPPASTBaseSpecifier[]) ArrayUtil.removeNulls( ICPPASTBaseSpecifier.class, baseSpecs );
return baseSpecs;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier#addBaseSpecifier(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier#addBaseSpecifier(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier)
*/ */
public void addBaseSpecifier(ICPPASTBaseSpecifier baseSpec) { public void addBaseSpecifier(ICPPASTBaseSpecifier baseSpec) {
if( baseSpecs == null ) baseSpecs = (ICPPASTBaseSpecifier[]) ArrayUtil.append( ICPPASTBaseSpecifier.class, baseSpecs, baseSpec );
{
baseSpecs = new ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier[ DEFAULT_DECLARATIONS_LIST_SIZE ];
currentIndex2 = 0;
}
if( baseSpecs.length == currentIndex )
{
ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier [] old = baseSpecs;
baseSpecs = new ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
baseSpecs[i] = old[i];
}
baseSpecs[ currentIndex2++ ] = baseSpec;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -94,8 +82,7 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier
*/ */
public IASTDeclaration[] getMembers() { public IASTDeclaration[] getMembers() {
if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY; if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
removeNullDeclarations(); return (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, declarations );
return declarations;
} }
@ -103,54 +90,11 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier
* @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#addMemberDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration) * @see org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier#addMemberDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration)
*/ */
public void addMemberDeclaration(IASTDeclaration declaration) { public void addMemberDeclaration(IASTDeclaration declaration) {
if( declarations == null ) declarations = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, declarations, declaration );
{
declarations = new IASTDeclaration[ DEFAULT_DECLARATIONS_LIST_SIZE ];
currentIndex = 0;
}
if( declarations.length == currentIndex )
{
IASTDeclaration [] old = declarations;
declarations = new IASTDeclaration[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
declarations[i] = old[i];
}
declarations[ currentIndex++ ] = declaration;
} }
private void removeNullDeclarations() {
int nullCount = 0;
for( int i = 0; i < declarations.length; ++i )
if( declarations[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTDeclaration [] old = declarations;
int newSize = old.length - nullCount;
declarations = new IASTDeclaration[ newSize ];
for( int i = 0; i < newSize; ++i )
declarations[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0; private IASTDeclaration [] declarations = new IASTDeclaration[4];
private IASTDeclaration [] declarations = null;
private static final int DEFAULT_DECLARATIONS_LIST_SIZE = 4;
private void removeNullBaseSpecs() {
int nullCount = 0;
for( int i = 0; i < baseSpecs.length; ++i )
if( baseSpecs[i] == null )
++nullCount;
if( nullCount == 0 ) return;
ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier [] old = baseSpecs;
int newSize = old.length - nullCount;
baseSpecs = new ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier[ newSize ];
for( int i = 0; i < newSize; ++i )
baseSpecs[i] = old[i];
currentIndex2 = newSize;
}
private int currentIndex2 = 0;
private ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier [] baseSpecs = null; private ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier [] baseSpecs = null;
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -16,6 +16,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -24,25 +25,8 @@ import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
public class CPPASTCompoundStatement extends CPPASTNode implements public class CPPASTCompoundStatement extends CPPASTNode implements
IASTCompoundStatement, IASTAmbiguityParent { IASTCompoundStatement, IASTAmbiguityParent {
private int currentIndex = 0; private IASTStatement [] statements = new IASTStatement[2];
private void removeNullStatements() {
int nullCount = 0;
for( int i = 0; i < statements.length; ++i )
if( statements[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTStatement [] old = statements;
int newSize = old.length - nullCount;
statements = new IASTStatement[ newSize ];
for( int i = 0; i < newSize; ++i )
statements[i] = old[i];
currentIndex = newSize;
}
private IASTStatement [] statements = null;
private ICPPScope scope = null; private ICPPScope scope = null;
private static final int DEFAULT_STATEMENT_LIST_SIZE = 8;
/* (non-Javadoc) /* (non-Javadoc)
@ -50,27 +34,14 @@ public class CPPASTCompoundStatement extends CPPASTNode implements
*/ */
public IASTStatement[] getStatements() { public IASTStatement[] getStatements() {
if( statements == null ) return IASTStatement.EMPTY_STATEMENT_ARRAY; if( statements == null ) return IASTStatement.EMPTY_STATEMENT_ARRAY;
removeNullStatements(); return (IASTStatement[]) ArrayUtil.removeNulls( IASTStatement.class, statements );
return statements;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTCompoundStatement#addStatement(org.eclipse.cdt.core.dom.ast.IASTStatement) * @see org.eclipse.cdt.core.dom.ast.IASTCompoundStatement#addStatement(org.eclipse.cdt.core.dom.ast.IASTStatement)
*/ */
public void addStatement(IASTStatement statement) { public void addStatement(IASTStatement statement) {
if( statements == null ) statements = (IASTStatement[]) ArrayUtil.append( IASTStatement.class, statements, statement );
{
statements = new IASTStatement[ DEFAULT_STATEMENT_LIST_SIZE ];
currentIndex = 0;
}
if( statements.length == currentIndex )
{
IASTStatement [] old = statements;
statements = new IASTStatement[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
statements[i] = old[i];
}
statements[ currentIndex++ ] = statement;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -98,15 +69,14 @@ public class CPPASTCompoundStatement extends CPPASTNode implements
} }
public void replace(IASTNode child, IASTNode other) { public void replace(IASTNode child, IASTNode other) {
IASTStatement [] s = getStatements(); if( statements == null ) return;
for( int i = 0; i < s.length; ++i ) for( int i = 0; i < statements.length; ++i )
{ {
if( s[i] == child ) if( statements[i] == child )
{ {
other.setParent( s[i].getParent() ); other.setParent( statements[i].getParent() );
other.setPropertyInParent( s[i].getPropertyInParent() ); other.setPropertyInParent( statements[i].getPropertyInParent() );
s[i] = (IASTStatement) other; statements[i] = (IASTStatement) other;
break;
} }
} }
} }

View file

@ -16,6 +16,7 @@ import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -25,22 +26,7 @@ public class CPPASTDeclarator extends CPPASTNode implements IASTDeclarator {
private IASTName name; private IASTName name;
private IASTDeclarator nestedDeclarator; private IASTDeclarator nestedDeclarator;
private IASTPointerOperator [] pointerOps = null; private IASTPointerOperator [] pointerOps = null;
private static final int DEFAULT_PTROPS_LIST_SIZE = 2;
private int currentIndex;
private void removeNullPointers() {
int nullCount = 0;
for( int i = 0; i < pointerOps.length; ++i )
if( pointerOps[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTPointerOperator [] old = pointerOps;
int newSize = old.length - nullCount;
pointerOps = new IASTPointerOperator[ newSize ];
for( int i = 0; i < newSize; ++i )
pointerOps[i] = old[i];
currentIndex = newSize;
}
/* (non-Javadoc) /* (non-Javadoc)
@ -48,8 +34,7 @@ public class CPPASTDeclarator extends CPPASTNode implements IASTDeclarator {
*/ */
public IASTPointerOperator[] getPointerOperators() { public IASTPointerOperator[] getPointerOperators() {
if( pointerOps == null ) return IASTPointerOperator.EMPTY_ARRAY; if( pointerOps == null ) return IASTPointerOperator.EMPTY_ARRAY;
removeNullPointers(); return (IASTPointerOperator[]) ArrayUtil.removeNulls( IASTPointerOperator.class, pointerOps );
return pointerOps;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -84,19 +69,8 @@ public class CPPASTDeclarator extends CPPASTNode implements IASTDeclarator {
* @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#addPointerOperator(org.eclipse.cdt.core.dom.ast.IASTPointerOperator) * @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#addPointerOperator(org.eclipse.cdt.core.dom.ast.IASTPointerOperator)
*/ */
public void addPointerOperator(IASTPointerOperator operator) { public void addPointerOperator(IASTPointerOperator operator) {
if( pointerOps == null ) pointerOps = (IASTPointerOperator[]) ArrayUtil.append( IASTPointerOperator.class, pointerOps, operator );
{ }
pointerOps = new IASTPointerOperator[ DEFAULT_PTROPS_LIST_SIZE ];
currentIndex = 0;
}
if( pointerOps.length == currentIndex )
{
IASTPointerOperator [] old = pointerOps;
pointerOps = new IASTPointerOperator[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
pointerOps[i] = old[i];
}
pointerOps[ currentIndex++ ] = operator; }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#setNestedDeclarator(org.eclipse.cdt.core.dom.ast.IASTDeclarator) * @see org.eclipse.cdt.core.dom.ast.IASTDeclarator#setNestedDeclarator(org.eclipse.cdt.core.dom.ast.IASTDeclarator)

View file

@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -29,17 +30,7 @@ public class CPPASTEnumerationSpecifier extends CPPASTBaseDeclSpecifier
* @see org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier#addEnumerator(org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator) * @see org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier#addEnumerator(org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator)
*/ */
public void addEnumerator(IASTEnumerator enumerator) { public void addEnumerator(IASTEnumerator enumerator) {
if (enumerators == null) { enumerators = (IASTEnumerator[]) ArrayUtil.append( IASTEnumerator.class, enumerators, enumerator );
enumerators = new IASTEnumerator[DEFAULT_ENUMERATORS_LIST_SIZE];
currentIndex = 0;
}
if (enumerators.length == currentIndex) {
IASTEnumerator[] old = enumerators;
enumerators = new IASTEnumerator[old.length * 2];
for (int i = 0; i < old.length; ++i)
enumerators[i] = old[i];
}
enumerators[currentIndex++] = enumerator;
} }
/* /*
@ -50,31 +41,12 @@ public class CPPASTEnumerationSpecifier extends CPPASTBaseDeclSpecifier
public IASTEnumerator[] getEnumerators() { public IASTEnumerator[] getEnumerators() {
if (enumerators == null) if (enumerators == null)
return IASTEnumerator.EMPTY_ENUMERATOR_ARRAY; return IASTEnumerator.EMPTY_ENUMERATOR_ARRAY;
removeNullEnumerators(); return (IASTEnumerator[]) ArrayUtil.removeNulls( IASTEnumerator.class, enumerators );
return enumerators;
} }
private void removeNullEnumerators() {
int nullCount = 0;
for (int i = 0; i < enumerators.length; ++i)
if (enumerators[i] == null)
++nullCount;
if (nullCount == 0)
return;
IASTEnumerator[] old = enumerators;
int newSize = old.length - nullCount;
enumerators = new IASTEnumerator[newSize];
for (int i = 0; i < newSize; ++i)
enumerators[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTEnumerator[] enumerators = null; private IASTEnumerator[] enumerators = null;
private static final int DEFAULT_ENUMERATORS_LIST_SIZE = 4;
/* /*
* (non-Javadoc) * (non-Javadoc)
* *

View file

@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTExpressionList; import org.eclipse.cdt.core.dom.ast.IASTExpressionList;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -26,50 +27,17 @@ public class CPPASTExpressionList extends CPPASTNode implements
*/ */
public IASTExpression [] getExpressions() { public IASTExpression [] getExpressions() {
if( expressions == null ) return IASTExpression.EMPTY_EXPRESSION_ARRAY; if( expressions == null ) return IASTExpression.EMPTY_EXPRESSION_ARRAY;
removeNullExpressions(); return (IASTExpression[]) ArrayUtil.removeNulls( IASTExpression.class, expressions );
return expressions;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#addExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) * @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#addExpression(org.eclipse.cdt.core.dom.ast.IASTExpression)
*/ */
public void addExpression(IASTExpression expression) { public void addExpression(IASTExpression expression) {
if( expressions == null ) expressions = (IASTExpression [])ArrayUtil.append( IASTExpression.class, expressions, expression );
{
expressions = new IASTExpression[ DEFAULT_EXPRESSIONLIST_SIZE ];
currentIndex = 0;
}
if( expressions.length == currentIndex )
{
IASTExpression [] old = expressions;
expressions = new IASTExpression[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
expressions[i] = old[i];
}
expressions[ currentIndex++ ] = expression;
} }
/** private IASTExpression [] expressions = new IASTExpression[2];
* @param decls2
*/
private void removeNullExpressions() {
int nullCount = 0;
for( int i = 0; i < expressions.length; ++i )
if( expressions[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTExpression [] old = expressions;
int newSize = old.length - nullCount;
expressions = new IASTExpression[ newSize ];
for( int i = 0; i < newSize; ++i )
expressions[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTExpression [] expressions = null;
private static final int DEFAULT_EXPRESSIONLIST_SIZE = 4;
public boolean accept( ASTVisitor action ){ public boolean accept( ASTVisitor action ){
if( action.shouldVisitExpressions ){ if( action.shouldVisitExpressions ){
switch( action.visit( this ) ){ switch( action.visit( this ) ){
@ -87,12 +55,12 @@ public class CPPASTExpressionList extends CPPASTNode implements
} }
public void replace(IASTNode child, IASTNode other) { public void replace(IASTNode child, IASTNode other) {
IASTExpression[] ez = getExpressions(); if( expressions == null ) return;
for (int i = 0; i < ez.length; ++i) { for (int i = 0; i < expressions.length; ++i) {
if (child == ez[i]) { if (child == expressions[i]) {
other.setPropertyInParent(child.getPropertyInParent()); other.setPropertyInParent(child.getPropertyInParent());
other.setParent(child.getParent()); other.setParent(child.getParent());
ez[i] = (IASTExpression) other; expressions[i] = (IASTExpression) other;
} }
} }
} }

View file

@ -20,6 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionScope;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -28,30 +29,12 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements
ICPPASTFunctionDeclarator { ICPPASTFunctionDeclarator {
private IASTParameterDeclaration [] parameters = null; private IASTParameterDeclaration [] parameters = null;
private static final int DEFAULT_PARAMETERS_LIST_SIZE = 2;
private ICPPFunctionScope scope = null; private ICPPFunctionScope scope = null;
private int currentIndex = 0;
private boolean varArgs; private boolean varArgs;
private boolean pureVirtual; private boolean pureVirtual;
private boolean isVolatile; private boolean isVolatile;
private boolean isConst; private boolean isConst;
/**
* @param decls2
*/
private void removeNullParameters() {
int nullCount = 0;
for( int i = 0; i < parameters.length; ++i )
if( parameters[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTParameterDeclaration [] old = parameters;
int newSize = old.length - nullCount;
parameters = new IASTParameterDeclaration[ newSize ];
for( int i = 0; i < newSize; ++i )
parameters[i] = old[i];
currentIndex = newSize;
}
/* (non-Javadoc) /* (non-Javadoc)
@ -59,27 +42,14 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements
*/ */
public IASTParameterDeclaration [] getParameters() { public IASTParameterDeclaration [] getParameters() {
if( parameters == null ) return IASTParameterDeclaration.EMPTY_PARAMETERDECLARATION_ARRAY; if( parameters == null ) return IASTParameterDeclaration.EMPTY_PARAMETERDECLARATION_ARRAY;
removeNullParameters(); return (IASTParameterDeclaration[]) ArrayUtil.removeNulls( IASTParameterDeclaration.class, parameters );
return parameters;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator#addParameterDeclaration(org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration) * @see org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator#addParameterDeclaration(org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration)
*/ */
public void addParameterDeclaration(IASTParameterDeclaration parameter) { public void addParameterDeclaration(IASTParameterDeclaration parameter) {
if( parameters == null ) parameters = (IASTParameterDeclaration []) ArrayUtil.append( IASTParameterDeclaration.class, parameters, parameter );
{
parameters = new IASTParameterDeclaration[ DEFAULT_PARAMETERS_LIST_SIZE ];
currentIndex = 0;
}
if( parameters.length == currentIndex )
{
IASTParameterDeclaration [] old = parameters;
parameters = new IASTParameterDeclaration[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
parameters[i] = old[i];
}
parameters[ currentIndex++ ] = parameter;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -128,29 +98,13 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements
this.isVolatile = value; this.isVolatile = value;
} }
private int currentTypeIdIndex = 0;
private IASTTypeId [] typeIds = null; private IASTTypeId [] typeIds = null;
private static final int DEFAULT_TYPEID_LIST_SIZE = 4;
private void removeNullTypeIds() {
int nullCount = 0;
for( int i = 0; i < typeIds.length; ++i )
if( typeIds[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTTypeId [] old = typeIds;
int newSize = old.length - nullCount;
typeIds = new IASTTypeId[ newSize ];
for( int i = 0; i < newSize; ++i )
typeIds[i] = old[i];
currentTypeIdIndex = newSize;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#getExceptionSpecification() * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#getExceptionSpecification()
*/ */
public IASTTypeId[] getExceptionSpecification() { public IASTTypeId[] getExceptionSpecification() {
if( typeIds == null ) return IASTTypeId.EMPTY_TYPEID_ARRAY; if( typeIds == null ) return IASTTypeId.EMPTY_TYPEID_ARRAY;
removeNullTypeIds(); return (IASTTypeId[]) ArrayUtil.removeNulls( IASTTypeId.class, typeIds );
return typeIds;
} }
@ -158,19 +112,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#addExceptionSpecificationTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#addExceptionSpecificationTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId)
*/ */
public void addExceptionSpecificationTypeId(IASTTypeId typeId) { public void addExceptionSpecificationTypeId(IASTTypeId typeId) {
if( typeIds == null ) typeIds = (IASTTypeId[]) ArrayUtil.append( IASTTypeId.class, typeIds, typeId );
{
typeIds = new IASTTypeId[ DEFAULT_TYPEID_LIST_SIZE ];
currentTypeIdIndex = 0;
}
if( typeIds.length == currentTypeIdIndex )
{
IASTTypeId [] old = typeIds;
typeIds = new IASTTypeId[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
typeIds[i] = old[i];
}
typeIds[ currentTypeIdIndex++ ] = typeId;
} }
@ -190,32 +132,14 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements
} }
private int currentConstructorChainIndex = 0;
private ICPPASTConstructorChainInitializer [] constructorChain = null; private ICPPASTConstructorChainInitializer [] constructorChain = null;
private static final int DEFAULT_CONS_LIST_SIZE = 4;
private void removeNullConstructors() {
int nullCount = 0;
for( int i = 0; i < constructorChain.length; ++i )
if( constructorChain[i] == null )
++nullCount;
if( nullCount == 0 ) return;
ICPPASTConstructorChainInitializer [] old = constructorChain;
int newSize = old.length - nullCount;
constructorChain = new ICPPASTConstructorChainInitializer[ newSize ];
for( int i = 0; i < newSize; ++i )
constructorChain[i] = old[i];
currentConstructorChainIndex = newSize;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#getConstructorChain() * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#getConstructorChain()
*/ */
public ICPPASTConstructorChainInitializer[] getConstructorChain() { public ICPPASTConstructorChainInitializer[] getConstructorChain() {
if( constructorChain == null ) return ICPPASTConstructorChainInitializer.EMPTY_CONSTRUCTORCHAININITIALIZER_ARRAY; if( constructorChain == null ) return ICPPASTConstructorChainInitializer.EMPTY_CONSTRUCTORCHAININITIALIZER_ARRAY;
removeNullConstructors(); return (ICPPASTConstructorChainInitializer[]) ArrayUtil.removeNulls( ICPPASTConstructorChainInitializer.class, constructorChain );
return constructorChain;
} }
@ -223,19 +147,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#addConstructorToChain(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator#addConstructorToChain(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer)
*/ */
public void addConstructorToChain(ICPPASTConstructorChainInitializer initializer) { public void addConstructorToChain(ICPPASTConstructorChainInitializer initializer) {
if( constructorChain == null ) constructorChain = (ICPPASTConstructorChainInitializer[]) ArrayUtil.append( ICPPASTConstructorChainInitializer.class, constructorChain, initializer );
{
constructorChain = new ICPPASTConstructorChainInitializer[ DEFAULT_CONS_LIST_SIZE ];
currentConstructorChainIndex = 0;
}
if( constructorChain.length == currentConstructorChainIndex )
{
ICPPASTConstructorChainInitializer [] old = constructorChain;
constructorChain = new ICPPASTConstructorChainInitializer[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
constructorChain[i] = old[i];
}
constructorChain[ currentConstructorChainIndex++ ] = initializer;
} }
public ICPPFunctionScope getFunctionScope(){ public ICPPFunctionScope getFunctionScope(){

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCatchHandler; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCatchHandler;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -24,47 +25,19 @@ public class CPPASTFunctionTryBlockDeclarator extends CPPASTFunctionDeclarator
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#addCatchHandler(org.eclipse.cdt.core.dom.ast.IASTStatement) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#addCatchHandler(org.eclipse.cdt.core.dom.ast.IASTStatement)
*/ */
public void addCatchHandler(ICPPASTCatchHandler statement) { public void addCatchHandler(ICPPASTCatchHandler statement) {
if( catchHandlers == null ) catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.append( ICPPASTCatchHandler.class, catchHandlers, statement );
{ }
catchHandlers = new ICPPASTCatchHandler[ DEFAULT_CATCH_HANDLER_LIST_SIZE ];
currentIndex = 0;
}
if( catchHandlers.length == currentIndex )
{
ICPPASTCatchHandler [] old = catchHandlers;
catchHandlers = new ICPPASTCatchHandler[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
catchHandlers[i] = old[i];
}
catchHandlers[ currentIndex++ ] = statement; }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#getCatchHandlers() * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#getCatchHandlers()
*/ */
public ICPPASTCatchHandler [] getCatchHandlers() { public ICPPASTCatchHandler [] getCatchHandlers() {
if( catchHandlers == null ) return ICPPASTCatchHandler.EMPTY_CATCHHANDLER_ARRAY; if( catchHandlers == null ) return ICPPASTCatchHandler.EMPTY_CATCHHANDLER_ARRAY;
removeNullCatchHandlers(); return (ICPPASTCatchHandler[]) ArrayUtil.removeNulls( ICPPASTCatchHandler.class, catchHandlers );
return catchHandlers;
} }
private void removeNullCatchHandlers() {
int nullCount = 0;
for( int i = 0; i < catchHandlers.length; ++i )
if( catchHandlers[i] == null )
++nullCount;
if( nullCount == 0 ) return;
ICPPASTCatchHandler [] old = catchHandlers;
int newSize = old.length - nullCount;
catchHandlers = new ICPPASTCatchHandler[ newSize ];
for( int i = 0; i < newSize; ++i )
catchHandlers[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private ICPPASTCatchHandler [] catchHandlers = null; private ICPPASTCatchHandler [] catchHandlers = null;
private static final int DEFAULT_CATCH_HANDLER_LIST_SIZE = 4;
protected boolean postAccept( ASTVisitor action ){ protected boolean postAccept( ASTVisitor action ){
if( !super.postAccept( action ) ) return false; if( !super.postAccept( action ) ) return false;

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTInitializer;
import org.eclipse.cdt.core.dom.ast.IASTInitializerList; import org.eclipse.cdt.core.dom.ast.IASTInitializerList;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -20,55 +21,22 @@ import org.eclipse.cdt.core.dom.ast.IASTInitializerList;
public class CPPASTInitializerList extends CPPASTNode implements public class CPPASTInitializerList extends CPPASTNode implements
IASTInitializerList { IASTInitializerList {
private int currentIndex = 0;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration#getDeclarators() * @see org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration#getDeclarators()
*/ */
public IASTInitializer [] getInitializers() { public IASTInitializer [] getInitializers() {
if( initializers == null ) return IASTInitializer.EMPTY_INITIALIZER_ARRAY; if( initializers == null ) return IASTInitializer.EMPTY_INITIALIZER_ARRAY;
removeNullInitializers(); return (IASTInitializer[]) ArrayUtil.removeNulls( IASTInitializer.class, initializers );
return initializers;
} }
public void addInitializer( IASTInitializer d ) public void addInitializer( IASTInitializer d )
{ {
if( initializers == null ) initializers = (IASTInitializer[]) ArrayUtil.append( IASTInitializer.class, initializers, d );
{
initializers = new IASTInitializer[ DEFAULT_INITIALIZERS_LIST_SIZE ];
currentIndex = 0;
}
if( initializers.length == currentIndex )
{
IASTInitializer [] old = initializers;
initializers = new IASTInitializer[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
initializers[i] = old[i];
}
initializers[ currentIndex++ ] = d;
}
/**
* @param decls2
*/
private void removeNullInitializers() {
int nullCount = 0;
for( int i = 0; i < initializers.length; ++i )
if( initializers[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTInitializer [] old = initializers;
int newSize = old.length - nullCount;
initializers = new IASTInitializer[ newSize ];
for( int i = 0; i < newSize; ++i )
initializers[i] = old[i];
currentIndex = newSize;
} }
private IASTInitializer [] initializers = null; private IASTInitializer [] initializers = null;
private static final int DEFAULT_INITIALIZERS_LIST_SIZE = 4;
public boolean accept( ASTVisitor action ){ public boolean accept( ASTVisitor action ){
if( action.shouldVisitInitializers ){ if( action.shouldVisitInitializers ){

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -40,46 +41,17 @@ public class CPPASTLinkageSpecification extends CPPASTNode implements
*/ */
public IASTDeclaration [] getDeclarations() { public IASTDeclaration [] getDeclarations() {
if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY; if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
removeNullDeclarations(); return (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, declarations );
return declarations;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration)
*/ */
public void addDeclaration(IASTDeclaration declaration) { public void addDeclaration(IASTDeclaration declaration) {
if( declarations == null ) declarations = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, declarations, declaration );
{
declarations = new IASTDeclaration[ DEFAULT_DECLARATIONS_LIST_SIZE ];
currentIndex = 0;
}
if( declarations.length == currentIndex )
{
IASTDeclaration [] old = declarations;
declarations = new IASTDeclaration[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
declarations[i] = old[i];
}
declarations[ currentIndex++ ] = declaration;
} }
private void removeNullDeclarations() { private IASTDeclaration [] declarations = new IASTDeclaration[4];
int nullCount = 0;
for( int i = 0; i < declarations.length; ++i )
if( declarations[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTDeclaration [] old = declarations;
int newSize = old.length - nullCount;
declarations = new IASTDeclaration[ newSize ];
for( int i = 0; i < newSize; ++i )
declarations[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTDeclaration [] declarations = null;
private static final int DEFAULT_DECLARATIONS_LIST_SIZE = 4;
public boolean accept( ASTVisitor action ){ public boolean accept( ASTVisitor action ){
if( action.shouldVisitDeclarations ){ if( action.shouldVisitDeclarations ){

View file

@ -18,6 +18,7 @@ import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor; import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -46,48 +47,18 @@ public class CPPASTNamespaceDefinition extends CPPASTNode implements
*/ */
public IASTDeclaration [] getDeclarations() { public IASTDeclaration [] getDeclarations() {
if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY; if( declarations == null ) return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
removeNullDeclarations(); return (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, declarations );
return declarations;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition#addDeclaration(org.eclipse.cdt.core.dom.ast.IASTDeclaration)
*/ */
public void addDeclaration(IASTDeclaration declaration) { public void addDeclaration(IASTDeclaration declaration) {
if( declarations == null ) declarations = (IASTDeclaration[]) ArrayUtil.append( IASTDeclaration.class, declarations, declaration );
{
declarations = new IASTDeclaration[ DEFAULT_DECLARATIONS_LIST_SIZE ];
currentIndex = 0;
}
if( declarations.length == currentIndex )
{
IASTDeclaration [] old = declarations;
declarations = new IASTDeclaration[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
declarations[i] = old[i];
}
declarations[ currentIndex++ ] = declaration;
} }
private void removeNullDeclarations() { private IASTDeclaration [] declarations = new IASTDeclaration[32];
int nullCount = 0; /* (non-Javadoc)
for( int i = 0; i < declarations.length; ++i )
if( declarations[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTDeclaration [] old = declarations;
int newSize = old.length - nullCount;
declarations = new IASTDeclaration[ newSize ];
for( int i = 0; i < newSize; ++i )
declarations[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTDeclaration [] declarations = null;
private static final int DEFAULT_DECLARATIONS_LIST_SIZE = 4;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition#getScope() * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition#getScope()
*/ */
public IScope getScope() { public IScope getScope() {

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -104,46 +105,17 @@ public class CPPASTNewExpression extends CPPASTNode implements
*/ */
public IASTExpression [] getNewTypeIdArrayExpressions() { public IASTExpression [] getNewTypeIdArrayExpressions() {
if( arrayExpressions == null ) return IASTExpression.EMPTY_EXPRESSION_ARRAY; if( arrayExpressions == null ) return IASTExpression.EMPTY_EXPRESSION_ARRAY;
removeNullExpressions(); return (IASTExpression[]) ArrayUtil.removeNulls( IASTExpression.class, arrayExpressions );
return arrayExpressions;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#addNewTypeIdArrayExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#addNewTypeIdArrayExpression(org.eclipse.cdt.core.dom.ast.IASTExpression)
*/ */
public void addNewTypeIdArrayExpression(IASTExpression expression) { public void addNewTypeIdArrayExpression(IASTExpression expression) {
if( arrayExpressions == null ) arrayExpressions = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, arrayExpressions, expression );
{
arrayExpressions = new IASTExpression[ DEFAULT_ARRAY_EXPRESSIONS_LIST_SIZE ];
currentIndex = 0;
}
if( arrayExpressions.length == currentIndex )
{
IASTExpression [] old = arrayExpressions;
arrayExpressions = new IASTExpression[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
arrayExpressions[i] = old[i];
}
arrayExpressions[ currentIndex++ ] = expression;
} }
private void removeNullExpressions() {
int nullCount = 0;
for( int i = 0; i < arrayExpressions.length; ++i )
if( arrayExpressions[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTExpression [] old = arrayExpressions;
int newSize = old.length - nullCount;
arrayExpressions = new IASTExpression[ newSize ];
for( int i = 0; i < newSize; ++i )
arrayExpressions[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTExpression [] arrayExpressions = null; private IASTExpression [] arrayExpressions = null;
private static final int DEFAULT_ARRAY_EXPRESSIONS_LIST_SIZE = 4;
public boolean accept( ASTVisitor action ){ public boolean accept( ASTVisitor action ){
if( action.shouldVisitExpressions ){ if( action.shouldVisitExpressions ){
@ -178,6 +150,13 @@ public class CPPASTNewExpression extends CPPASTNode implements
other.setParent( child.getParent() ); other.setParent( child.getParent() );
initializer = (IASTExpression) other; initializer = (IASTExpression) other;
} }
if( arrayExpressions == null ) return;
for( int i = 0; i < arrayExpressions.length; ++i )
if( arrayExpressions[i] == child )
{
other.setPropertyInParent( child.getPropertyInParent() );
other.setParent( child.getParent() );
arrayExpressions[i] = (IASTExpression) other;
}
} }
} }

View file

@ -19,6 +19,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -65,45 +66,19 @@ public class CPPASTQualifiedName extends CPPASTNode implements
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#addName(org.eclipse.cdt.core.dom.ast.IASTName) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#addName(org.eclipse.cdt.core.dom.ast.IASTName)
*/ */
public void addName(IASTName name) { public void addName(IASTName name) {
if (names == null) { names = (IASTName[]) ArrayUtil.append( IASTName.class, names, name );
names = new IASTName[DEFAULT_NAMES_LIST_SIZE];
currentIndex = 0;
}
if (names.length == currentIndex) {
IASTName[] old = names;
names = new IASTName[old.length * 2];
for (int i = 0; i < old.length; ++i)
names[i] = old[i];
}
names[currentIndex++] = name;
} }
/** /**
* @param decls2 * @param decls2
*/ */
private void removeNullNames() { private void removeNullNames() {
int nullCount = 0; names = (IASTName[]) ArrayUtil.removeNulls( IASTName.class, names );
for (int i = 0; i < names.length; ++i)
if (names[i] == null)
++nullCount;
if (nullCount == 0)
return;
IASTName[] old = names;
int newSize = old.length - nullCount;
names = new IASTName[newSize];
for (int i = 0; i < newSize; ++i)
names[i] = old[i];
currentIndex = newSize;
} }
private int currentIndex = 0;
private IASTName[] names = null; private IASTName[] names = null;
private static final int DEFAULT_NAMES_LIST_SIZE = 4;
private boolean value; private boolean value;
private String signature; private String signature;
/* /*

View file

@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -35,44 +36,15 @@ public class CPPASTSimpleDeclaration extends CPPASTNode implements
*/ */
public IASTDeclarator[] getDeclarators() { public IASTDeclarator[] getDeclarators() {
if( declarators == null ) return IASTDeclarator.EMPTY_DECLARATOR_ARRAY; if( declarators == null ) return IASTDeclarator.EMPTY_DECLARATOR_ARRAY;
removeNullDeclarators(); return (IASTDeclarator[]) ArrayUtil.removeNulls( IASTDeclarator.class, declarators );
return declarators;
} }
public void addDeclarator( IASTDeclarator d ) public void addDeclarator( IASTDeclarator d )
{ {
if( declarators == null ) declarators = (IASTDeclarator[]) ArrayUtil.append( IASTDeclarator.class, declarators, d );
{
declarators = new IASTDeclarator[ DEFAULT_DECLARATORS_LIST_SIZE ];
currentIndex = 0;
}
if( declarators.length == currentIndex )
{
IASTDeclarator [] old = declarators;
declarators = new IASTDeclarator[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
declarators[i] = old[i];
}
declarators[ currentIndex++ ] = d;
} }
private void removeNullDeclarators() {
int nullCount = 0;
for( int i = 0; i < declarators.length; ++i )
if( declarators[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTDeclarator [] old = declarators;
int newSize = old.length - nullCount;
declarators = new IASTDeclarator[ newSize ];
for( int i = 0; i < newSize; ++i )
declarators[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTDeclarator [] declarators = null; private IASTDeclarator [] declarators = null;
private static final int DEFAULT_DECLARATORS_LIST_SIZE = 2;
private IASTDeclSpecifier declSpecifier; private IASTDeclSpecifier declSpecifier;
/** /**

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/** /**
* @author jcamelon * @author jcamelon
@ -59,46 +60,17 @@ public class CPPASTTemplateDeclaration extends CPPASTNode implements
*/ */
public ICPPASTTemplateParameter [] getTemplateParameters() { public ICPPASTTemplateParameter [] getTemplateParameters() {
if( parameters == null ) return ICPPASTTemplateParameter.EMPTY_TEMPLATEPARAMETER_ARRAY; if( parameters == null ) return ICPPASTTemplateParameter.EMPTY_TEMPLATEPARAMETER_ARRAY;
removeNullParameters(); return (ICPPASTTemplateParameter[]) ArrayUtil.removeNulls( ICPPASTTemplateParameter.class, parameters );
return parameters;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration#addTemplateParamter(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration#addTemplateParamter(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter)
*/ */
public void addTemplateParamter(ICPPASTTemplateParameter parm) { public void addTemplateParamter(ICPPASTTemplateParameter parm) {
if( parameters == null ) parameters = (ICPPASTTemplateParameter[]) ArrayUtil.append( ICPPASTTemplateParameter.class, parameters, parm );
{
parameters = new ICPPASTTemplateParameter[ DEFAULT_PARMS_LIST_SIZE ];
currentIndex = 0;
}
if( parameters.length == currentIndex )
{
ICPPASTTemplateParameter [] old = parameters;
parameters = new ICPPASTTemplateParameter[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
parameters[i] = old[i];
}
parameters[ currentIndex++ ] = parm;
}
private void removeNullParameters() {
int nullCount = 0;
for( int i = 0; i < parameters.length; ++i )
if( parameters[i] == null )
++nullCount;
if( nullCount == 0 ) return;
ICPPASTTemplateParameter[] old = parameters;
int newSize = old.length - nullCount;
parameters = new ICPPASTTemplateParameter[ newSize ];
for( int i = 0; i < newSize; ++i )
parameters[i] = old[i];
currentIndex = newSize;
} }
private int currentIndex = 0;
private ICPPASTTemplateParameter [] parameters = null; private ICPPASTTemplateParameter [] parameters = null;
private static final int DEFAULT_PARMS_LIST_SIZE = 4;
public boolean accept( ASTVisitor action ){ public boolean accept( ASTVisitor action ){
if( action.shouldVisitDeclarations ){ if( action.shouldVisitDeclarations ){
switch( action.visit( this ) ){ switch( action.visit( this ) ){

View file

@ -17,6 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -43,38 +44,14 @@ public class CPPASTTemplateId extends CPPASTNode implements ICPPASTTemplateId, I
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId#addTemplateArgument(org.eclipse.cdt.core.dom.ast.IASTTypeId) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId#addTemplateArgument(org.eclipse.cdt.core.dom.ast.IASTTypeId)
*/ */
public void addTemplateArgument(IASTTypeId typeId) { public void addTemplateArgument(IASTTypeId typeId) {
if( templateArguments == null ) templateArguments = (IASTNode[]) ArrayUtil.append( IASTNode.class, templateArguments, typeId );
{
templateArguments = new IASTNode[ DEFAULT_ARGS_LIST_SIZE ];
currentIndex = 0;
}
if( templateArguments.length == currentIndex )
{
IASTNode [] old = templateArguments;
templateArguments = new IASTNode[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
templateArguments[i] = old[i];
}
templateArguments[ currentIndex++ ] = typeId;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId#addTemplateArgument(org.eclipse.cdt.core.dom.ast.IASTExpression) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId#addTemplateArgument(org.eclipse.cdt.core.dom.ast.IASTExpression)
*/ */
public void addTemplateArgument(IASTExpression expression) { public void addTemplateArgument(IASTExpression expression) {
if( templateArguments == null ) templateArguments = (IASTNode[]) ArrayUtil.append( IASTNode.class, templateArguments, expression );
{
templateArguments = new IASTNode[ DEFAULT_ARGS_LIST_SIZE ];
currentIndex = 0;
}
if( templateArguments.length == currentIndex )
{
IASTNode [] old = templateArguments;
templateArguments = new IASTNode[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
templateArguments[i] = old[i];
}
templateArguments[ currentIndex++ ] = expression;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -82,27 +59,10 @@ public class CPPASTTemplateId extends CPPASTNode implements ICPPASTTemplateId, I
*/ */
public IASTNode[] getTemplateArguments() { public IASTNode[] getTemplateArguments() {
if( templateArguments == null ) return ICPPASTTemplateId.EMPTY_ARG_ARRAY; if( templateArguments == null ) return ICPPASTTemplateId.EMPTY_ARG_ARRAY;
removeNullArguments(); return (IASTNode[]) ArrayUtil.removeNulls( IASTNode.class, templateArguments );
return templateArguments;
} }
private void removeNullArguments() {
int nullCount = 0;
for( int i = 0; i < templateArguments.length; ++i )
if( templateArguments[i] == null )
++nullCount;
if( nullCount == 0 ) return;
IASTNode [] old = templateArguments;
int newSize = old.length - nullCount;
templateArguments = new IASTNode[ newSize ];
for( int i = 0; i < newSize; ++i )
templateArguments[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTNode [] templateArguments = null; private IASTNode [] templateArguments = null;
private static final int DEFAULT_ARGS_LIST_SIZE = 4;
private IBinding binding = null; private IBinding binding = null;
/* (non-Javadoc) /* (non-Javadoc)
@ -185,12 +145,12 @@ public class CPPASTTemplateId extends CPPASTNode implements ICPPASTTemplateId, I
} }
public void replace(IASTNode child, IASTNode other) { public void replace(IASTNode child, IASTNode other) {
IASTNode[] ez = getTemplateArguments(); if( templateArguments == null ) return;
for (int i = 0; i < ez.length; ++i) { for (int i = 0; i < templateArguments.length; ++i) {
if (child == ez[i]) { if (child == templateArguments[i]) {
other.setPropertyInParent(child.getPropertyInParent()); other.setPropertyInParent(child.getPropertyInParent());
other.setParent(child.getParent()); other.setParent(child.getParent());
ez[i] = other; templateArguments[i] = other;
} }
} }
} }

View file

@ -17,6 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor; import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -27,42 +28,14 @@ public class CPPASTTemplatedTypeTemplateParameter extends CPPASTNode implements
public ICPPASTTemplateParameter[] getTemplateParameters() { public ICPPASTTemplateParameter[] getTemplateParameters() {
if( parameters == null ) return ICPPASTTemplateParameter.EMPTY_TEMPLATEPARAMETER_ARRAY; if( parameters == null ) return ICPPASTTemplateParameter.EMPTY_TEMPLATEPARAMETER_ARRAY;
removeNullParameters(); return (ICPPASTTemplateParameter[]) ArrayUtil.removeNulls( ICPPASTTemplateParameter.class, parameters );
return parameters;
} }
public void addTemplateParamter(ICPPASTTemplateParameter parm) { public void addTemplateParamter(ICPPASTTemplateParameter parm) {
if( parameters == null ) parameters = (ICPPASTTemplateParameter[]) ArrayUtil.append( ICPPASTTemplateParameter.class, parameters, parm );
{
parameters = new ICPPASTTemplateParameter[ DEFAULT_PARMS_LIST_SIZE ];
currentIndex = 0;
}
if( parameters.length == currentIndex )
{
ICPPASTTemplateParameter [] old = parameters;
parameters = new ICPPASTTemplateParameter[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
parameters[i] = old[i];
}
parameters[ currentIndex++ ] = parm;
}
private void removeNullParameters() {
int nullCount = 0;
for( int i = 0; i < parameters.length; ++i )
if( parameters[i] == null )
++nullCount;
if( nullCount == 0 ) return;
ICPPASTTemplateParameter[] old = parameters;
int newSize = old.length - nullCount;
parameters = new ICPPASTTemplateParameter[ newSize ];
for( int i = 0; i < newSize; ++i )
parameters[i] = old[i];
currentIndex = newSize;
} }
private int currentIndex = 0;
private ICPPASTTemplateParameter [] parameters = null; private ICPPASTTemplateParameter [] parameters = null;
private static final int DEFAULT_PARMS_LIST_SIZE = 4;
private IASTName name; private IASTName name;
private IASTExpression defaultValue; private IASTExpression defaultValue;

View file

@ -45,6 +45,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.ASTPreprocessorSelectionResult; import org.eclipse.cdt.internal.core.dom.parser.ASTPreprocessorSelectionResult;
import org.eclipse.cdt.internal.core.dom.parser.IRequiresLocationInformation; import org.eclipse.cdt.internal.core.dom.parser.IRequiresLocationInformation;
@ -56,16 +57,12 @@ import org.eclipse.cdt.internal.core.parser.scanner2.InvalidPreprocessorNodeExce
*/ */
public class CPPASTTranslationUnit extends CPPASTNode implements public class CPPASTTranslationUnit extends CPPASTNode implements
ICPPASTTranslationUnit, IRequiresLocationInformation { ICPPASTTranslationUnit, IRequiresLocationInformation {
private IASTDeclaration[] decls = null; private IASTDeclaration[] decls = new IASTDeclaration[32];
private ICPPNamespace binding = null; private ICPPNamespace binding = null;
private ICPPScope scope = null; private ICPPScope scope = null;
private static final int DEFAULT_CHILDREN_LIST_SIZE = 8;
private int currentIndex = 0;
private ILocationResolver resolver; private ILocationResolver resolver;
@ -82,17 +79,7 @@ public class CPPASTTranslationUnit extends CPPASTNode implements
private static final IASTName[] EMPTY_NAME_ARRAY = new IASTName[0]; private static final IASTName[] EMPTY_NAME_ARRAY = new IASTName[0];
public void addDeclaration(IASTDeclaration d) { public void addDeclaration(IASTDeclaration d) {
if (decls == null) { decls = (IASTDeclaration [])ArrayUtil.append( IASTDeclaration.class, decls, d );
decls = new IASTDeclaration[DEFAULT_CHILDREN_LIST_SIZE];
currentIndex = 0;
}
if (decls.length == currentIndex) {
IASTDeclaration[] old = decls;
decls = new IASTDeclaration[old.length * 2];
for (int i = 0; i < old.length; ++i)
decls[i] = old[i];
}
decls[currentIndex++] = d;
} }
/* /*
@ -103,26 +90,7 @@ public class CPPASTTranslationUnit extends CPPASTNode implements
public IASTDeclaration[] getDeclarations() { public IASTDeclaration[] getDeclarations() {
if (decls == null) if (decls == null)
return IASTDeclaration.EMPTY_DECLARATION_ARRAY; return IASTDeclaration.EMPTY_DECLARATION_ARRAY;
removeNullDeclarations(); return (IASTDeclaration[]) ArrayUtil.removeNulls( IASTDeclaration.class, decls );
return decls;
}
/**
* @param decls2
*/
private void removeNullDeclarations() {
int nullCount = 0;
for (int i = 0; i < decls.length; ++i)
if (decls[i] == null)
++nullCount;
if (nullCount == 0)
return;
IASTDeclaration[] old = decls;
int newSize = old.length - nullCount;
decls = new IASTDeclaration[newSize];
for (int i = 0; i < newSize; ++i)
decls[i] = old[i];
currentIndex = newSize;
} }
/* /*

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCatchHandler; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCatchHandler;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/** /**
@ -27,46 +28,19 @@ public class CPPASTTryBlockStatement extends CPPASTNode implements
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#addCatchHandler(org.eclipse.cdt.core.dom.ast.IASTStatement) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#addCatchHandler(org.eclipse.cdt.core.dom.ast.IASTStatement)
*/ */
public void addCatchHandler(ICPPASTCatchHandler statement) { public void addCatchHandler(ICPPASTCatchHandler statement) {
if( catchHandlers == null ) catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.append( ICPPASTCatchHandler.class, catchHandlers, statement );
{ }
catchHandlers = new ICPPASTCatchHandler[ DEFAULT_CATCH_HANDLER_LIST_SIZE ];
currentIndex = 0;
}
if( catchHandlers.length == currentIndex )
{
ICPPASTCatchHandler [] old = catchHandlers;
catchHandlers = new ICPPASTCatchHandler[ old.length * 2 ];
for( int i = 0; i < old.length; ++i )
catchHandlers[i] = old[i];
}
catchHandlers[ currentIndex++ ] = statement; }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#getCatchHandlers() * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionTryBlockDeclarator#getCatchHandlers()
*/ */
public ICPPASTCatchHandler[] getCatchHandlers() { public ICPPASTCatchHandler[] getCatchHandlers() {
if( catchHandlers == null ) return ICPPASTCatchHandler.EMPTY_CATCHHANDLER_ARRAY; if( catchHandlers == null ) return ICPPASTCatchHandler.EMPTY_CATCHHANDLER_ARRAY;
removeNullCatchHandlers(); return (ICPPASTCatchHandler[]) ArrayUtil.removeNulls( ICPPASTCatchHandler.class, catchHandlers );
return catchHandlers;
} }
private void removeNullCatchHandlers() {
int nullCount = 0;
for( int i = 0; i < catchHandlers.length; ++i )
if( catchHandlers[i] == null )
++nullCount;
if( nullCount == 0 ) return;
ICPPASTCatchHandler [] old = catchHandlers;
int newSize = old.length - nullCount;
catchHandlers = new ICPPASTCatchHandler[ newSize ];
for( int i = 0; i < newSize; ++i )
catchHandlers[i] = old[i];
currentIndex = newSize;
}
private int currentIndex = 0;
private ICPPASTCatchHandler [] catchHandlers = null; private ICPPASTCatchHandler [] catchHandlers = null;
private static final int DEFAULT_CATCH_HANDLER_LIST_SIZE = 4;
private IASTStatement tryBody; private IASTStatement tryBody;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement#setTryBody(org.eclipse.cdt.core.dom.ast.IASTStatement) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement#setTryBody(org.eclipse.cdt.core.dom.ast.IASTStatement)