jextract/jni: Protocol property setters reference an incorrectly named adapter

Ouverte
#949 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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

Personne n'a encore pris cette issue.

Évaluation

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

Piste de recherche

Start by tracing the generated JNI binding for a public protocol-typed property with Java callbacks enabled, comparing the wrapper declaration name with the setter argument conversion reference. Check the related protocol-parameter adapter issue #946 for nearby context. Done when property setters, label-disambiguated overloads, and Java keyword names generate matching adapter references and the resulting Swift compiles.

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

Description

Problem

With Java callbacks enabled, JNI bindings for a public protocol-typed property can generate a Swift setter that references a wrapper class under a different name from its declaration. The generated Swift code then fails to compile.

Example

public protocol Callback {
  func value() -> Int64
}

public final class Service {
  public var callback: any Callback

  public init(callback: some Callback) {
    self.callback = callback
  }

  public func read() -> Int64 {
    callback.value()
  }
}

The generated wrapper declaration uses the Swift property name, while the setter's argument conversion uses the Java setter name:

// Generated wrapper declaration
final class _Service_callback_newValue_Wrapper: SwiftJavaCallbackWrapper {
  // ...
}

// Generated setter argument conversion references
// _Service_setCallback_newValue_Wrapper instead.

The same kind of mismatch can occur when Java method names differ from Swift names for label-disambiguated overloads or Java keywords.

Related: #946 also concerns protocol-parameter adapters, but reports duplicate declarations for overloads.

Reference workaround implementation: https://github.com/qoncept/swift-java/pull/16

Langage dominant
Swift
Étoiles
1.3k
Forks
127
Merge moyen
2 j 14 h
PR mergées (30 j)
5

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.