1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-13 11:15:38 +02:00

Pretty printing qualified names.

This commit is contained in:
John Camelon 2005-02-08 14:59:35 +00:00
parent cc8d114f90
commit e20bdb8813
2 changed files with 128 additions and 119 deletions

View file

@ -17,141 +17,149 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
/**
* @author jcamelon
*/
public class CPPASTQualifiedName extends CPPASTNode implements ICPPASTQualifiedName {
public class CPPASTQualifiedName extends CPPASTNode implements
ICPPASTQualifiedName {
/**
* @param duple
*/
public CPPASTQualifiedName() {
}
/**
* @param duple
*/
public CPPASTQualifiedName() {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTName#resolveBinding()
*/
public IBinding resolveBinding() {
//The full qualified name resolves to the same thing as the last name
removeNullNames();
return names[ names.length - 1 ].resolveBinding();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.dom.ast.IASTName#resolveBinding()
*/
public IBinding resolveBinding() {
//The full qualified name resolves to the same thing as the last name
removeNullNames();
return names[names.length - 1].resolveBinding();
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
if( names == null ) return null;
removeNullNames();
StringBuffer buffer = new StringBuffer();
for( int i = 0; i < names.length; ++i )
{
String n = names[i].toString();
if( n == null )
return null;
buffer.append( n );
if( i != names.length - 1 )
buffer.append( "::"); //$NON-NLS-1$
}
return buffer.toString();
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
public String toString() {
return signature;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#addName(org.eclipse.cdt.core.dom.ast.IASTName)
*/
public void addName(IASTName name) {
if( names == null )
{
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
*/
private void removeNullNames() {
int nullCount = 0;
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 )
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#addName(org.eclipse.cdt.core.dom.ast.IASTName)
*/
public void addName(IASTName name) {
if (names == null) {
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];
currentIndex = newSize;
}
private int currentIndex = 0;
private IASTName [] names = null;
private static final int DEFAULT_NAMES_LIST_SIZE = 4;
private boolean value;
}
names[currentIndex++] = name;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#getNames()
*/
public IASTName[] getNames() {
if( names == null ) return IASTName.EMPTY_NAME_ARRAY;
removeNullNames();
return names;
}
/**
* @param decls2
*/
private void removeNullNames() {
int nullCount = 0;
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;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTName#toCharArray()
*/
public char[] toCharArray() {
if( names == null ) return null;
removeNullNames();
//count first
int len = 0;
for( int i = 0; i < names.length; ++i )
{
char [] n = names[i].toCharArray();
if( n == null )
return null;
len += n.length;
if( i != names.length - 1 )
len += 2;
}
char [] nameArray = new char[ len ];
int pos = 0;
for( int i = 0; i < names.length; i++ ){
char [] n = names[i].toCharArray();
System.arraycopy( n, 0, nameArray, pos, n.length );
pos += n.length;
if( i != names.length - 1 ){
nameArray[pos++] = ':';
nameArray[pos++] = ':';
}
}
return nameArray;
}
private int currentIndex = 0;
private IASTName[] names = null;
private static final int DEFAULT_NAMES_LIST_SIZE = 4;
private boolean value;
private String signature;
/* (non-Javadoc)
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#getNames()
*/
public IASTName[] getNames() {
if (names == null)
return IASTName.EMPTY_NAME_ARRAY;
removeNullNames();
return names;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.dom.ast.IASTName#toCharArray()
*/
public char[] toCharArray() {
if (names == null)
return null;
removeNullNames();
//count first
int len = 0;
for (int i = 0; i < names.length; ++i) {
char[] n = names[i].toCharArray();
if (n == null)
return null;
len += n.length;
if (i != names.length - 1)
len += 2;
}
char[] nameArray = new char[len];
int pos = 0;
for (int i = 0; i < names.length; i++) {
char[] n = names[i].toCharArray();
System.arraycopy(n, 0, nameArray, pos, n.length);
pos += n.length;
if (i != names.length - 1) {
nameArray[pos++] = ':';
nameArray[pos++] = ':';
}
}
return nameArray;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#isFullyQualified()
*/
public boolean isFullyQualified() {
return value;
}
/* (non-Javadoc)
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#setFullyQualified(boolean)
*/
public void setFullyQualified(boolean value) {
this.value = value;
}
}
/**
* @param string
*/
public void setValue(String string) {
this.signature = string;
}
}

View file

@ -2486,6 +2486,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
CPPASTQualifiedName result = new CPPASTQualifiedName();
result.setOffsetAndLength(duple.getStartOffset(), duple.getEndOffset()
- duple.getStartOffset());
result.setValue( duple.toString() );
ITokenDuple[] segments = duple.getSegments();
int startingValue = 0;
if( segments.length > 0 &&