2011-08-29 3 views
3

je le scénario suivant:Eclipse refactoring: méthode move intérieur collaborateur

public class Controller { 

    private ModelRepository repository; 

    public int getModelCount() { 
    int count = 0; 
    List<Model> models = repository.getModels(); 

    for (Model model : models) { 
     if (model.somePredicate()) { 
     count++; 
     } 
    } 

    return count; 
    } 
} 

Maintenant, je voudrais passer la méthode getModelCount à l'intérieur ModelRepository en utilisant refactoring Eclipse automatisé pour que je finis avec cela en le contrôleur:

public class Controller { 

    private ModelRepository repository; 

    public int getModelCount() { 
    repository.getModelCount(); 
    } 
} 

Est-ce possible dans Eclipse Indigo? Si oui, comment? Merci!

Répondre

5

Je ne pense pas qu'il existe un refactor à simple saut, mais vous pouvez le faire en deux. Commencez par mettre en surbrillance le contenu de la méthode getModelCount() et effectuez une opération refactor->extract method, en appelant la nouvelle méthode quelque chose comme countModels.

Deuxièmement, effectuez un refactor->move sur la nouvelle méthode countModels(), en sélectionnant le champ repository comme destination.

Cela vous laissera une méthode sur le ModelRepository appelé countModels plutôt que getModelCount. Pour être complet, vous pouvez faire un refactor->rename à ce sujet, mais je préfère countModels de toute façon.

+0

Merci pour votre réponse. Il semble que l'opération 'refactor-> move' fonctionne directement sur cette méthode. Mon problème était que le type du champ 'repository' était une interface, au lieu d'une classe. C'est pourquoi Eclipse avait des problèmes pour le déplacer. –