Używam generatora parsera, który tworzy nieco brzydki kod. W rezultacie mój projekt Eclipse ma kilkadziesiąt ostrzeżeń pochodzących z wygenerowanych plików źródłowych. Wiem, że mogę użyć @SuppressWarning
adnotacji, aby pominąć określone ostrzeżenia w określonych elementach, ale wszelkie adnotacje dodane ręcznie zostaną utracone po ponownym uruchomieniu generatora parsera. Czy istnieje sposób skonfigurowania Eclipse do pomijania ostrzeżeń dla określonego pliku lub katalogu?
java
eclipse
suppress-warnings
generated-code
Chris Conway
źródło
źródło
Odpowiedzi:
Począwszy od wersji 3.8 M6, Eclipse (dokładnie: JDT) ma wbudowaną funkcjonalność do tego. Można go skonfigurować za pomocą ścieżki budowania projektu : Właściwości projektu> Ścieżka budowania Java> Kompilator> Źródło
Ogłoszone tutaj: Eclipse 3.8 i 4.2 M6 - New and Noteworthy , o nazwie Selektywnie ignoruj błędy / ostrzeżenia z folderów źródłowych . Stąd też pochodzi zrzut ekranu. Jest to nowa funkcja opracowana w powiązanym wcześniej błędzie 220928 .
źródło
Jest na to bilet, Bug 220928 , który od tego czasu został ukończony dla Eclipse 3.8. Zobacz tę odpowiedź, aby uzyskać szczegółowe informacje.
Jeśli utkniesz z Eclipse 3.7 lub starszym: Użytkownik „Marc” komentujący ten bilet utworzył (lub przynajmniej linki do) wtyczkę o nazwie „warningcleaner” w komentarzu 35 . Używam tego z dużym powodzeniem, czekając na zintegrowanie tej funkcji z Eclipse.
To naprawdę całkiem proste:
źródło
Rozwiązałem to za pomocą wtyczki Maven regexp replace - nie rozwiązuje on przyczyny, ale leczy ból:
Zwróć uwagę, że nie udało mi się uruchomić notacji **, więc być może będziesz musiał dokładnie określić ścieżkę.
Zobacz komentarz poniżej, aby dowiedzieć się, jak nie generować duplikatów @SupressWarnings
źródło
^(@SuppressWarnings\(.*?\)\s+)?public class
. Włączając adnotację do wzorca, nie zostanie on zduplikowany, jeśli już tam jest.${basedir}/
wcześniejtarget
w<include>
tagu. To trochę szarpane, ale ponieważ działa tylko na wygenerowanych plikach, wezmę to!Myślę, że najlepsze, co możesz zrobić, to włączyć ustawienia wyświetlania ostrzeżeń specyficzne dla projektu.
W górnej części formularza znajduje się łącze do konfigurowania ustawień specyficznych dla projektu.
źródło
Użytkownik @Jorn zasugerował kod Ant, aby to zrobić. Oto co mam
Zauważ, że <replace> Ant zastępuje tekst, a nie zastępuje wyrażenia regularne, więc nie może użyć meta-znaku ^ w tokenie do dopasowania początku wiersza, tak jak robi to wtyczka maven regexp replace.
Robię to w tym samym czasie, gdy uruchamiam Antlr z wtyczki maven-antrun-plugin w moim pomie Maven, ponieważ wtyczka ANTLR maven nie współpracowała dobrze z wtyczką Cobertura maven.
(Zdaję sobie sprawę, że to nie jest odpowiedź na pierwotne pytanie, ale nie mogę sformatować kodu Ant w komentarzu / odpowiedzi na inną odpowiedź, tylko w odpowiedzi)
źródło
Nie sądzę, że Eclipse z natury zapewnia sposób na zrobienie tego na poziomie katalogu (ale nie jestem pewien).
Możesz umieścić wygenerowane pliki w osobnym projekcie Java i kontrolować ostrzeżenia dla tego konkretnego projektu.
Generalnie i tak wolę umieścić wygenerowany automatycznie kod w osobnym projekcie.
źródło
Ostrzeżenia można wyłączyć tylko na poziomie projektu. Możesz jednak skonfigurować kartę problemów, aby pomijać ostrzeżenia z plików lub pakietów. Przejdź do menu Konfiguruj zawartość i pracuj z zakresem „Na zestawie roboczym:”.
źródło
Ten mały skrypt w języku Python „łata”
.classpath
pliki wygenerowane przez M2E i dodaje wymagany znacznik XML do wszystkich folderów źródłowych zaczynających się odtarget/generated-sources
. Możesz go po prostu uruchomić z folderu głównego projektu. Oczywiście musisz go ponownie uruchomić, gdy informacje o projekcie Eclipse zostaną ponownie wygenerowane z M2E. A wszystko oczywiście na własne ryzyko ;-)źródło
Robię to z kilkoma gramatykami ANTLR, które generują parser Java przy użyciu Ant. Skrypt budujący Ant dodaje element
@SuppressWarnings("all")
do jednego pliku Java i@Override
do kilku metod w innym. Mogę sprawdzić, jak to się robi dokładnie, jeśli jesteś zainteresowany.źródło
W przypadku ANTLR 2 istnieje możliwość pominięcia ostrzeżeń w generowanym kodzie poprzez dodanie
@SuppressWarnings
przed deklaracją klasy w pliku gramatyki np.źródło
Można to zrobić wykluczając określone katalogi ze ścieżki budowania (poniższy przykład podano przy użyciu Eclipse 3.5)
[1] Wyświetl ścieżkę budowania języka Java
[2] Dodaj katalogi do wykluczenia
źródło
Minęło trochę czasu, odkąd wypuściłem wtyczkę do czyszczenia ostrzeżeń, a teraz, gdy używam Eclipse 3.8, nie potrzebuję go już. Jednak dla tych, którzy nadal potrzebują tej wtyczki, opublikowałem ją na github z witryną aktualizacyjną na bintray. Jeśli nadal używasz Eclipse 3.7 lub starszego, może to być przydatne. Sprawdź tę witrynę, aby uzyskać szczegółowe informacje na temat instalacji.
źródło
Jeśli projekt eclipse jest generowany z gradle przy użyciu polecenia wtyczki Eclipse, opcję można ustawić, dodając to na najwyższym poziomie pliku:
eclipse
Selectively ignore errors/warnings from source folders
build.gradle
Zakłada się, że wygenerowane źródła znajdują się w
build/generated/parser
folderze.źródło