diff --git a/ape_solidity/compiler.py b/ape_solidity/compiler.py index 6775c49..4b04f62 100644 --- a/ape_solidity/compiler.py +++ b/ape_solidity/compiler.py @@ -614,17 +614,19 @@ def compile( vers = contract_versions[ct.name] settings = input_jsons[vers]["settings"] - if vers in compilers_used and ct.name not in (compilers_used[vers].contractTypes or []): - compilers_used[vers].contractTypes = [ - *(compilers_used[vers].contractTypes or []), - ct.name, - ] + contract_id = f"{ct.source_id}:{ct.name}" + if vers in compilers_used and contract_id not in ( + compilers_used[vers].contractTypes or [] + ): + existing_cts = compilers_used[vers].contractTypes or [] + if contract_id not in existing_cts: + compilers_used[vers].contractTypes = [*existing_cts, contract_id] elif vers not in compilers_used: compilers_used[vers] = Compiler( name=self.name.lower(), version=f"{vers}", - contractTypes=[ct.name], + contractTypes=[contract_id], settings=settings, ) diff --git a/tests/test_compiler.py b/tests/test_compiler.py index 7c10d4b..37478ba 100644 --- a/tests/test_compiler.py +++ b/tests/test_compiler.py @@ -344,27 +344,39 @@ def run_test(manifest): b >= a for a, b in zip(actual_remappings, actual_remappings[1:]) ), "Import remappings should be sorted" assert f"@remapping/contracts={common_suffix}" in compiler_0426.settings["remappings"] - assert "UseYearn" in compiler_latest.contractTypes + assert "UseYearn.sol:UseYearn" in compiler_latest.contractTypes assert "@gnosis=.cache/gnosis/v1.3.0" in compiler_latest.settings["remappings"] + more_c = ( + "IndirectlyImportingMoreConstrainedVersionCompanion.sol" + ":IndirectlyImportingMoreConstrainedVersionCompanion" + ) + indirect_morec = ( + "IndirectlyImportingMoreConstrainedVersionCompanionImport.sol" + ":IndirectlyImportingMoreConstrainedVersionCompanionImport" + ) + # Compiler contract types test assert set(compiler_0812.contractTypes) == { - "ImportSourceWithEqualSignVersion", - "ImportSourceWithNoPrefixVersion", - "ImportingLessConstrainedVersion", - "IndirectlyImportingMoreConstrainedVersion", - "IndirectlyImportingMoreConstrainedVersionCompanion", - "SpecificVersionNoPrefix", - "SpecificVersionRange", - "SpecificVersionWithEqualSign", - "CompilesOnce", - "IndirectlyImportingMoreConstrainedVersionCompanionImport", + "ImportSourceWithEqualSignVersion.sol:ImportSourceWithEqualSignVersion", + "ImportSourceWithNoPrefixVersion.sol:ImportSourceWithNoPrefixVersion", + "ImportingLessConstrainedVersion.sol:ImportingLessConstrainedVersion", + "IndirectlyImportingMoreConstrainedVersion.sol:IndirectlyImportingMoreConstrainedVersion", + more_c, + "SpecificVersionNoPrefix.sol:SpecificVersionNoPrefix", + "SpecificVersionRange.sol:SpecificVersionRange", + "SpecificVersionWithEqualSign.sol:SpecificVersionWithEqualSign", + "CompilesOnce.sol:CompilesOnce", + indirect_morec, + } + assert set(compiler_0612.contractTypes) == { + "RangedVersion.sol:RangedVersion", + "VagueVersion.sol:VagueVersion", } - assert set(compiler_0612.contractTypes) == {"RangedVersion", "VagueVersion"} assert set(compiler_0426.contractTypes) == { - "ExperimentalABIEncoderV2", - "SpacesInPragma", - "ImportOlderDependency", + "ExperimentalABIEncoderV2.sol:ExperimentalABIEncoderV2", + "SpacesInPragma.sol:SpacesInPragma", + "ImportOlderDependency.sol:ImportOlderDependency", } # Ensure compiled first so that the local cached manifest exists.