more tracking of sourse positions for function parameters
This commit is contained in:
parent
d2852beebf
commit
9aed4e058d
|
@ -274,7 +274,12 @@ public abstract class JDTJava2CAstTranslator<T extends Position> {
|
||||||
protected final class ClassEntity implements CAstEntity {
|
protected final class ClassEntity implements CAstEntity {
|
||||||
// TAGALONG (not static, will keep reference to ast, fIdentityMapper, etc)
|
// TAGALONG (not static, will keep reference to ast, fIdentityMapper, etc)
|
||||||
|
|
||||||
private final String fName;
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final String fName;
|
||||||
|
|
||||||
private final Collection<CAstQualifier> fQuals;
|
private final Collection<CAstQualifier> fQuals;
|
||||||
|
|
||||||
|
@ -1031,7 +1036,13 @@ public abstract class JDTJava2CAstTranslator<T extends Position> {
|
||||||
return new CAstType.Method() {
|
return new CAstType.Method() {
|
||||||
private Collection<CAstType> fExceptionTypes = null;
|
private Collection<CAstType> fExceptionTypes = null;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
public boolean isStatic() {
|
||||||
|
return getQualifiers().contains(CAstQualifier.STATIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public CAstType getReturnType() {
|
public CAstType getReturnType() {
|
||||||
if (fReturnType != null)
|
if (fReturnType != null)
|
||||||
return fTypeDict.getCAstTypeFor(fReturnType);
|
return fTypeDict.getCAstTypeFor(fReturnType);
|
||||||
|
@ -1088,6 +1099,13 @@ public abstract class JDTJava2CAstTranslator<T extends Position> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
SingleVariableDeclaration p = (SingleVariableDeclaration) fDecl.parameters().get(arg);
|
||||||
|
return makePosition(p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ////////////////////////////////////
|
// ////////////////////////////////////
|
||||||
|
@ -1239,6 +1257,12 @@ public abstract class JDTJava2CAstTranslator<T extends Position> {
|
||||||
public CAstType getType() {
|
public CAstType getType() {
|
||||||
return fTypeDict.getCAstTypeFor(type);
|
return fTypeDict.getCAstTypeFor(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /////////////////////////////////////
|
// /////////////////////////////////////
|
||||||
|
@ -3016,6 +3040,11 @@ public abstract class JDTJava2CAstTranslator<T extends Position> {
|
||||||
Assertions.UNREACHABLE("CompilationUnitEntity.getType()");
|
Assertions.UNREACHABLE("CompilationUnitEntity.getType()");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /////////////////////////////
|
// /////////////////////////////
|
||||||
|
|
|
@ -27,6 +27,7 @@ import com.ibm.wala.cast.tree.CAstControlFlowMap;
|
||||||
import com.ibm.wala.cast.tree.CAstEntity;
|
import com.ibm.wala.cast.tree.CAstEntity;
|
||||||
import com.ibm.wala.cast.tree.CAstNode;
|
import com.ibm.wala.cast.tree.CAstNode;
|
||||||
import com.ibm.wala.cast.tree.CAstQualifier;
|
import com.ibm.wala.cast.tree.CAstQualifier;
|
||||||
|
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||||
import com.ibm.wala.cast.tree.CAstType;
|
import com.ibm.wala.cast.tree.CAstType;
|
||||||
import com.ibm.wala.cast.tree.CAstType.Method;
|
import com.ibm.wala.cast.tree.CAstType.Method;
|
||||||
import com.ibm.wala.cast.tree.visit.CAstVisitor;
|
import com.ibm.wala.cast.tree.visit.CAstVisitor;
|
||||||
|
@ -436,6 +437,16 @@ public class JavaCAst2IRTranslator extends AstTranslator {
|
||||||
return getType("java.lang.Exception");
|
return getType("java.lang.Exception");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Position[] getParameterPositions(CAstEntity n) {
|
||||||
|
int offset = 0;
|
||||||
|
Position[] parameterPositions = new Position[ n.getArgumentCount() ];
|
||||||
|
if ((n.getType() instanceof CAstType.Method) && !((CAstType.Method)n.getType()).isStatic()) {
|
||||||
|
offset = 1;
|
||||||
|
}
|
||||||
|
for(int i = 0; i < n.getArgumentCount() - offset; i++) {
|
||||||
|
parameterPositions[i+offset] = n.getPosition(i);
|
||||||
|
}
|
||||||
|
return parameterPositions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -393,7 +393,7 @@ public class RhinoToAstTranslator implements TranslatorToCAst {
|
||||||
* Used to represent a script or function in the CAst; see walkEntity().
|
* Used to represent a script or function in the CAst; see walkEntity().
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static class ScriptOrFnEntity implements CAstEntity {
|
private class ScriptOrFnEntity implements CAstEntity {
|
||||||
private final String[] arguments;
|
private final String[] arguments;
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
@ -410,6 +410,8 @@ public class RhinoToAstTranslator implements TranslatorToCAst {
|
||||||
|
|
||||||
private final Position entityPosition;
|
private final Position entityPosition;
|
||||||
|
|
||||||
|
private final Position[] paramPositions;
|
||||||
|
|
||||||
private ScriptOrFnEntity(AstNode n, Map<CAstNode, Collection<CAstEntity>> subs, CAstNode ast, CAstControlFlowMap map, CAstSourcePositionMap pos, String name) {
|
private ScriptOrFnEntity(AstNode n, Map<CAstNode, Collection<CAstEntity>> subs, CAstNode ast, CAstControlFlowMap map, CAstSourcePositionMap pos, String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.entityPosition = pos.getPosition(ast);
|
this.entityPosition = pos.getPosition(ast);
|
||||||
|
@ -424,7 +426,15 @@ public class RhinoToAstTranslator implements TranslatorToCAst {
|
||||||
for (int j = 0; j < f.getParamCount(); j++) {
|
for (int j = 0; j < f.getParamCount(); j++) {
|
||||||
arguments[i++] = f.getParamOrVarName(j);
|
arguments[i++] = f.getParamOrVarName(j);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<AstNode> params = f.getParams();
|
||||||
|
paramPositions = new Position[ params.size() ];
|
||||||
|
for(int pi = 0; pi < params.size(); pi++) {
|
||||||
|
paramPositions[pi] = makePosition(params.get(pi));
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
paramPositions = new Position[0];
|
||||||
arguments = new String[0];
|
arguments = new String[0];
|
||||||
}
|
}
|
||||||
kind = (n instanceof FunctionNode) ? CAstEntity.FUNCTION_ENTITY : CAstEntity.SCRIPT_ENTITY;
|
kind = (n instanceof FunctionNode) ? CAstEntity.FUNCTION_ENTITY : CAstEntity.SCRIPT_ENTITY;
|
||||||
|
@ -523,6 +533,11 @@ public class RhinoToAstTranslator implements TranslatorToCAst {
|
||||||
public CAstType getType() {
|
public CAstType getType() {
|
||||||
return JSAstTranslator.Any;
|
return JSAstTranslator.Any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
return paramPositions[arg];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private CAstEntity walkEntity(final AstNode n, List<CAstNode> body, String name, WalkContext child) {
|
private CAstEntity walkEntity(final AstNode n, List<CAstNode> body, String name, WalkContext child) {
|
||||||
|
|
|
@ -186,4 +186,9 @@ class ExtractedFunction implements CAstEntity {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "<JS function " + name + ">";
|
return "<JS function " + name + ">";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import com.ibm.wala.cast.loader.DynamicCallSiteReference;
|
||||||
import com.ibm.wala.cast.loader.AstMethod.DebuggingInformation;
|
import com.ibm.wala.cast.loader.AstMethod.DebuggingInformation;
|
||||||
import com.ibm.wala.cast.tree.CAstEntity;
|
import com.ibm.wala.cast.tree.CAstEntity;
|
||||||
import com.ibm.wala.cast.tree.CAstNode;
|
import com.ibm.wala.cast.tree.CAstNode;
|
||||||
|
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||||
import com.ibm.wala.cast.tree.CAstSymbol;
|
import com.ibm.wala.cast.tree.CAstSymbol;
|
||||||
import com.ibm.wala.cast.tree.CAstType;
|
import com.ibm.wala.cast.tree.CAstType;
|
||||||
import com.ibm.wala.cast.tree.impl.CAstSymbolImpl;
|
import com.ibm.wala.cast.tree.impl.CAstSymbolImpl;
|
||||||
|
@ -485,4 +486,17 @@ public class JSAstTranslator extends AstTranslator {
|
||||||
return Any;
|
return Any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Position[] getParameterPositions(CAstEntity e) {
|
||||||
|
if (e.getKind() == CAstEntity.SCRIPT_ENTITY) {
|
||||||
|
return new Position[0];
|
||||||
|
} else {
|
||||||
|
Position[] ps = new Position[ e.getArgumentCount() ];
|
||||||
|
for(int i = 2; i < e.getArgumentCount(); i++) {
|
||||||
|
ps[i] = e.getPosition(i-2);
|
||||||
|
}
|
||||||
|
return ps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,12 @@ public class TestConstantCollector {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,6 +142,12 @@ public class TestNativeTranslator {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ import java.util.Collection;
|
||||||
import com.ibm.wala.cast.tree.CAstQualifier;
|
import com.ibm.wala.cast.tree.CAstQualifier;
|
||||||
import com.ibm.wala.cast.tree.CAstType;
|
import com.ibm.wala.cast.tree.CAstType;
|
||||||
|
|
||||||
public class AbstractClassEntity extends AbstractDataEntity {
|
public abstract class AbstractClassEntity extends AbstractDataEntity {
|
||||||
private final CAstType.Class type;
|
private final CAstType.Class type;
|
||||||
|
|
||||||
public AbstractClassEntity(CAstType.Class type) {
|
public AbstractClassEntity(CAstType.Class type) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ import com.ibm.wala.cast.tree.CAstQualifier;
|
||||||
import com.ibm.wala.cast.tree.CAstType;
|
import com.ibm.wala.cast.tree.CAstType;
|
||||||
import com.ibm.wala.util.debug.Assertions;
|
import com.ibm.wala.util.debug.Assertions;
|
||||||
|
|
||||||
public class AbstractFieldEntity extends AbstractDataEntity {
|
public abstract class AbstractFieldEntity extends AbstractDataEntity {
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
private final Set<CAstQualifier> modifiers;
|
private final Set<CAstQualifier> modifiers;
|
||||||
|
|
|
@ -21,7 +21,7 @@ import java.util.Set;
|
||||||
import com.ibm.wala.cast.tree.CAstQualifier;
|
import com.ibm.wala.cast.tree.CAstQualifier;
|
||||||
import com.ibm.wala.cast.tree.CAstType;
|
import com.ibm.wala.cast.tree.CAstType;
|
||||||
|
|
||||||
public class AbstractGlobalEntity extends AbstractDataEntity {
|
public abstract class AbstractGlobalEntity extends AbstractDataEntity {
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
private final Set<CAstQualifier> modifiers;
|
private final Set<CAstQualifier> modifiers;
|
||||||
|
|
|
@ -22,7 +22,7 @@ import com.ibm.wala.cast.tree.CAstNode;
|
||||||
import com.ibm.wala.cast.tree.CAstQualifier;
|
import com.ibm.wala.cast.tree.CAstQualifier;
|
||||||
import com.ibm.wala.cast.tree.CAstType;
|
import com.ibm.wala.cast.tree.CAstType;
|
||||||
|
|
||||||
public class AbstractScriptEntity extends AbstractCodeEntity {
|
public abstract class AbstractScriptEntity extends AbstractCodeEntity {
|
||||||
private final File file;
|
private final File file;
|
||||||
|
|
||||||
public AbstractScriptEntity(File file, CAstType type) {
|
public AbstractScriptEntity(File file, CAstType type) {
|
||||||
|
|
|
@ -502,13 +502,17 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
||||||
|
|
||||||
private Position[][] operandPositions;
|
private Position[][] operandPositions;
|
||||||
|
|
||||||
AstDebuggingInformation(Position codeBodyPosition, Position[] instructionPositions, Position[][] operandPositions, String[] names) {
|
private Position[] parameterPositions;
|
||||||
|
|
||||||
|
AstDebuggingInformation(Position codeBodyPosition, Position[] instructionPositions, Position[][] operandPositions, Position[] parameterPositions, String[] names) {
|
||||||
this.codeBodyPosition = codeBodyPosition;
|
this.codeBodyPosition = codeBodyPosition;
|
||||||
|
|
||||||
this.instructionPositions = instructionPositions;
|
this.instructionPositions = instructionPositions;
|
||||||
|
|
||||||
this.operandPositions = operandPositions;
|
this.operandPositions = operandPositions;
|
||||||
|
|
||||||
|
this.parameterPositions = parameterPositions;
|
||||||
|
|
||||||
valueNumberNames = new String[names.length][];
|
valueNumberNames = new String[names.length][];
|
||||||
for (int i = 0; i < names.length; i++) {
|
for (int i = 0; i < names.length; i++) {
|
||||||
if (names[i] != null) {
|
if (names[i] != null) {
|
||||||
|
@ -542,6 +546,11 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
||||||
public String[][] getSourceNamesForValues() {
|
public String[][] getSourceNamesForValues() {
|
||||||
return valueNumberNames;
|
return valueNumberNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getParameterPosition(int param) {
|
||||||
|
return parameterPositions[param];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final boolean DEBUG_ALL = false;
|
public static final boolean DEBUG_ALL = false;
|
||||||
|
@ -3359,12 +3368,16 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
||||||
functionContext.exposeNameSet(n, true),
|
functionContext.exposeNameSet(n, true),
|
||||||
functionContext.getAccesses(n));
|
functionContext.getAccesses(n));
|
||||||
|
|
||||||
DebuggingInformation DBG = new AstDebuggingInformation(n.getPosition(), line, operand, nms);
|
Position[] parameterPositions = getParameterPositions(n);
|
||||||
|
|
||||||
|
DebuggingInformation DBG = new AstDebuggingInformation(n.getPosition(), line, operand, parameterPositions, nms);
|
||||||
|
|
||||||
// actually make code body
|
// actually make code body
|
||||||
defineFunction(n, parentContext, cfg, symtab, katch, catchTypes, monitor, LI, DBG);
|
defineFunction(n, parentContext, cfg, symtab, katch, catchTypes, monitor, LI, DBG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract Position[] getParameterPositions(CAstEntity e);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected WalkContext makeLocalContext(WalkContext context, CAstNode n) {
|
protected WalkContext makeLocalContext(WalkContext context, CAstNode n) {
|
||||||
return new LocalContext(context, makeLocalScope(context.currentScope()));
|
return new LocalContext(context, makeLocalScope(context.currentScope()));
|
||||||
|
|
|
@ -52,6 +52,8 @@ public abstract class AstMethod implements IMethod {
|
||||||
|
|
||||||
Position getOperandPosition(int instructionOffset, int operand);
|
Position getOperandPosition(int instructionOffset, int operand);
|
||||||
|
|
||||||
|
Position getParameterPosition(int param);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -342,6 +344,10 @@ public abstract class AstMethod implements IMethod {
|
||||||
return debugInfo.getCodeBodyPosition();
|
return debugInfo.getCodeBodyPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Position getParameterPosition(int paramIndex) {
|
||||||
|
return debugInfo.getParameterPosition(paramIndex);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Position getSourcePosition(int instructionIndex) {
|
public Position getSourcePosition(int instructionIndex) {
|
||||||
return debugInfo.getInstructionPosition(instructionIndex);
|
return debugInfo.getInstructionPosition(instructionIndex);
|
||||||
|
|
|
@ -161,6 +161,11 @@ public interface CAstEntity {
|
||||||
*/
|
*/
|
||||||
CAstSourcePositionMap.Position getPosition();
|
CAstSourcePositionMap.Position getPosition();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The source position of argument 'arg' this entity, if any;
|
||||||
|
*/
|
||||||
|
CAstSourcePositionMap.Position getPosition(int arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The map from CAstNodes to types. Valid for nodes that have an explicitly
|
* The map from CAstNodes to types. Valid for nodes that have an explicitly
|
||||||
* declared type (e.g. local vars).
|
* declared type (e.g. local vars).
|
||||||
|
|
|
@ -54,6 +54,9 @@ public interface CAstType {
|
||||||
|
|
||||||
public interface Method extends Function {
|
public interface Method extends Function {
|
||||||
CAstType getDeclaringType();
|
CAstType getDeclaringType();
|
||||||
|
|
||||||
|
boolean isStatic();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Complex extends CAstType {
|
public interface Complex extends CAstType {
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.ibm.wala.cast.tree.CAstNode;
|
||||||
import com.ibm.wala.cast.tree.CAstNodeTypeMap;
|
import com.ibm.wala.cast.tree.CAstNodeTypeMap;
|
||||||
import com.ibm.wala.cast.tree.CAstQualifier;
|
import com.ibm.wala.cast.tree.CAstQualifier;
|
||||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
||||||
|
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||||
import com.ibm.wala.cast.tree.CAstType;
|
import com.ibm.wala.cast.tree.CAstType;
|
||||||
|
|
||||||
public class DelegatingEntity implements CAstEntity {
|
public class DelegatingEntity implements CAstEntity {
|
||||||
|
@ -110,4 +111,9 @@ public class DelegatingEntity implements CAstEntity {
|
||||||
return base.getAnnotations();
|
return base.getAnnotations();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition(int arg) {
|
||||||
|
return base.getPosition(arg);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue