From 3bf508b0882b7440371e3f6f77a890a5501bb575 Mon Sep 17 00:00:00 2001 From: wangxuxin Date: Sun, 25 Jun 2023 16:42:32 +0800 Subject: [PATCH] feat: sharable var integration --- .../base/org/bdware/sc/node/ContractNode.java | 11 ++++++++ .../base/org/bdware/sc/node/SharableNode.java | 25 +++++++++++++++++ .../org/bdware/sc/visitor/ContractReader.java | 6 ++++ .../org/bdware/sc/visitor/SharableReader.java | 28 +++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 src/main/base/org/bdware/sc/node/SharableNode.java create mode 100644 src/main/base/org/bdware/sc/visitor/SharableReader.java diff --git a/src/main/base/org/bdware/sc/node/ContractNode.java b/src/main/base/org/bdware/sc/node/ContractNode.java index 0f62a28..a611046 100644 --- a/src/main/base/org/bdware/sc/node/ContractNode.java +++ b/src/main/base/org/bdware/sc/node/ContractNode.java @@ -16,6 +16,7 @@ public class ContractNode { private final List imports; private final List clzs; private final List functions; + private final List sharables; private final Map functionMap; private final Set dependentContracts; private final Map interfaceMap; @@ -38,6 +39,7 @@ public class ContractNode { functions = new ArrayList<>(); functionMap = new HashMap<>(); interfaceMap = new HashMap<>(); + sharables = new ArrayList<>(); isBundle = false; events = new HashMap<>(); logs = new HashMap<>(); @@ -56,6 +58,10 @@ public class ContractNode { interfaceMap.put(interfaceNode.functionName, interfaceNode); } + public void addSharable(SharableNode sharable) { + getSharables().add(sharable); + } + public void addClass(ClassNode clzNode) { getClzs().add(clzNode); } @@ -68,6 +74,10 @@ public class ContractNode { return clzs; } + public List getSharables() { + return sharables; + } + public void initPlainText(CommonTokenStream cts) { for (ClassNode cn : clzs) { cn.initText(cts); @@ -127,6 +137,7 @@ public class ContractNode { for (InterfaceNode interfaceNode : contract.interfaceMap.values()) { interfaceMap.put(interfaceNode.functionName, interfaceNode); } + sharables.addAll(contract.getSharables()); clzs.addAll(contract.clzs); this.events.putAll(contract.events); this.logs.putAll(contract.logs); diff --git a/src/main/base/org/bdware/sc/node/SharableNode.java b/src/main/base/org/bdware/sc/node/SharableNode.java new file mode 100644 index 0000000..9d5d717 --- /dev/null +++ b/src/main/base/org/bdware/sc/node/SharableNode.java @@ -0,0 +1,25 @@ +package org.bdware.sc.node; + +import java.util.List; + +public class SharableNode { + private List variableStatements; + + private String fileName; + + public List getVariableStatements() { + return variableStatements; + } + + public void setVariableStatements(List variableStatements) { + this.variableStatements = variableStatements; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/src/main/base/org/bdware/sc/visitor/ContractReader.java b/src/main/base/org/bdware/sc/visitor/ContractReader.java index 599f7a3..81ae17e 100644 --- a/src/main/base/org/bdware/sc/visitor/ContractReader.java +++ b/src/main/base/org/bdware/sc/visitor/ContractReader.java @@ -118,6 +118,12 @@ public class ContractReader extends YJSParserBaseVisitor { InterfaceDeclarationContext interfaces = clzOrFunction.interfaceDeclaration(); InterfaceReader reader = new InterfaceReader(fileName); node.addInterface(reader.visitInterfaceDeclaration(interfaces)); + } else if (null != clzOrFunction.sharableDeclaration()) { + SharableDeclarationContext sharableCtx = clzOrFunction.sharableDeclaration(); + sharableCtx.sharableStatement().variableDeclarationList(); + SharableReader reader = new SharableReader(fileName); + SharableNode sharable = reader.visitVariableDeclarationList(sharableCtx.sharableStatement().variableDeclarationList()); + node.addSharable(sharable); } } // ctx.getSourceInterval() diff --git a/src/main/base/org/bdware/sc/visitor/SharableReader.java b/src/main/base/org/bdware/sc/visitor/SharableReader.java new file mode 100644 index 0000000..045837a --- /dev/null +++ b/src/main/base/org/bdware/sc/visitor/SharableReader.java @@ -0,0 +1,28 @@ +package org.bdware.sc.visitor; + +import org.bdware.sc.node.SharableNode; +import org.bdware.sc.parser.YJSParser; +import org.bdware.sc.parser.YJSParserBaseVisitor; + +import java.util.ArrayList; +import java.util.List; + +public class SharableReader extends YJSParserBaseVisitor { + private final String fileName; + + public SharableReader(String fileName) { + this.fileName = fileName; + } + + @Override + public SharableNode visitVariableDeclarationList(YJSParser.VariableDeclarationListContext ctx) { + SharableNode sharableNode = new SharableNode(); + List statements = new ArrayList<>(); + for (YJSParser.VariableDeclarationContext variableDeclarationContext : ctx.variableDeclaration()) { + statements.add(variableDeclarationContext.getText()); + } + sharableNode.setVariableStatements(statements); + sharableNode.setFileName(fileName); + return sharableNode; + } +}