Giriş
OpenRewrite bir static kod analiz aracı. Diğer araçlardan farklı olarak sadece rapor üretmiyor aynı zamanda kodu da değiştirebiliyor.
1. dryRun Goal
target/rewrite dizini altında bir patch dosyası oluşturur
2. run Goal
Kodları direkt değiştirir
3. Recipe Listesi
3.1 CommonStaticAnalysis Recipe
Sanırım en işe yarayan recipe'lerden bir tanesi. Bur recipe ile yapılabilecek işlerin listesi burada
Benim hazelcast kodunda çalıştırdıklarım şöyle
- org.openrewrite.staticanalysis.UseDiamondOperator
- org.openrewrite.staticanalysis.UnncessaryThrows
- org.openrewrite.staticanalysis.NoRedundantJumpStatements
- org.openrewrite.staticanalysis.NestedEnumsAreNotStatic
- org.openrewrite.staticanalysis.RemoveRedundantTypeCast
- org.openrewrite.staticanalysis.LambdaBlockToExpression. EE için koşmadım
- org.openrewrite.staticanalysis.UnnecessaryExplicitTypeArguments
- org.openrewrite.staticanalysis.SimplifyTernaryRecipes
- org.openrewrite.staticanalysis.ReplaceRedundantFormatWithPrintf
- org.openrewrite.staticanalysis.InstanceOfPatternMatch. EE için koşmadım. OS için yarım koştum
- org.openrewrite.staticanalysis.JavaApiBestPractices
- org.openrewrite.staticanalysis.PrimitiveWrapperClassConstructorToValueOf
- org.openrewrite.staticanalysis.NoPrimitiveWrappersForToStringOrCompareTo
- org.openrewrite.staticanalysis.UseMapContainsKey
AddSerialAnnotationToserialVersionUID
Örnek
Şöyle yaparız
./mvnw
-Dskip-modulepath-tests
-Dcheckstyle.skip
clean
org.openrewrite.maven:rewrite-maven-plugin:run
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-static-analysis:RELEASE
-Drewrite.activeRecipes=org.openrewrite.staticanalysis.AddSerialAnnotationToserialVersionUID
-Drewrite.exportDatatables=true
MissingOverrideAnnotation
Örnek
Şöyle yaparız
./mvnw
-Dskip-modulepath-tests
-Dcheckstyle.skip
clean
org.openrewrite.maven:rewrite-maven-plugin:run
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-static-analysis:RELEASE
-Drewrite.activeRecipes=org.openrewrite.staticanalysis.MissingOverrideAnnotation
-Drewrite.exportDatatables=true -Drewrite.options=ignoreAnonymousClassMethods=true
Örnek
Şöyle yaparız
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.23.1</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.staticanalysis.CommonStaticAnalysis</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-static-analysis</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
</plugin>
Eğer proje çok büyükse sadece bazı şeyleri çalıştırmak için proje kök dizininde bir tane rewrite.yml dosyası oluştururuz. Şöyle yaparız. Eğer proje multi-module ise yine en tepedeki dizine koymak lazım
---
type: specs.openrewrite.org/v1beta/recipe
name: orcun.CommonStaticAnalysis
displayName: Common static analysis issues
description: Resolve common static analysis issues discovered through 3rd party tools.
recipeList:
- org.openrewrite.staticanalysis.UseDiamondOperator
pom.xml şöyle olur.
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.23.1</version>
<configuration>
<activeRecipes>
<recipe>orcun.CommonStaticAnalysis</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-static-analysis</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
</plugin>
3.2 Migration
CompareEnumsWithEqualityOperator Örnek
Şöyle yaparız
./mvnw
-Dskip-modulepath-tests
-Dcheckstyle.skip
clean
org.openrewrite.maven:rewrite-maven-plugin:run
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE
-Drewrite.activeRecipes=org.openrewrite.staticanalysis.CompareEnumsWithEqualityOperator
-Drewrite.exportDatatables=true
StringRulesRecipes
Örnek
Şöyle yaparız
./mvnw
-T1
-Dskip-modulepath-tests
-Dcheckstyle.skip
clean
org.openrewrite.maven:rewrite-maven-plugin:run
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE
-Drewrite.activeRecipes=org.openrewrite.java.migrate.lang.StringRulesRecipes$RedundantCallRecipe
-Drewrite.exportDatatables=true