Compilation error for class with sync/async function overloads: method is already defined

Ouverte
#906 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@Hokila y travaille déjà.

Depuis le 3/9/2026.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
68/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
java, swift
Domaine
tooling

Piste de recherche

Commencez par JNISwift2JavaGenerator+JavaBindingsPrinting.swift au niveau de printJavaBindingWrapperMethod et par JavaTranslation.swift au niveau de render, puis reproduisez l’exemple signalé de surcharge remove sync/async. Suivez la transformation des deux méthodes Swift en méthodes Java et assurez-vous que la classe générée se compile sans l’erreur de méthode dupliquée, tout en conservant les deux bindings.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Commit hash: a736a64e18a85f55f267427a3c9de60ae8377b7a

Context:
While testing swiftly's support of existing Swift code, noticed that a code using a function that is overloaded with both sync and async variants is not compiling, failing with "method is already defined" error.

import Foundation

public class Test {
    public func remove(key: String) { /* sync */ }
    public func remove(key: String) async { }
}

Results in the following compilation error:

.../.build/plugins/outputs/lib/SwiftTestLib/destination/JExtractSwiftPlugin/src/generated/java/com/example/swiftexamplelib/Test.java:93: error: method removeKey(String) is already defined in class Test
    public java.util.concurrent.CompletableFuture<java.lang.Void> removeKey(java.lang.String key) {

Portion of the generated Java file:

  // ==== --------------------------------------------------
  // Test.remove
  
  /**
   * Downcall to Swift:
   * {@snippet lang=swift :
   * public func remove(key: String)
   * }
   */
  public void removeKey(java.lang.String key) {
    Test.$removeKey(key, this.$memoryAddress());
  } // printJavaBindingWrapperMethod(_:_:importedFunc:skipMethodBody:) @ JExtractSwiftLib/JNISwift2JavaGenerator+JavaBindingsPrinting.swift:950
  private static native void $removeKey(java.lang.String key, long selfPointer);
  
  
  // ==== --------------------------------------------------
  // Test.remove
  
  /**
   * Downcall to Swift:
   * {@snippet lang=swift :
   * public func remove(key: String) async
   * }
   */
  public java.util.concurrent.CompletableFuture<java.lang.Void> removeKey(java.lang.String key) {
    java.util.concurrent.CompletableFuture<java.lang.Void> future$ = new java.util.concurrent.CompletableFuture<java.lang.Void>();
    Test.$removeKey(key, this.$memoryAddress(), future$);
    return future$.thenApply((futureResult$) -> {
      return futureResult$;
    } // render(_:_:) @ JExtractSwiftLib/JNISwift2JavaGenerator+JavaTranslation.swift:2072
    );
  } // printJavaBindingWrapperMethod(_:_:importedFunc:skipMethodBody:) @ JExtractSwiftLib/JNISwift2JavaGenerator+JavaBindingsPrinting.swift:950
  private static native void $removeKey(java.lang.String key, long selfPointer, java.util.concurrent.CompletableFuture<java.lang.Void> result_future);

Environment: Swift 6.3.3 on macOS.

$ swiftly run swift --version
Apple Swift version 6.3.3 (swift-6.3.3-RELEASE)
Target: arm64-apple-macosx26.0

$ uname -a
Darwin it-C01241 25.6.0 Darwin Kernel Version 25.6.0: Fri Jul 31 19:18:49 PDT 2026; root:xnu-12377.161.14~5/RELEASE_ARM64_T6000 arm64
Langage dominant
Swift
Étoiles
1.3k
Forks
127
Merge moyen
1 h 6 min
PR mergées (30 j)
3

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de swiftlang/swift-java

Toutes les issues de swiftlang/swift-java

Issues similaires

Plus d'issues Swift

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.