diff --git a/src/main/java/Main.java b/src/main/java/Main.java index cb43847723f1754389c2a7468c14aefab713e5c1..1f8d878ac642917647fee787d936024c30b18031 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -15,7 +15,7 @@ limitations under the License. */ import complexityparser.Model; -import complexityparser.types.env.Operators; +import complexityparser.types.env.TypingEnv; import view.MainFrame; import java.io.IOException; @@ -24,7 +24,7 @@ public class Main { public static void main(String[] args) { try { - Operators.loadInstanceFromFile(); + TypingEnv.loadInstanceFromFile(); } catch (IOException e) { System.err.println("Operator config file load failed, exiting"); System.exit(1); diff --git a/src/main/java/complexityparser/Model.java b/src/main/java/complexityparser/Model.java index 3fcbe15e226a9edf22d8ce2d4961e864372b2159..2c3eebed8fa5f5e246ce41315cccae6a5c8c01fc 100644 --- a/src/main/java/complexityparser/Model.java +++ b/src/main/java/complexityparser/Model.java @@ -21,7 +21,7 @@ import complexityparser.analyse.antlr.JavaParser; import complexityparser.listener.CallGraphBuilder; import complexityparser.listener.TOSBuilder; import complexityparser.listener.TypingListener; -import complexityparser.types.env.Operators; +import complexityparser.types.env.TypingEnv; import complexityparser.types.Tier; import complexityparser.tierTypingVisitors.FinalPass; import complexityparser.tierTypingVisitors.FirstPass; @@ -99,7 +99,7 @@ public class Model extends Observable { * @param code - a string of code. */ public void setCode(String code) { - Operators.getInstance().clear(); + TypingEnv.getInstance().clear(); this.code = code; CharStream input = CharStreams.fromString(code); lexer = new JavaLexer(input); @@ -154,7 +154,7 @@ public class Model extends Observable { //usually a good idea for debugging and testing //but showing bot might create a difficult to read output - System.out.println(Operators.getInstance()); + System.out.println(TypingEnv.getInstance()); //System.out.println(TOS.getInstance()); //calls update on the Observer objects update(); diff --git a/src/main/java/complexityparser/tierTypingVisitors/FinalPass.java b/src/main/java/complexityparser/tierTypingVisitors/FinalPass.java index 23358421d73bb33a9ff814a6fbe88e2f9d489a3d..0632407fa66a1818f329838f8b6ca1dac0f7d9e0 100644 --- a/src/main/java/complexityparser/tierTypingVisitors/FinalPass.java +++ b/src/main/java/complexityparser/tierTypingVisitors/FinalPass.java @@ -83,7 +83,7 @@ public class FinalPass extends ObjectVisitor { if(ctx.formalParameters().formalParameterList() != null) { nbParam = ctx.formalParameters().formalParameterList().formalParameter().size(); } - Operator op = operators.get(namespace); + Operator op = te.get(namespace); if(op.size() == 0) { putTierType(ctx, Tier.None, Tier.None); } diff --git a/src/main/java/complexityparser/tierTypingVisitors/FirstPass.java b/src/main/java/complexityparser/tierTypingVisitors/FirstPass.java index 8ceadcdb4d845fd71005fafd160bdf80eca1fbc9..a072180fb757226dc42795429a5e93a4d7ce998d 100644 --- a/src/main/java/complexityparser/tierTypingVisitors/FirstPass.java +++ b/src/main/java/complexityparser/tierTypingVisitors/FirstPass.java @@ -124,7 +124,7 @@ public class FirstPass extends ObjectVisitor { } paramTiers.increment(); } - operators.add(namespace, op); + te.add(namespace, op); setOverrideResult(true); return res; } diff --git a/src/main/java/complexityparser/tierTypingVisitors/SecondPass.java b/src/main/java/complexityparser/tierTypingVisitors/SecondPass.java index 111ca146713fbdfb05717cf6520be3c18cf9e2f7..22f3b326c7f36436bcad940c7132ce850c3bfff0 100644 --- a/src/main/java/complexityparser/tierTypingVisitors/SecondPass.java +++ b/src/main/java/complexityparser/tierTypingVisitors/SecondPass.java @@ -68,7 +68,7 @@ public class SecondPass extends ObjectVisitor { if(ctx.formalParameters().formalParameterList() != null) { nbParam = ctx.formalParameters().formalParameterList().formalParameter().size(); } - Operator op = operators.get(namespace); + Operator op = te.get(namespace); setOverrideResult(false); int noBloc = getBlockNumber(ctx.methodBody().block()); int i = 0; diff --git a/src/main/java/complexityparser/tierTypingVisitors/base/BaseExpressionVisitor.java b/src/main/java/complexityparser/tierTypingVisitors/base/BaseExpressionVisitor.java index b315c94e5f57180d64dfb8822596b2879e0fe10e..b651cae7797403da119a5c28702da5c42a0bddb7 100644 --- a/src/main/java/complexityparser/tierTypingVisitors/base/BaseExpressionVisitor.java +++ b/src/main/java/complexityparser/tierTypingVisitors/base/BaseExpressionVisitor.java @@ -160,7 +160,7 @@ public abstract class BaseExpressionVisitor extends BaseVisitor { in[i] = getTierType(list.get(i)); env = Tier.max(env, getEnvironmentType(list.get(i))); } - res = operators.findRes(op, in).getOut(); + res = te.findRes(op, in).getOut(); putTierType(ctx, res, env); return res; } @@ -231,12 +231,12 @@ public abstract class BaseExpressionVisitor extends BaseVisitor { Tier env = getEnvironmentType(ctx.expression()); String op = ctx.prefix.getText(); String type = getType(ctx.expression()); - Output out = operators.findRes(op, res); + Output out = te.findRes(op, res); if(out == null || out.getOut() == Tier.None) { if(type.equals("int") || type.equals("boolean")) { Mask m = new Mask(1); m.set(0, true); - out = operators.findCompatibleIn(op, m, res); + out = te.findCompatibleIn(op, m, res); } } if(out != null) { diff --git a/src/main/java/complexityparser/tierTypingVisitors/base/BaseVisitor.java b/src/main/java/complexityparser/tierTypingVisitors/base/BaseVisitor.java index c7b156c21387b6636a069136d9b5f67e28df57d7..1eaa099e2b91cbb26c95a8220afb2b7d2f860818 100644 --- a/src/main/java/complexityparser/tierTypingVisitors/base/BaseVisitor.java +++ b/src/main/java/complexityparser/tierTypingVisitors/base/BaseVisitor.java @@ -17,7 +17,7 @@ limitations under the License. package complexityparser.tierTypingVisitors.base; import complexityparser.types.Tier; -import complexityparser.types.env.Operators; +import complexityparser.types.env.TypingEnv; import complexityparser.analyse.antlr.JavaParser; import complexityparser.analyse.antlr.JavaParserBaseVisitor; import complexityparser.listener.TOSBuilder; @@ -47,7 +47,7 @@ public abstract class BaseVisitor extends JavaParserBaseVisitor { private int whileCount; //The number of while statements encountered in the current block. private ParseTreeProperty<Integer> blockNumbers; //The block index associated to the each node of the parse tree. protected TOS tos; //The table of symbols. - protected Operators operators; //The hashmap of operators (HashMap<String, Operator>). + protected TypingEnv te; //The typing environment (HashMap<String, Operator>). private CommonTokenStream commonTokenStream; //ANTLR token stream to show line numbers. private boolean overrideResult = true; //A flag to set if the final result should be overridden and if a string output should be generated. private boolean inInitBlock; //A flag to indicate if the visitor is currently located inside an init block or not. @@ -61,7 +61,7 @@ public abstract class BaseVisitor extends JavaParserBaseVisitor { this.types = typingListener.getTypes(); commonTokenStream = stream; tos = TOS.getInstance(); - operators = Operators.getInstance(); + te = TypingEnv.getInstance(); currentNamespace = tos.getNameSpace(0); recursiveCallsCount = 0; recursiveCallsReceivers = new HashSet<>(); diff --git a/src/main/java/complexityparser/tierTypingVisitors/base/ObjectVisitor.java b/src/main/java/complexityparser/tierTypingVisitors/base/ObjectVisitor.java index df553f8b746dd673d91aff3d468b0b4f2e800d2e..9e0607f11f27829fcfca520e73f6380ef8189670 100644 --- a/src/main/java/complexityparser/tierTypingVisitors/base/ObjectVisitor.java +++ b/src/main/java/complexityparser/tierTypingVisitors/base/ObjectVisitor.java @@ -246,9 +246,9 @@ public abstract class ObjectVisitor extends BaseBlockStatementVisitor { } //Finds the namespace in the operator table //and returns a compatible output with the input found in the parameters and the receiver type. - Output output = operators.findMethod(namespace, paramTiers.getArray()); + Output output = te.findMethod(namespace, paramTiers.getArray()); if(output == null || output.getOut() == Tier.None) { - output = operators.findCompatibleMethod(namespace, mask, paramTiers.getArray()); + output = te.findCompatibleMethod(namespace, mask, paramTiers.getArray()); if(output == null) { res = Tier.None; } diff --git a/src/main/java/complexityparser/types/Operator.java b/src/main/java/complexityparser/types/Operator.java index ee5f90cd019fb9dcd671ec9dd8d33f2907d42b30..36dc7b6cb75756169550709834c2043674c6fb8d 100644 --- a/src/main/java/complexityparser/types/Operator.java +++ b/src/main/java/complexityparser/types/Operator.java @@ -21,7 +21,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import complexityparser.types.env.Operators; +import complexityparser.types.env.TypingEnv; /** diff --git a/src/main/java/complexityparser/types/env/OperatorTypingEnvBuilder.java b/src/main/java/complexityparser/types/env/OperatorTypingEnvBuilder.java index 8fde03e4b91d8c7ee4c83ebc6386c8720c6cc850..4ca8906c5904e9a43af1e1cc15b6e7bb21bda5d6 100644 --- a/src/main/java/complexityparser/types/env/OperatorTypingEnvBuilder.java +++ b/src/main/java/complexityparser/types/env/OperatorTypingEnvBuilder.java @@ -28,11 +28,11 @@ import complexityparser.types.Output; */ public class OperatorTypingEnvBuilder extends OperatorsBaseListener { - private Operators op = new Operators(); + private TypingEnv te = new TypingEnv(); private Operator latest; - public Operators getOp() { - return op; + public TypingEnv getOp() { + return te; } /** @@ -42,14 +42,14 @@ public class OperatorTypingEnvBuilder extends OperatorsBaseListener { */ @Override public void enterOperator(OperatorsParser.OperatorContext ctx) { - if(op == null) { + if(te == null) { return; } super.enterOperator(ctx); latest = new Operator(true); String opString = ctx.STRING_LITERAL().getText(); opString = opString.substring(1, opString.length() - 1); - op.add(opString, latest); + te.add(opString, latest); } /** @@ -58,7 +58,7 @@ public class OperatorTypingEnvBuilder extends OperatorsBaseListener { */ @Override public void enterUnit(OperatorsParser.UnitContext ctx) { - if(op == null) { + if(te == null) { return; } super.enterUnit(ctx); @@ -72,7 +72,7 @@ public class OperatorTypingEnvBuilder extends OperatorsBaseListener { latest.add(new Output(out, Tier.T0), in); } catch (IOException e) { e.printStackTrace(); - op = null; + te = null; } } } \ No newline at end of file diff --git a/src/main/java/complexityparser/types/env/Operators.java b/src/main/java/complexityparser/types/env/TypingEnv.java similarity index 96% rename from src/main/java/complexityparser/types/env/Operators.java rename to src/main/java/complexityparser/types/env/TypingEnv.java index bba4508c58c47552e33c30c609e68bf05e84672a..93018fb5d0839e73910d4bbd8b2fdc60e2b8ec7e 100644 --- a/src/main/java/complexityparser/types/env/Operators.java +++ b/src/main/java/complexityparser/types/env/TypingEnv.java @@ -35,13 +35,13 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** -* This class contains information about the used operators and their (admissible) input/output tiers. +* This class encodes typing environements, information about the operations and their (admissible) types. */ -public class Operators { - private static Operators instance = null; +public class TypingEnv { + private static TypingEnv instance = null; private HashMap<String, Operator> operators; - protected Operators() { + protected TypingEnv() { operators = new HashMap<>(); } @@ -76,12 +76,12 @@ public class Operators { * * @return the attribute instance (null if the method #loadInstanceFromFIle() has not been called yet). */ - public static Operators getInstance() { + public static TypingEnv getInstance() { return instance; } /** - * Adds an operator and a name to the hashmap #operators. + * Adds an operator and a name to the hashmap operators. * @param k - a name * @param o - an operator */ @@ -226,8 +226,8 @@ public class Operators { * @param fileName - a file name. * @return the singleton instance of Operators. */ - private static Operators loadFromFile(String fileName) { - Operators res = null; + private static TypingEnv loadFromFile(String fileName) { + TypingEnv res = null; byte[] input = null; try { Path p = new File(fileName).toPath();