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

Add toCharArray() to ITokenDuple. Add getCharImage() to IToken.

This commit is contained in:
John Camelon 2004-07-21 14:32:55 +00:00
parent b79790f788
commit 81a765a048
11 changed files with 72 additions and 18 deletions

View file

@ -845,7 +845,7 @@ public class CompletionParseTest extends CompletionParseBaseTest {
public void testBug59134() throws Exception public void testBug59134() throws Exception
{ {
String code = "int main(){ siz }"; //$NON-NLS-1$ String code = "int main(){ siz }"; //$NON-NLS-1$
IASTCompletionNode node = parse( code, code.indexOf(" siz") ); //$NON-NLS-1$ IASTCompletionNode node = parse( code, code.indexOf("siz") ); //$NON-NLS-1$
assertNotNull( node ); assertNotNull( node );
Iterator keywords = node.getKeywords(); Iterator keywords = node.getKeywords();
boolean passed = false; boolean passed = false;

View file

@ -58,6 +58,7 @@ public class SelectionParseBaseTest extends CompleteParseBaseTest {
{ {
assertNotNull( result ); assertNotNull( result );
String filename = result.getFilename(); String filename = result.getFilename();
assertNotNull( filename );
assertTrue( !filename.equals( "")); //$NON-NLS-1$ assertTrue( !filename.equals( "")); //$NON-NLS-1$
return (IASTNode) result.getOffsetableNamedElement(); return (IASTNode) result.getOffsetableNamedElement();
} }

View file

@ -20,6 +20,7 @@ public interface IToken {
// getters // getters
public int getType(); public int getType();
public String getImage(); public String getImage();
public char [] getCharImage();
public int getOffset(); public int getOffset();
public int getLength(); public int getLength();
public int getEndOffset(); public int getEndOffset();
@ -29,7 +30,8 @@ public interface IToken {
public IToken getNext(); public IToken getNext();
// setters // setters
public void setImage( String i ); public void setImage( String i );
public void setImage( char [] i );
public void setNext(IToken t); public void setNext(IToken t);
public void setType(int i); public void setType(int i);

View file

@ -37,6 +37,7 @@ public interface ITokenDuple {
public abstract Iterator iterator(); public abstract Iterator iterator();
public abstract String toString(); public abstract String toString();
public char [] toCharArray();
public abstract boolean isIdentifier(); public abstract boolean isIdentifier();
public abstract int length(); public abstract int length();

View file

@ -131,4 +131,20 @@ public class MacroExpansionToken implements IToken {
return false; return false;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#getCharImage()
*/
public char[] getCharImage() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#setImage(char[])
*/
public void setImage(char[] i) {
// TODO Auto-generated method stub
}
} }

View file

@ -326,7 +326,7 @@ public class Scanner2 implements IScanner, IScannerData {
int tokenType = IToken.tSTRING; int tokenType = IToken.tSTRING;
if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING ) if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING )
tokenType = IToken.tLSTRING; tokenType = IToken.tLSTRING;
lastToken = new ImagedToken(tokenType, lastToken.getImage() + nextToken.getImage(), nextToken.getEndOffset()); //TODO Fix this lastToken = new ImagedToken(tokenType, (lastToken.getImage() + nextToken.getImage()).toCharArray(), nextToken.getEndOffset()); //TODO Fix this
if (oldToken != null) if (oldToken != null)
oldToken.setNext(lastToken); oldToken.setNext(lastToken);
nextToken = fetchToken(); nextToken = fetchToken();
@ -747,7 +747,7 @@ public class Scanner2 implements IScanner, IScannerData {
int tokenType = keywords.get(buffer, start, len); int tokenType = keywords.get(buffer, start, len);
char [] result = removedEscapedNewline( CharArrayUtils.extract( buffer, start, len ) ); char [] result = removedEscapedNewline( CharArrayUtils.extract( buffer, start, len ) );
if (tokenType == keywords.undefined) if (tokenType == keywords.undefined)
return new ImagedToken(IToken.tIDENTIFIER, new String( result), bufferPos[bufferStackPos]+ 1); return new ImagedToken(IToken.tIDENTIFIER, result, bufferPos[bufferStackPos]+ 1);
return new SimpleToken(tokenType, start + len); return new SimpleToken(tokenType, start + len);
} }
@ -782,7 +782,7 @@ public class Scanner2 implements IScanner, IScannerData {
// We should really throw an exception if we didn't get the terminating // We should really throw an exception if we didn't get the terminating
// quote before the end of buffer // quote before the end of buffer
return new ImagedToken(tokenType, new String(buffer, stringStart, stringLen), stringStart + stringLen+ 1); return new ImagedToken(tokenType, CharArrayUtils.extract(buffer, stringStart, stringLen), stringStart + stringLen+ 1);
} }
private IToken scanCharLiteral(boolean b) { private IToken scanCharLiteral(boolean b) {
@ -799,7 +799,7 @@ public class Scanner2 implements IScanner, IScannerData {
} }
if (start >= limit) { if (start >= limit) {
return new ImagedToken(tokenType, new String(emptyCharArray), start); return new ImagedToken(tokenType, emptyCharArray, start);
} }
@ -822,7 +822,7 @@ public class Scanner2 implements IScanner, IScannerData {
? CharArrayUtils.extract(buffer, start, length) ? CharArrayUtils.extract(buffer, start, length)
: emptyCharArray; : emptyCharArray;
return new ImagedToken(tokenType, new String(image), start + length+ 1 ); return new ImagedToken(tokenType, image, start + length+ 1 );
} }
private IToken scanNumber() { private IToken scanNumber() {
@ -999,7 +999,7 @@ public class Scanner2 implements IScanner, IScannerData {
--bufferPos[bufferStackPos]; --bufferPos[bufferStackPos];
return new ImagedToken(isFloat ? IToken.tFLOATINGPT : IToken.tINTEGER, return new ImagedToken(isFloat ? IToken.tFLOATINGPT : IToken.tINTEGER,
new String(buffer, start, CharArrayUtils.extract(buffer, start,
bufferPos[bufferStackPos] - start + 1), bufferPos[bufferStackPos]+ 1); bufferPos[bufferStackPos] - start + 1), bufferPos[bufferStackPos]+ 1);
} }

View file

@ -494,5 +494,12 @@ public class BasicTokenDuple implements ITokenDuple {
public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) { public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ITokenDuple#toCharArray()
*/
public char[] toCharArray() {
return toString().toCharArray(); //TODO fix me!
}
} }

View file

@ -25,7 +25,7 @@ public class ImagedExpansionToken extends ImagedToken implements IToken {
* @param contextStack * @param contextStack
* @param i * @param i
*/ */
public ImagedExpansionToken(int t, ContextStack contextStack, String i) { public ImagedExpansionToken(int t, ContextStack contextStack, char[] i) {
super(t, contextStack, i); super(t, contextStack, i);
} }
@ -34,7 +34,7 @@ public class ImagedExpansionToken extends ImagedToken implements IToken {
* @param contextStack * @param contextStack
* @param i * @param i
*/ */
public ImagedExpansionToken(int t, String i, int macroOffset, int macroLength ) { public ImagedExpansionToken(int t, char[] i, int macroOffset, int macroLength ) {
super(t, i, macroOffset ); super(t, i, macroOffset );
setOffsetAndLength( macroOffset, macroLength ); setOffsetAndLength( macroOffset, macroLength );
} }

View file

@ -18,20 +18,20 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerContext;
*/ */
public class ImagedToken extends SimpleToken { public class ImagedToken extends SimpleToken {
protected String image = null; protected char [] image = null;
/** /**
* @param t * @param t
* @param contextStack * @param contextStack
* @param i * @param i
*/ */
public ImagedToken(int t, ContextStack contextStack, String i) { public ImagedToken(int t, ContextStack contextStack, char[] i) {
super(t, contextStack); super(t, contextStack);
setImage( i ); setImage( i );
setOffsetAndLength(contextStack.getCurrentContext()); setOffsetAndLength(contextStack.getCurrentContext());
} }
public ImagedToken( int t, String i, int endOffset) { public ImagedToken( int t, char[] i, int endOffset) {
super( t, 0 ); super( t, 0 );
setImage(i); setImage(i);
setOffsetAndLength( endOffset ); setOffsetAndLength( endOffset );
@ -42,13 +42,19 @@ public class ImagedToken extends SimpleToken {
* @see org.eclipse.cdt.internal.core.parser.token.AbstractToken#getImage() * @see org.eclipse.cdt.internal.core.parser.token.AbstractToken#getImage()
*/ */
public final String getImage() { public final String getImage() {
return image; if( image == null ) return null;
return new String( image );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#setImage(java.lang.String) * @see org.eclipse.cdt.core.parser.IToken#setImage(java.lang.String)
*/ */
public void setImage(String i) { public void setImage(String i) {
image = i; image = i.toCharArray();
}
public void setImage( char [] image )
{
this.image = image;
} }
/** /**

View file

@ -329,4 +329,25 @@ public class SimpleToken extends AbstractToken implements IToken {
// do nothing // do nothing
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#getCharImage()
*/
public char[] getCharImage() {
return getImage().toCharArray(); //TODO - fix me!
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#setImage(char[])
*/
public void setImage(char[] i) {
// do nothing
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ITokenDuple#toCharArray()
*/
public char[] toCharArray() {
return getCharImage();
}
} }

View file

@ -40,14 +40,14 @@ public class TokenFactory {
*/ */
public static IToken createUniquelyImagedToken(int type, String image, IScannerData scannerData) { public static IToken createUniquelyImagedToken(int type, String image, IScannerData scannerData) {
if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION ) if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION )
return new ImagedExpansionToken( type, scannerData.getContextStack(), image ); return new ImagedExpansionToken( type, scannerData.getContextStack(), image.toCharArray() );
return new ImagedToken(type, scannerData.getContextStack(), image ); return new ImagedToken(type, scannerData.getContextStack(), image.toCharArray() );
} }
public static IToken createStandAloneToken( int type, String image ) public static IToken createStandAloneToken( int type, String image )
{ {
return new ImagedToken( type, image, 0); return new ImagedToken( type, image.toCharArray(), 0);
} }
public static ITokenDuple createTokenDuple( IToken first, IToken last ) public static ITokenDuple createTokenDuple( IToken first, IToken last )