<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Error Prone Support引入了新的錯誤檢查和 Refaster 模板

          共 4123字,需瀏覽 9分鐘

           ·

          2022-12-22 09:06

          supermarket on wheels”公司 Picnic發(fā)布了Error Prone Support,這是一個開源項目,它擴展了 Google 的Error Prone,其中包含三十個新的錯誤檢查,用于檢測并選擇性地解決 Java 項目編譯期間可能出現(xiàn)的錯誤。超過五十個新的 Refaster 規(guī)則集合可用于通過自動重寫代碼庫來提高代碼一致性。

          Error Prone 是一個 Java 編譯器插件,由 Google 開源,它在編譯期間執(zhí)行靜態(tài)分析以檢測錯誤或提出可能的改進建議。該插件包含 500 多個預定義錯誤檢查,并允許第三方和自定義插件。檢測到問題后,Error Prone 可以顯示警告或使用預定義的解決方案自動更改代碼。

          最近發(fā)布的Error Prone Support提供的三十個新錯誤檢查之一是類,錯誤檢查將顯示警告或可選擇刪除以下方法:EmptyMethod

          void method() {}
          static void staticMethod() {}

          每當需要空方法時,可以使用以下注釋抑制誤報:

          @SuppressWarnings("EmptyMethod")

          只要一個類只有一個構(gòu)造函數(shù),AutowiredConstructor錯誤檢查就會刪除冗余@Autowired注釋,如下例所示:

          class Course {
            @Autowired
            Course() {}
          }

          class Student {
            @Autowired
            Student(String name) {}
          }

          該類MethodReferenceUsage檢測 lambda 表達式并將它們轉(zhuǎn)換為方法引用。例如,() -> course.method()更改為course::method

          在 Error Prone 中編寫錯誤檢查涉及使用抽象語法樹(AST) 和 Error Prone 的 API。這通常是檢測錯誤所必需的,但在重寫代碼時通常不需要。Google 的Refaster更易于使用,現(xiàn)在是 Error Prone 的一部分。Refaster 規(guī)則可用于在 Java 中使用@BeforeTemplate@AfterTemplate注釋定義重寫規(guī)則。Error Prone Support 提供了五十多個新的 Refaster 規(guī)則集合,其中包含 500 多個 Refaster 模板,例如StringRules類,它用方法替換各種表達式來評估 a 是否String為空String.isEmpty()

          @BeforeTemplate
          boolean before(String str) {
              return Refaster.anyOf(str.length() == 0, str.length() <= 0,
                  str.length() < 1);
          }

          @AfterTemplate
          @AlsoNegation
          boolean after(String str) {
              return str.isEmpty();
          }

          @AlsoNegation注釋表明該規(guī)則也可以匹配正文的邏輯否定@BeforeTemplate。例如,代碼str.length() != 0將更改為!str.isEmpty().

          該類TimeRules包含時間表達式的各種重寫規(guī)則,例如用 UTC 替換各種 Zone 偏移量:

          @BeforeTemplate
          ZoneId before() {
              // `ZoneId.of("Z")` is not listed, because Error Prone flags it out of the box.
              return Refaster.anyOf(
                  ZoneId.of("GMT"),
                  ZoneId.of("UTC"),
                  ZoneId.of("+0"),
                  ZoneId.of("-0"),
                  UTC.normalized(),
                  ZoneId.from(UTC));
          }

          @AfterTemplate
          ZoneOffset after() {
              return UTC;
          }

          或者用compareTo更具可讀性的方法替換該isBefore方法:

          @BeforeTemplate
          boolean before(Instant a, Instant b) {
              return a.compareTo(b) < 0;
          }

          @AfterTemplate
          @AlsoNegation
          boolean after(Instant a, Instant b) {
              return a.isBefore(b);
          }

          Error Prone的安裝說明可以作為基礎(chǔ),因為 Error Prone Support 建立在它之上。之后,相關(guān)的 Error Prone Support 模塊應該添加到annotationProcessorPaths中,例如,使用maven-compiler-plugin:

          <annotationProcessorPaths>
              <!-- Error Prone. -->
              <path>
                  <groupId>com.google.errorprone</groupId>
                  <artifactId>error_prone_core</artifactId>
                  <version>${error-prone.version}</version>
              </path>
              <!-- Error Prone Support's bug checks. -->
              <path>
                  <groupId>tech.picnic.error-prone-support</groupId>
                  <artifactId>error-prone-contrib</artifactId>
                  <version>${error-prone-support.version}</version>
              </path>
              <!-- Error Prone Support's Refaster rules. -->
              <path>
                  <groupId>tech.picnic.error-prone-support</groupId>
                  <artifactId>refaster-runner</artifactId>
                  <version>${error-prone-support.version}</version>
              </path>
          </annotationProcessorPaths>







          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕aⅴ一区中文字幕天堂 | 免费观看一区二区三区四区五区 | 熟妇乱伦视频 | 五月丁香啪啪综合网 | 久久成人网豆花视频 |