From 786cb56c8ea7310ccb1f5ad0294775270c0f767f Mon Sep 17 00:00:00 2001 From: Thushara-Piyasekara Date: Tue, 19 Mar 2024 13:46:06 +0530 Subject: [PATCH 1/2] Fix duplicates being added to importModules --- .../compiler/bir/emit/BIREmitter.java | 3 ++- .../compiler/bir/model/BIRNode.java | 22 +++++++++++++++++-- .../compiler/bir/writer/BIRBinaryWriter.java | 3 ++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/emit/BIREmitter.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/emit/BIREmitter.java index 8d560bc1eb11..d99de77a1e5c 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/emit/BIREmitter.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/emit/BIREmitter.java @@ -25,6 +25,7 @@ import java.io.PrintStream; import java.util.List; +import java.util.Set; import static org.wso2.ballerinalang.compiler.bir.emit.EmitterUtils.emitBasicBlockRef; import static org.wso2.ballerinalang.compiler.bir.emit.EmitterUtils.emitFlags; @@ -101,7 +102,7 @@ public static String emitModule(BIRNode.BIRPackage mod) { return modStr; } - private static String emitImports(List impMods) { + private static String emitImports(Set impMods) { StringBuilder impStr = new StringBuilder(); for (BIRNode.BIRImportModule mod : impMods) { diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java index d2862f16aa9a..aaf2a0378f43 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java @@ -55,7 +55,7 @@ protected BIRNode(Location pos) { */ public static class BIRPackage extends BIRNode { public final PackageID packageID; - public final List importModules; + public final Set importModules; public final List typeDefs; public final List globalVars; public final Set importedGlobalVarsDummyVarDcls; @@ -74,7 +74,7 @@ public BIRPackage(Location pos, Name org, Name pkgName, Name name, Name version, String sourceRoot, boolean skipTest, boolean isTestPkg) { super(pos); packageID = new PackageID(org, pkgName, name, version, sourceFileName, sourceRoot, isTestPkg, skipTest); - this.importModules = new ArrayList<>(); + this.importModules = new HashSet<>(); this.typeDefs = new ArrayList<>(); this.globalVars = new ArrayList<>(); this.importedGlobalVarsDummyVarDcls = new HashSet<>(); @@ -107,6 +107,24 @@ public BIRImportModule(Location pos, Name org, Name name, Name version) { public void accept(BIRVisitor visitor) { visitor.visit(this); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()) { + return false; + } + + return this.packageID.equals(((BIRImportModule) o).packageID); + } + + @Override + public int hashCode() { + return this.packageID.hashCode(); + } } /** diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/writer/BIRBinaryWriter.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/writer/BIRBinaryWriter.java index 34f5affbbfa7..ad4916fe6fa3 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/writer/BIRBinaryWriter.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/writer/BIRBinaryWriter.java @@ -38,6 +38,7 @@ import java.io.DataOutputStream; import java.io.IOException; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import static org.wso2.ballerinalang.compiler.bir.writer.BIRWriterUtils.writeConstValue; @@ -96,7 +97,7 @@ public byte[] serialize() { // private methods - private void writeImportModuleDecls(ByteBuf buf, List birImpModList) { + private void writeImportModuleDecls(ByteBuf buf, Set birImpModList) { buf.writeInt(birImpModList.size()); birImpModList.forEach(impMod -> { PackageID packageID = impMod.packageID; From b35b99e6205bbd6c9b8e2c393213506eca496959 Mon Sep 17 00:00:00 2001 From: Thushara-Piyasekara Date: Thu, 21 Mar 2024 17:20:26 +0530 Subject: [PATCH 2/2] Change BIRPackage.importModules to LinkedHashSet --- .../org/wso2/ballerinalang/compiler/bir/model/BIRNode.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java index aaf2a0378f43..ac1692fbaf31 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/model/BIRNode.java @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; @@ -74,7 +75,7 @@ public BIRPackage(Location pos, Name org, Name pkgName, Name name, Name version, String sourceRoot, boolean skipTest, boolean isTestPkg) { super(pos); packageID = new PackageID(org, pkgName, name, version, sourceFileName, sourceRoot, isTestPkg, skipTest); - this.importModules = new HashSet<>(); + this.importModules = new LinkedHashSet<>(); this.typeDefs = new ArrayList<>(); this.globalVars = new ArrayList<>(); this.importedGlobalVarsDummyVarDcls = new HashSet<>();