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:
parent
cc8d114f90
commit
e20bdb8813
2 changed files with 128 additions and 119 deletions
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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 &&
|
||||
|
|
Loading…
Add table
Reference in a new issue