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)
*
* @see java.lang.Object#toString()
*/
public String toString() {
return signature;
}
/*
/* (non-Javadoc) * (non-Javadoc)
* @see java.lang.Object#toString() *
*/ * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#addName(org.eclipse.cdt.core.dom.ast.IASTName)
public String toString() { */
if( names == null ) return null; public void addName(IASTName name) {
removeNullNames(); if (names == null) {
StringBuffer buffer = new StringBuffer(); names = new IASTName[DEFAULT_NAMES_LIST_SIZE];
for( int i = 0; i < names.length; ++i ) currentIndex = 0;
{ }
String n = names[i].toString(); if (names.length == currentIndex) {
if( n == null ) IASTName[] old = names;
return null; names = new IASTName[old.length * 2];
buffer.append( n ); for (int i = 0; i < old.length; ++i)
if( i != names.length - 1 )
buffer.append( "::"); //$NON-NLS-1$
}
return buffer.toString();
}
/* (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 )
names[i] = old[i]; names[i] = old[i];
currentIndex = newSize; }
} names[currentIndex++] = name;
}
private int currentIndex = 0; /**
private IASTName [] names = null; * @param decls2
private static final int DEFAULT_NAMES_LIST_SIZE = 4; */
private boolean value; 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) private int currentIndex = 0;
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#getNames() private IASTName[] names = null;
*/ private static final int DEFAULT_NAMES_LIST_SIZE = 4;
public IASTName[] getNames() { private boolean value;
if( names == null ) return IASTName.EMPTY_NAME_ARRAY; private String signature;
removeNullNames();
return names;
}
/* (non-Javadoc) /*
* @see org.eclipse.cdt.core.dom.ast.IASTName#toCharArray() * (non-Javadoc)
*/ *
public char[] toCharArray() { * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName#getNames()
if( names == null ) return null; */
removeNullNames(); public IASTName[] getNames() {
if (names == null)
return IASTName.EMPTY_NAME_ARRAY;
removeNullNames();
return names;
}
//count first /*
int len = 0; * (non-Javadoc)
for( int i = 0; i < names.length; ++i ) *
{ * @see org.eclipse.cdt.core.dom.ast.IASTName#toCharArray()
char [] n = names[i].toCharArray(); */
if( n == null ) public char[] toCharArray() {
return null; if (names == null)
len += n.length; return null;
if( i != names.length - 1 ) removeNullNames();
len += 2;
}
char [] nameArray = new char[ len ]; //count first
int pos = 0; int len = 0;
for( int i = 0; i < names.length; i++ ){ for (int i = 0; i < names.length; ++i) {
char [] n = names[i].toCharArray(); char[] n = names[i].toCharArray();
System.arraycopy( n, 0, nameArray, pos, n.length ); if (n == null)
pos += n.length; return null;
if( i != names.length - 1 ){ len += n.length;
nameArray[pos++] = ':'; if (i != names.length - 1)
nameArray[pos++] = ':'; len += 2;
} }
}
return nameArray;
}
/* (non-Javadoc) 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 &&