Dlaczego to w ogóle jest?
Sprawdziłeś niestabilny kod w głównej linii? Dlaczego?
Niestabilny kod nie powinien być sprawdzany w trunk / main / master lub jakikolwiek inny główny tytuł trunk. Jest to uważane za rozwój wysokiego ryzyka i zamiast tego powinno zostać zsekwencjonowane we własnym oddziale, nad którym pracowałeś, a nie w głównej.
Gorąco zachęcam was (i waszego zespołu) do przeczytania Strategii rozgałęziania Advanced SCM . W szczególności zwróć uwagę na rolę programistyczną i co mówi o tym, co uważa się za rozwój wysokiego ryzyka:
Zasadniczo rozważ użycie oddzielnych oddziałów dla każdego projektu wysokiego ryzyka. Projekty wysokiego ryzyka charakteryzują się dużą wielkością, dużą liczbą ludzi, nieznanym tematem, wysoce techniczną tematyką, bardzo napiętymi ramami czasowymi, niepewnymi datami dostawy, niekompletnymi lub zmiennymi wymaganiami oraz rozproszonymi geograficznie zespołami projektowymi. Podobnie, rozważ wyznaczenie jednego oddziału dla rozwoju niskiego ryzyka w każdym wydaniu. Kilka źródeł, w tym [WING98], zaleca użycie do tego celu głównej linii. Rozważ czynniki omówione powyżej dla głównej linii, zanim zdecydujesz się na taki sposób działania. Rozwój niskiego ryzyka może mieć inne zasady niż linia główna, nawet jeśli masz wielu członków rodziny produktów koordynujących przez linię główną.
Pozwalanie ludziom sprawdzać niestabilny (lub nieużywany) kod w głównej linii oznacza, że pomylisz przyszłe wysiłki programistyczne związane z próbą utrzymania tego kodu. Każda gałąź i klon przedstawiciela od teraz aż do końca będzie go zawierał, dopóki ktoś nie powie „jego martwy kod” i go usunie.
Są tacy, którzy mówią „cóż, jeśli jest w gałęzi, zostaje zapomniany” i chociaż może to być prawda, zapomnienie martwego (i niestabilnego) kodu w linii głównej jest wielokrotnie gorsze, ponieważ dezorientuje cały przyszły rozwój, dopóki nie zostanie usunięty - i to jest jeszcze bardziej zapomniane. Dobrze nazwana gałąź „/ fooProject / branches / WeisBigIdea” (lub jej odpowiednik) jest widoczna i łatwiejsza do pracy w przyszłości - szczególnie jeśli działa.
@Deprecated
Pierwszą rzeczą jest @Deprecatedadnotacja. To wykracza poza javadoc i wyrzuca ostrzeżenia kompilatora. javaczapewnia -deprecationflagę opisaną jako:
Pokaż opis każdego użycia lub zastąpienia wycofanego członka lub klasy. Bez -deprecation, javacpokazuje podsumowanie z plików źródłowych, które użycie lub zastąpić przestarzałe członków lub klas. -deprecation jest skrótem od -Xlint:deprecation.
Jak wspomniano, wykracza to poza standardowe ostrzeżenia kompilatora.
W wielu IDE przestarzałe metody i wartości są pokazane z przekreśleniem:
foo.bar();
I produkuje dane wyjściowe takie jak:
$ javac -Xlint:all Foo.java Bar.java
Bar.java:2: warning: [deprecation] Foo in unnamed package has been deprecated
interface Bar extends Foo { }
^
W zależności od struktury kompilacji mogą pojawiać się ostrzeżenia uniemożliwiające kompilację. To tylko przełamać build jeśli jeden z klas użyto (jeśli nie jest on po prostu skompilowane w).
@CustomAnnotation
Istnieje wiele podejść do tego. Na przykład adnotacja Lightweight javac @Warning, która zapewnia procesor adnotacji, który uruchamia ostrzeżenie w czasie kompilacji, gdy używane jest coś z tą adnotacją ( samouczek Netbeans dotyczący niestandardowych procesorów adnotacji , abyś mógł zorientować się, co dzieje się za sceny).
Oracle opisuje nawet przykład użycia niestandardowych adnotacji jako @Unfinishedadnotacji w Jak najlepiej wykorzystać metadane Javy, część 2: Adnotacje niestandardowe .
Za pomocą AnnotationProcessor można uruchamiać dowolny kod w czasie kompilacji. To Ty decydujesz, co chcesz zrobić. Ostrzegaj, przerwij kompilację, gdy coś zostanie użyte. W sieci istnieje wiele samouczków na temat pisania tego rodzaju kodu. Niezależnie od tego, czy chcesz wygenerować błąd podczas kompilacji (będzie to denerwujące i spowoduje usunięcie go), czy też zostanie użyty (nieco bardziej skomplikowany do napisania).
Zauważ, że wszystko to implikuje zmianę kompilacji w celu faktycznego użycia procesora adnotacji.