mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-05 07:15:39 +02:00
Moved clients towards IASTNode.getFileLocation() and away from IASTTranslationUnit.flattenLocations( ... ).
This commit is contained in:
parent
e4f34ad3b5
commit
24648ae9ed
13 changed files with 41 additions and 60 deletions
|
@ -1632,7 +1632,7 @@ public class AST2SelectionParseTest extends AST2SelectionParseBaseTest {
|
||||||
|
|
||||||
IASTTranslationUnit tu = parse(file, ParserLanguage.CPP, false, true);
|
IASTTranslationUnit tu = parse(file, ParserLanguage.CPP, false, true);
|
||||||
IASTPreprocessorStatement[] stmts = tu.getAllPreprocessorStatements();
|
IASTPreprocessorStatement[] stmts = tu.getAllPreprocessorStatements();
|
||||||
IASTFileLocation fileLoc = tu.flattenLocationsToFile(stmts[5].getNodeLocations());
|
IASTFileLocation fileLoc = stmts[5].getFileLocation();
|
||||||
int fileOffset = test2_h.indexOf("#ifndef _WINGDI_H");
|
int fileOffset = test2_h.indexOf("#ifndef _WINGDI_H");
|
||||||
int fileLocOffset = fileLoc.getNodeOffset();
|
int fileLocOffset = fileLoc.getNodeOffset();
|
||||||
assertEquals(fileOffset, fileLocOffset);
|
assertEquals(fileOffset, fileLocOffset);
|
||||||
|
|
|
@ -344,7 +344,7 @@ public class DOMLocationInclusionTests extends FileBasePluginTest {
|
||||||
IASTPreprocessorMacroDefinition INCLUDE_H = macro_defs[1];
|
IASTPreprocessorMacroDefinition INCLUDE_H = macro_defs[1];
|
||||||
final IASTNodeLocation[] nodeLocations = INCLUDE_H.getName().getNodeLocations();
|
final IASTNodeLocation[] nodeLocations = INCLUDE_H.getName().getNodeLocations();
|
||||||
assertEquals( nodeLocations.length, 1 );
|
assertEquals( nodeLocations.length, 1 );
|
||||||
final IASTFileLocation flatLoc = tu.flattenLocationsToFile( nodeLocations );
|
final IASTFileLocation flatLoc = INCLUDE_H.getName().getFileLocation();
|
||||||
assertNotNull( flatLoc );
|
assertNotNull( flatLoc );
|
||||||
assertEquals( include_file.getLocation().toOSString(), flatLoc.getFileName() );
|
assertEquals( include_file.getLocation().toOSString(), flatLoc.getFileName() );
|
||||||
assertEquals( inc_file_code.indexOf( "#define _INCLUDE_H_") + "#define ".length(), flatLoc.getNodeOffset() ); //$NON-NLS-1$ //$NON-NLS-2$
|
assertEquals( inc_file_code.indexOf( "#define _INCLUDE_H_") + "#define ".length(), flatLoc.getNodeOffset() ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
|
@ -209,7 +209,7 @@ public class DOMLocationMacroTests extends AST2BaseTest {
|
||||||
IASTFileLocation tenth_loc = (IASTFileLocation) nodeLocations[9];
|
IASTFileLocation tenth_loc = (IASTFileLocation) nodeLocations[9];
|
||||||
assertEquals( 1, tenth_loc.getNodeLength() );
|
assertEquals( 1, tenth_loc.getNodeLength() );
|
||||||
|
|
||||||
final IASTFileLocation flatLocation = tu.flattenLocationsToFile(nodeLocations);
|
final IASTFileLocation flatLocation = var.getFileLocation();
|
||||||
assertNotNull( flatLocation);
|
assertNotNull( flatLocation);
|
||||||
assertEquals( code.indexOf("XYZ IT C_PO C_PO V;"), flatLocation.getNodeOffset() ); //$NON-NLS-1$
|
assertEquals( code.indexOf("XYZ IT C_PO C_PO V;"), flatLocation.getNodeOffset() ); //$NON-NLS-1$
|
||||||
assertEquals( "XYZ IT C_PO C_PO V;".length(), flatLocation.getNodeLength() ); //$NON-NLS-1$
|
assertEquals( "XYZ IT C_PO C_PO V;".length(), flatLocation.getNodeLength() ); //$NON-NLS-1$
|
||||||
|
@ -244,13 +244,13 @@ public class DOMLocationMacroTests extends AST2BaseTest {
|
||||||
IASTFileLocation loc_4 = (IASTFileLocation) locations[3];
|
IASTFileLocation loc_4 = (IASTFileLocation) locations[3];
|
||||||
assertEquals( loc_4.getNodeOffset(), code.indexOf( ";")); //$NON-NLS-1$
|
assertEquals( loc_4.getNodeOffset(), code.indexOf( ";")); //$NON-NLS-1$
|
||||||
assertEquals( loc_4.getNodeLength(), 1 );
|
assertEquals( loc_4.getNodeLength(), 1 );
|
||||||
IASTFileLocation flat = tu.flattenLocationsToFile(locations);
|
IASTFileLocation flat = memchr.getFileLocation();
|
||||||
assertEquals( flat.getNodeOffset() , code.indexOf( "_PTR _EXFUN(memchr,(const _PTR, int, size_t));")); //$NON-NLS-1$
|
assertEquals( flat.getNodeOffset() , code.indexOf( "_PTR _EXFUN(memchr,(const _PTR, int, size_t));")); //$NON-NLS-1$
|
||||||
assertEquals( flat.getNodeLength(), "_PTR _EXFUN(memchr,(const _PTR, int, size_t));".length() ); //$NON-NLS-1$
|
assertEquals( flat.getNodeLength(), "_PTR _EXFUN(memchr,(const _PTR, int, size_t));".length() ); //$NON-NLS-1$
|
||||||
|
|
||||||
IASTDeclarator d = memchr.getDeclarators()[0];
|
IASTDeclarator d = memchr.getDeclarators()[0];
|
||||||
final IASTNodeLocation[] declaratorLocations = d.getNodeLocations();
|
final IASTNodeLocation[] declaratorLocations = d.getNodeLocations();
|
||||||
IASTFileLocation f = tu.flattenLocationsToFile( declaratorLocations );
|
IASTFileLocation f = d.getFileLocation();
|
||||||
assertEquals( code.indexOf( "_PTR _EXFUN(memchr,(const _PTR, int, size_t))"), f.getNodeOffset() ); //$NON-NLS-1$
|
assertEquals( code.indexOf( "_PTR _EXFUN(memchr,(const _PTR, int, size_t))"), f.getNodeOffset() ); //$NON-NLS-1$
|
||||||
assertEquals( "_PTR _EXFUN(memchr,(const _PTR, int, size_t))".length(), f.getNodeLength() ); //$NON-NLS-1$
|
assertEquals( "_PTR _EXFUN(memchr,(const _PTR, int, size_t))".length(), f.getNodeLength() ); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ public abstract class ASTNode implements IASTNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
private IASTNodeLocation[] locations = null;
|
private IASTNodeLocation[] locations = null;
|
||||||
|
private IASTFileLocation fileLocation = null;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
|
@ -83,6 +84,9 @@ public abstract class ASTNode implements IASTNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
public IASTFileLocation getFileLocation() {
|
public IASTFileLocation getFileLocation() {
|
||||||
return getTranslationUnit().flattenLocationsToFile( getNodeLocations() );
|
if( fileLocation != null )
|
||||||
|
return fileLocation;
|
||||||
|
fileLocation = getTranslationUnit().flattenLocationsToFile( getNodeLocations() );
|
||||||
|
return fileLocation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@ import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
|
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||||
|
@ -197,8 +196,7 @@ public class ProblemBinding implements IProblemBinding, IType, IScope {
|
||||||
|
|
||||||
public int getLineNumber() {
|
public int getLineNumber() {
|
||||||
if( node != null ){
|
if( node != null ){
|
||||||
IASTNodeLocation [] locs = node.getNodeLocations();
|
IASTFileLocation fileLoc = node.getFileLocation();
|
||||||
IASTFileLocation fileLoc = node.getTranslationUnit().flattenLocationsToFile( locs );
|
|
||||||
return fileLoc.getStartingLineNumber();
|
return fileLoc.getStartingLineNumber();
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -18,7 +18,6 @@ import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
|
||||||
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
|
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.internal.core.parser.ParserMessages;
|
import org.eclipse.cdt.internal.core.parser.ParserMessages;
|
||||||
|
@ -270,24 +269,19 @@ public class CASTProblem extends CASTNode implements IASTProblem {
|
||||||
msg = MessageFormat.format(msg, new Object[] { new String(arg) });
|
msg = MessageFormat.format(msg, new Object[] { new String(arg) });
|
||||||
}
|
}
|
||||||
|
|
||||||
IASTNodeLocation [] locs = getNodeLocations();
|
|
||||||
String file = null;
|
String file = null;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
if( locs != null && locs.length == 1 && locs[0] instanceof IASTFileLocation ){
|
IASTFileLocation f = getFileLocation();
|
||||||
file = ((IASTFileLocation) locs[0]).getFileName();
|
if( f == null )
|
||||||
offset = locs[0].getNodeOffset();
|
{
|
||||||
} else {
|
file = ""; //$NON-NLS-1$
|
||||||
IASTFileLocation f = getTranslationUnit().flattenLocationsToFile(locs);
|
offset = 0;
|
||||||
if( f == null )
|
}
|
||||||
{
|
else
|
||||||
file = ""; //$NON-NLS-1$
|
{
|
||||||
offset = 0;
|
file = f.getFileName();
|
||||||
}
|
offset = f.getNodeOffset();
|
||||||
else
|
|
||||||
{
|
|
||||||
file = f.getFileName();
|
|
||||||
offset = f.getNodeOffset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Object[] args = new Object[] { msg, file, new Integer( offset ) }; //$NON-NLS-1$
|
Object[] args = new Object[] { msg, file, new Integer( offset ) }; //$NON-NLS-1$
|
||||||
|
|
|
@ -18,7 +18,6 @@ import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
|
||||||
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
|
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.internal.core.parser.ParserMessages;
|
import org.eclipse.cdt.internal.core.parser.ParserMessages;
|
||||||
|
@ -269,24 +268,19 @@ public class CPPASTProblem extends CPPASTNode implements IASTProblem {
|
||||||
msg = MessageFormat.format(msg, new Object[] { new String(arg) });
|
msg = MessageFormat.format(msg, new Object[] { new String(arg) });
|
||||||
}
|
}
|
||||||
|
|
||||||
IASTNodeLocation [] locs = getNodeLocations();
|
|
||||||
String file = null;
|
String file = null;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
if( locs != null && locs.length == 1 && locs[0] instanceof IASTFileLocation ){
|
IASTFileLocation f = getFileLocation();
|
||||||
file = ((IASTFileLocation) locs[0]).getFileName();
|
if( f == null )
|
||||||
offset = locs[0].getNodeOffset();
|
{
|
||||||
} else {
|
file = ""; //$NON-NLS-1$
|
||||||
IASTFileLocation f = getTranslationUnit().flattenLocationsToFile(locs);
|
offset = 0;
|
||||||
if( f == null )
|
}
|
||||||
{
|
else
|
||||||
file = ""; //$NON-NLS-1$
|
{
|
||||||
offset = 0;
|
file = f.getFileName();
|
||||||
}
|
offset = f.getNodeOffset();
|
||||||
else
|
|
||||||
{
|
|
||||||
file = f.getFileName();
|
|
||||||
offset = f.getNodeOffset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Object[] args = new Object[] { msg, file, new Integer(offset) }; //$NON-NLS-1$
|
Object[] args = new Object[] { msg, file, new Integer(offset) }; //$NON-NLS-1$
|
||||||
message = ParserMessages.getFormattedString(AST_PROBLEM_PATTERN, args);
|
message = ParserMessages.getFormattedString(AST_PROBLEM_PATTERN, args);
|
||||||
|
|
|
@ -91,7 +91,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
|
||||||
}
|
}
|
||||||
|
|
||||||
public IASTFileLocation asFileLocation() {
|
public IASTFileLocation asFileLocation() {
|
||||||
return rootNode.flattenLocationsToFile(getExpansionLocations());
|
return rootNode.flattenLocationsToFile(locations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
|
@ -284,30 +284,21 @@ public class DOMASTNodeLeaf implements IAdaptable {
|
||||||
public String getFilename()
|
public String getFilename()
|
||||||
{
|
{
|
||||||
if ( node == null ) return BLANK_STRING;
|
if ( node == null ) return BLANK_STRING;
|
||||||
IASTNodeLocation [] location = node.getNodeLocations();
|
IASTFileLocation f = node.getFileLocation();
|
||||||
if( location.length == 1 && location[0] instanceof IASTFileLocation )
|
|
||||||
return ((IASTFileLocation)location[0]).getFileName();
|
|
||||||
IASTFileLocation f = node.getTranslationUnit().flattenLocationsToFile(location);
|
|
||||||
if( f == null )
|
if( f == null )
|
||||||
return BLANK_STRING; //$NON-NLS-1$
|
return BLANK_STRING; //$NON-NLS-1$
|
||||||
return f.getFileName();
|
return f.getFileName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getOffset() {
|
public int getOffset() {
|
||||||
IASTNodeLocation [] location = node.getNodeLocations();
|
IASTFileLocation f = node.getFileLocation();
|
||||||
if( location.length == 1 && location[0] instanceof IASTFileLocation )
|
|
||||||
return location[0].getNodeOffset();
|
|
||||||
IASTFileLocation f = node.getTranslationUnit().flattenLocationsToFile(location);
|
|
||||||
if( f == null )
|
if( f == null )
|
||||||
return 0; //$NON-NLS-1$
|
return 0; //$NON-NLS-1$
|
||||||
return f.getNodeOffset();
|
return f.getNodeOffset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLength() {
|
public int getLength() {
|
||||||
IASTNodeLocation [] location = node.getNodeLocations();
|
IASTFileLocation f = node.getFileLocation();
|
||||||
if( location.length == 1 && location[0] instanceof IASTFileLocation )
|
|
||||||
return location[0].getNodeLength();
|
|
||||||
IASTFileLocation f = node.getTranslationUnit().flattenLocationsToFile(location);
|
|
||||||
if( f == null )
|
if( f == null )
|
||||||
return 0; //$NON-NLS-1$
|
return 0; //$NON-NLS-1$
|
||||||
return f.getNodeLength();
|
return f.getNodeLength();
|
||||||
|
|
|
@ -93,7 +93,7 @@ public class DOMDisplaySearchNames extends CSearchQuery implements ISearchQuery
|
||||||
int start = 0;
|
int start = 0;
|
||||||
int end = 0;
|
int end = 0;
|
||||||
if ( nodes[i] != null ) {
|
if ( nodes[i] != null ) {
|
||||||
IASTFileLocation location = nodes[i].getTranslationUnit().flattenLocationsToFile( nodes[i].getNodeLocations() );
|
IASTFileLocation location = nodes[i].getFileLocation();
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
return new Status(IStatus.ERROR, CUIPlugin.getPluginId(), 0, "Null Location associated with IASTFileLocation.", null); //$NON-NLS-1$
|
return new Status(IStatus.ERROR, CUIPlugin.getPluginId(), 0, "Null Location associated with IASTFileLocation.", null); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,7 @@ public class DOMQuery extends CSearchQuery implements ISearchQuery {
|
||||||
int end = 0;
|
int end = 0;
|
||||||
|
|
||||||
if ( foundNames[i].getTranslationUnit() != null ) {
|
if ( foundNames[i].getTranslationUnit() != null ) {
|
||||||
IASTFileLocation location = foundNames[i].getTranslationUnit().flattenLocationsToFile( foundNames[i].getNodeLocations() );
|
IASTFileLocation location = foundNames[i].getFileLocation();
|
||||||
fileName = location.getFileName();
|
fileName = location.getFileName();
|
||||||
start = location.getNodeOffset();
|
start = location.getNodeOffset();
|
||||||
end = location.getNodeOffset() + location.getNodeLength();
|
end = location.getNodeOffset() + location.getNodeLength();
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
|
||||||
int end=0;
|
int end=0;
|
||||||
|
|
||||||
if ( domNames[0].getTranslationUnit() != null ) {
|
if ( domNames[0].getTranslationUnit() != null ) {
|
||||||
IASTFileLocation location = domNames[0].getTranslationUnit().flattenLocationsToFile( domNames[0].getNodeLocations() );
|
IASTFileLocation location = domNames[0].getFileLocation();
|
||||||
fileName = location.getFileName();
|
fileName = location.getFileName();
|
||||||
start = location.getNodeOffset();
|
start = location.getNodeOffset();
|
||||||
end = location.getNodeOffset() + location.getNodeLength();
|
end = location.getNodeOffset() + location.getNodeLength();
|
||||||
|
|
|
@ -161,7 +161,7 @@ public class OpenDefinitionAction extends SelectionParseAction implements
|
||||||
int end=0;
|
int end=0;
|
||||||
|
|
||||||
if ( domNames[0].getTranslationUnit() != null ) {
|
if ( domNames[0].getTranslationUnit() != null ) {
|
||||||
IASTFileLocation location = domNames[0].getTranslationUnit().flattenLocationsToFile( domNames[0].getNodeLocations() );
|
IASTFileLocation location = domNames[0].getFileLocation();
|
||||||
fileName = location.getFileName();
|
fileName = location.getFileName();
|
||||||
start = location.getNodeOffset();
|
start = location.getNodeOffset();
|
||||||
end = location.getNodeOffset() + location.getNodeLength();
|
end = location.getNodeOffset() + location.getNodeLength();
|
||||||
|
|
Loading…
Add table
Reference in a new issue