1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-14 11:45: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 * @author jcamelon
*/ */
public class CPPASTQualifiedName extends CPPASTNode implements ICPPASTQualifiedName { public class CPPASTQualifiedName extends CPPASTNode implements
ICPPASTQualifiedName {
/** /**
* @param duple * @param duple
*/ */
public CPPASTQualifiedName() { public CPPASTQualifiedName() {
} }
/* (non-Javadoc) /*
* @see org.eclipse.cdt.core.dom.ast.IASTName#resolveBinding() * (non-Javadoc)
*/ *
public IBinding resolveBinding() { * @see org.eclipse.cdt.core.dom.ast.IASTName#resolveBinding()
//The full qualified name resolves to the same thing as the last name */
removeNullNames(); public IBinding resolveBinding() {
return names[ names.length - 1 ].resolveBinding(); //The full qualified name resolves to the same thing as the last name
} removeNullNames();
return names[names.length - 1].resolveBinding();
}
/*
* (non-Javadoc)
/* (non-Javadoc) *
* @see java.lang.Object#toString() * @see java.lang.Object#toString()
*/ */
public String toString() { public String toString() {
if( names == null ) return null; return signature;
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) * (non-Javadoc)
* @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) { */
if( names == null ) public void addName(IASTName name) {
{ if (names == null) {
names = new IASTName[ DEFAULT_NAMES_LIST_SIZE ]; names = new IASTName[DEFAULT_NAMES_LIST_SIZE];
currentIndex = 0; currentIndex = 0;
} }
if( names.length == currentIndex ) if (names.length == currentIndex) {
{ IASTName[] old = names;
IASTName [] old = names; names = new IASTName[old.length * 2];
names = new IASTName[ old.length * 2 ]; for (int i = 0; i < old.length; ++i)
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 )
names[i] = old[i]; names[i] = old[i];
currentIndex = newSize; }
} names[currentIndex++] = name;
}
private int currentIndex = 0;
private IASTName [] names = null;
private static final int DEFAULT_NAMES_LIST_SIZE = 4;
private boolean value;
/* (non-Javadoc) /**
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#getNames() * @param decls2
*/ */
public IASTName[] getNames() { private void removeNullNames() {
if( names == null ) return IASTName.EMPTY_NAME_ARRAY; int nullCount = 0;
removeNullNames(); for (int i = 0; i < names.length; ++i)
return names; 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) private int currentIndex = 0;
* @see org.eclipse.cdt.core.dom.ast.IASTName#toCharArray() private IASTName[] names = null;
*/ private static final int DEFAULT_NAMES_LIST_SIZE = 4;
public char[] toCharArray() { private boolean value;
if( names == null ) return null; private String signature;
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) /*
* (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() * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#isFullyQualified()
*/ */
public boolean isFullyQualified() { public boolean isFullyQualified() {
return value; return value;
} }
/* (non-Javadoc) /*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#setFullyQualified(boolean) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#setFullyQualified(boolean)
*/ */
public void setFullyQualified(boolean value) { public void setFullyQualified(boolean value) {
this.value = 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(); CPPASTQualifiedName result = new CPPASTQualifiedName();
result.setOffsetAndLength(duple.getStartOffset(), duple.getEndOffset() result.setOffsetAndLength(duple.getStartOffset(), duple.getEndOffset()
- duple.getStartOffset()); - duple.getStartOffset());
result.setValue( duple.toString() );
ITokenDuple[] segments = duple.getSegments(); ITokenDuple[] segments = duple.getSegments();
int startingValue = 0; int startingValue = 0;
if( segments.length > 0 && if( segments.length > 0 &&