Attends, mais tu sais que c'est pas con en fait ;)
J'étais resté sur le fait de faire appel à mon type déléguant, mais si je pointe directement sur un type déléguateur, ça le fait (sauf dans l'IDE où il va sans cesse me proposer de créer ma classe et où je n'aurais pas de complétion sur les constructeurs puisque inexistants) :
Du coup j'ai juste à imposer une syntaxe, vérifier les cas litigieux et à utiliser un Filer :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 [...] WithDelegation_MaClasse toto=new MaClasse(); // là l'IDE gueule et pas de complétion pour le constructeur (inconnu alors) [...] [...] abstract class WithDelegation_MaClasse extends Bidule implements InterfaceMachin, InterfaceTruc { @Delegate protected InterfaceMachin fieldMachin; @Delegate protected InterfaceTruc fieldTruc; WithDelegation_MaClasse(InterfaceMachin p_machin, InterfaceTruc p_truc){ fieldMachin=p_machin; fieldTruc=p_truc; } [...] } [...] @GeneratedDelegateClass class MaClass extends WithDelegation_MaClasse { //méthodes déléguées //réplication des constructeurs avec appel à super(...); }
Merci maître adiGuba, toi au moins tu sais expliquer les choses !
Reste plus qu'à voir si ça marche (le plus dur sera de savoir si une méthode est implémentée dans MaClasse, Bidule, ou un autre parent).
Remarque : pour le problème de l'éditeur je devrais sans doute conserver la syntaxe
qui serait remplacé à la volée parCode:WithDelegate_MaClass toto=new WithDelegate_MaClass(...)
mais c'est encore super complexe...Code:MaClass toto=new MaClass(...)
Edit : non en fait ça ne change rien car en mettant la classe déléguante abstract j'ai un autre message d'erreur puisque ma classe est abstraite... donc finalement il me faudra supporter les erreurs de classe introuvable par l'IDE et l'absence de complétion ; avec des classes incomplètes (mon idée initiale) j'aurais eu d'autres messages d'erreur, le moindre mal est sûrement celui que tu proposes.