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 6db3aa71fa00..cd4754b44073 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..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; @@ -55,7 +56,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 +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 ArrayList<>(); + this.importModules = new LinkedHashSet<>(); this.typeDefs = new ArrayList<>(); this.globalVars = new ArrayList<>(); this.importedGlobalVarsDummyVarDcls = new HashSet<>(); @@ -107,6 +108,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 b6e121461c9d..8df6c69efb68 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 static org.wso2.ballerinalang.compiler.bir.writer.BIRWriterUtils.writeConstValue; @@ -95,7 +96,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;