2017-07-27 1 views
0

J'applique un modèle Decorator pour la classe qui a beaucoup de méthodes. J'ai créé cette classe Decorator et juste mettre toutes les méthodes qui devraient être ici. Maintenant, j'ai une classe avec 2000 lignes où chaque partie comme:Comment utiliser sed ou awk pour éditer une classe Java vraiment longue

@Override 
public String getCapadCode() 
{ 
    return null; 
} 

doit être remplacé par:

@Override 
public String getCapadCode() 
{ 
    return origin.getCapadCode(); 
} 

Est-il possible d'automatiser ce processus en quelque sorte avec sed ou awk?

+0

Pourquoi avez-vous une classe avec 400 méthodes de toute façon? C'est un peu un drapeau rouge en soi. –

+2

Avez-vous considéré d'autres options comme lombok? https://projectlombok.org/features/Delegate.html –

+0

Je ne pense vraiment pas que cela peut être fait facilement, peut-être écrire un script (en perl par exemple) à la place, de toute façon êtes-vous sûr que c'est une bonne idée? Avez-vous déjà entendu parler de SOLID et du principe de responsabilité unique? – Guilherme

Répondre

0

vous pouvez utiliser la recherche et le remplacer par expression régulière comme ceci:

recherche: get(.*)\(\)\R\{\R return null;\R\}

remplacer: get$1\(\)\R\{\R return origin\.$1;\R\}

J'utilise Eclipse Rechercher/Remplacer pour cela.

1

est ici un peu de Perl:

perl -pe ' 
    m{public .* (.+)\(} and $methodName = $1; 
    s{(?<=return)null;}{origin.$methodName();}; 
' File.java 

Si vous êtes satisfait cela fonctionne, appelez avec perl -i -pe d'écrire en place.

+0

Utilisation de Perl pour cela. C'est sauvage :) –

0

utiliser à vos propres risques:

$ awk '/^public/{name=$3} /return/{sub(/null/,"origin."name)} 1' file 
@Override 
public String getCapadCode() 
{ 
    return origin.getCapadCode(); 
} 
+0

Ceci est le résultat de l'exécution retour origine.GcrRecordWithRoundedAmounts –

+0

Je ne sais pas ce que cela signifie, mais dites-vous que le script ne fait pas ce que vous voulez? Lorsque vous exécutez le script que j'ai posté sur l'entrée d'échantillon que vous avez fournie, il produit la sortie que vous avez voulue comme vous pouvez le voir dans ma réponse. S'il existe un autre format d'entrée que vous n'avez pas inclus dans votre exemple, vous ne devez pas vous attendre à ce que le script sache ce que vous voulez faire avec ce format. Si vous voulez une solution complètement robuste qui fonctionnera pour n'importe quelle entrée, vous avez besoin d'un analyseur pour la langue dans laquelle les fichiers d'entrée sont écrits. –