Protocols with default methods in extension fail to compile

Aperta
#562 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
java, swift
Ambito
compilers

Direzione di ricerca

Inizia con la fase di analisi e la generazione delle interfacce estratte descritte nell’issue, quindi riproduci l’esempio di protocol ed extension. Traccia come i requisiti del protocol vengono distinti dalle dichiarazioni nelle extension; il lavoro è completato quando l’esempio viene compilato senza trattare il metodo dell’extension come un requisito astratto dell’interfaccia, con le dichiarazioni dell’extension rappresentate secondo il comportamento previsto dei metodi predefiniti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

If you have a protocol which has a default method implemented in an extension, the generated code will fail to compile because the Java compiler will complain about the extracted interface "is not abstract and does not override abstract method".

Consider the following

protocol MyProtocol {}

extension MyProtocol {
  public func myDefaultMethod() {}
}

will fail with:

error: MyProtocol is not abstract and does not override abstract method myDefaultMethod() in MyProtocol

Instead we should not generate any methods, variables and initializers defined in extensions as part of the extracted interface. But we could generate them as default methods instead. This means we need to change the analysis phase to know what decls are defined in an extension and which come from the protocol requirements themselves.

Lingua principale
Swift
Stelle
1.3k
Fork
127
Merge medio
2g 14h
PR unite (30g)
5

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di swiftlang/swift-java

Tutte le issue di swiftlang/swift-java

Issue simili

Altre issue su Swift

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.