From 9aed4e058dc64df1c7f4cc7eaf865e963e079750 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Tue, 5 Jun 2018 15:00:31 -0400 Subject: [PATCH] more tracking of sourse positions for function parameters --- .../jdt/JDTJava2CAstTranslator.java | 31 ++++++++++++++++++- .../translator/JavaCAst2IRTranslator.java | 15 +++++++-- .../js/translator/RhinoToAstTranslator.java | 17 +++++++++- .../extraction/ExtractedFunction.java | 5 +++ .../cast/js/translator/JSAstTranslator.java | 14 +++++++++ .../wala/cast/test/TestConstantCollector.java | 6 ++++ .../wala/cast/test/TestNativeTranslator.java | 6 ++++ .../ir/translator/AbstractClassEntity.java | 2 +- .../ir/translator/AbstractFieldEntity.java | 2 +- .../ir/translator/AbstractGlobalEntity.java | 2 +- .../ir/translator/AbstractScriptEntity.java | 2 +- .../cast/ir/translator/AstTranslator.java | 17 ++++++++-- .../com/ibm/wala/cast/loader/AstMethod.java | 6 ++++ .../com/ibm/wala/cast/tree/CAstEntity.java | 5 +++ .../java/com/ibm/wala/cast/tree/CAstType.java | 3 ++ .../wala/cast/tree/impl/DelegatingEntity.java | 6 ++++ 16 files changed, 129 insertions(+), 10 deletions(-) diff --git a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java index b2b35353e..d49667a10 100644 --- a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java +++ b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java @@ -274,7 +274,12 @@ public abstract class JDTJava2CAstTranslator { 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 fQuals; @@ -1031,7 +1036,13 @@ public abstract class JDTJava2CAstTranslator { return new CAstType.Method() { private Collection 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 { } }; } + + @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 { public CAstType getType() { return fTypeDict.getCAstTypeFor(type); } + + + @Override + public Position getPosition(int arg) { + return null; + } } // ///////////////////////////////////// @@ -3016,6 +3040,11 @@ public abstract class JDTJava2CAstTranslator { Assertions.UNREACHABLE("CompilationUnitEntity.getType()"); return null; } + + @Override + public Position getPosition(int arg) { + return null; + } } // ///////////////////////////// diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java index 1ab4c33ab..009b2e5ef 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/translator/JavaCAst2IRTranslator.java @@ -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; + } } diff --git a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java index e4da64d46..197c2038a 100644 --- a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java +++ b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java @@ -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> 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 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 body, String name, WalkContext child) { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java index 7a061765e..22e473323 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java @@ -186,4 +186,9 @@ class ExtractedFunction implements CAstEntity { public String toString() { return ""; } + + @Override + public Position getPosition(int arg) { + return null; + } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java index 76a8fdb04..3e0b1e862 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JSAstTranslator.java @@ -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; + } + } + } diff --git a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestConstantCollector.java b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestConstantCollector.java index f5b095e2f..9befd2269 100644 --- a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestConstantCollector.java +++ b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestConstantCollector.java @@ -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; + } }; } diff --git a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestNativeTranslator.java b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestNativeTranslator.java index 1a6801040..7f772265a 100644 --- a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestNativeTranslator.java +++ b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestNativeTranslator.java @@ -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; + } }; } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java index 78874344a..12e27c3e0 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractClassEntity.java @@ -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) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java index ac74817f4..25c8f5bfe 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractFieldEntity.java @@ -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 modifiers; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java index 3e932ca43..c54921d93 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractGlobalEntity.java @@ -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 modifiers; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java index f110f9b7d..af2b97b65 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AbstractScriptEntity.java @@ -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) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java index 59dc12cb2..f7505cbd2 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java @@ -502,13 +502,17 @@ public abstract class AstTranslator extends CAstVisitor