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 {
|
||||
// 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;
|
||||
|
||||
|
@ -1031,7 +1036,13 @@ public abstract class JDTJava2CAstTranslator<T extends Position> {
|
|||
return new CAstType.Method() {
|
||||
private Collection<CAstType> fExceptionTypes = null;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isStatic() {
|
||||
return getQualifiers().contains(CAstQualifier.STATIC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CAstType getReturnType() {
|
||||
if (fReturnType != null)
|
||||
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() {
|
||||
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()");
|
||||
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.CAstNode;
|
||||
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.Method;
|
||||
import com.ibm.wala.cast.tree.visit.CAstVisitor;
|
||||
|
@ -436,6 +437,16 @@ public class JavaCAst2IRTranslator extends AstTranslator {
|
|||
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().
|
||||
*
|
||||
*/
|
||||
private static class ScriptOrFnEntity implements CAstEntity {
|
||||
private class ScriptOrFnEntity implements CAstEntity {
|
||||
private final String[] arguments;
|
||||
|
||||
private final String name;
|
||||
|
@ -410,6 +410,8 @@ public class RhinoToAstTranslator implements TranslatorToCAst {
|
|||
|
||||
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) {
|
||||
this.name = name;
|
||||
this.entityPosition = pos.getPosition(ast);
|
||||
|
@ -424,7 +426,15 @@ public class RhinoToAstTranslator implements TranslatorToCAst {
|
|||
for (int j = 0; j < f.getParamCount(); 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 {
|
||||
paramPositions = new Position[0];
|
||||
arguments = new String[0];
|
||||
}
|
||||
kind = (n instanceof FunctionNode) ? CAstEntity.FUNCTION_ENTITY : CAstEntity.SCRIPT_ENTITY;
|
||||
|
@ -523,6 +533,11 @@ public class RhinoToAstTranslator implements TranslatorToCAst {
|
|||
public CAstType getType() {
|
||||
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) {
|
||||
|
|
|
@ -186,4 +186,9 @@ class ExtractedFunction implements CAstEntity {
|
|||
public String toString() {
|
||||
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.tree.CAstEntity;
|
||||
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.CAstType;
|
||||
import com.ibm.wala.cast.tree.impl.CAstSymbolImpl;
|
||||
|
@ -485,4 +486,17 @@ public class JSAstTranslator extends AstTranslator {
|
|||
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
|
||||
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
|
||||
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.CAstType;
|
||||
|
||||
public class AbstractClassEntity extends AbstractDataEntity {
|
||||
public abstract class AbstractClassEntity extends AbstractDataEntity {
|
||||
private final 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.util.debug.Assertions;
|
||||
|
||||
public class AbstractFieldEntity extends AbstractDataEntity {
|
||||
public abstract class AbstractFieldEntity extends AbstractDataEntity {
|
||||
private final String name;
|
||||
|
||||
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.CAstType;
|
||||
|
||||
public class AbstractGlobalEntity extends AbstractDataEntity {
|
||||
public abstract class AbstractGlobalEntity extends AbstractDataEntity {
|
||||
private final String name;
|
||||
|
||||
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.CAstType;
|
||||
|
||||
public class AbstractScriptEntity extends AbstractCodeEntity {
|
||||
public abstract class AbstractScriptEntity extends AbstractCodeEntity {
|
||||
private final File file;
|
||||
|
||||
public AbstractScriptEntity(File file, CAstType type) {
|
||||
|
|
|
@ -502,13 +502,17 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
|
||||
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.instructionPositions = instructionPositions;
|
||||
|
||||
this.operandPositions = operandPositions;
|
||||
|
||||
this.parameterPositions = parameterPositions;
|
||||
|
||||
valueNumberNames = new String[names.length][];
|
||||
for (int i = 0; i < names.length; i++) {
|
||||
if (names[i] != null) {
|
||||
|
@ -542,6 +546,11 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
public String[][] getSourceNamesForValues() {
|
||||
return valueNumberNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Position getParameterPosition(int param) {
|
||||
return parameterPositions[param];
|
||||
}
|
||||
}
|
||||
|
||||
public static final boolean DEBUG_ALL = false;
|
||||
|
@ -3359,12 +3368,16 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
functionContext.exposeNameSet(n, true),
|
||||
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
|
||||
defineFunction(n, parentContext, cfg, symtab, katch, catchTypes, monitor, LI, DBG);
|
||||
}
|
||||
|
||||
protected abstract Position[] getParameterPositions(CAstEntity e);
|
||||
|
||||
@Override
|
||||
protected WalkContext makeLocalContext(WalkContext context, CAstNode n) {
|
||||
return new LocalContext(context, makeLocalScope(context.currentScope()));
|
||||
|
|
|
@ -52,6 +52,8 @@ public abstract class AstMethod implements IMethod {
|
|||
|
||||
Position getOperandPosition(int instructionOffset, int operand);
|
||||
|
||||
Position getParameterPosition(int param);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -342,6 +344,10 @@ public abstract class AstMethod implements IMethod {
|
|||
return debugInfo.getCodeBodyPosition();
|
||||
}
|
||||
|
||||
public Position getParameterPosition(int paramIndex) {
|
||||
return debugInfo.getParameterPosition(paramIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Position getSourcePosition(int instructionIndex) {
|
||||
return debugInfo.getInstructionPosition(instructionIndex);
|
||||
|
|
|
@ -161,6 +161,11 @@ public interface CAstEntity {
|
|||
*/
|
||||
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
|
||||
* declared type (e.g. local vars).
|
||||
|
|
|
@ -54,6 +54,9 @@ public interface CAstType {
|
|||
|
||||
public interface Method extends Function {
|
||||
CAstType getDeclaringType();
|
||||
|
||||
boolean isStatic();
|
||||
|
||||
}
|
||||
|
||||
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.CAstQualifier;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||
import com.ibm.wala.cast.tree.CAstType;
|
||||
|
||||
public class DelegatingEntity implements CAstEntity {
|
||||
|
@ -110,4 +111,9 @@ public class DelegatingEntity implements CAstEntity {
|
|||
return base.getAnnotations();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Position getPosition(int arg) {
|
||||
return base.getPosition(arg);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue