Skip to content

Commit

Permalink
More examples
Browse files Browse the repository at this point in the history
  • Loading branch information
beckermarc committed Mar 22, 2024
1 parent 20086a4 commit 7bd1cbf
Show file tree
Hide file tree
Showing 9 changed files with 302 additions and 12 deletions.
3 changes: 1 addition & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.sap.openrewrite.recipe</groupId>
<artifactId>cap-java-recipes</artifactId>
<version>1.0</version>
<version>1.0.0-SNAPSHOT</version>

<dependencies>
<dependency>
Expand Down Expand Up @@ -93,7 +93,6 @@
<groupId>com.sap.cds</groupId>
<artifactId>cds-services-api</artifactId>
<version>2.7.1</version>
<scope>test</scope>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.sap.openrewrite.recipe;

import org.openrewrite.java.template.RecipeDescriptor;

import com.google.errorprone.refaster.annotation.AfterTemplate;
import com.google.errorprone.refaster.annotation.BeforeTemplate;
import com.sap.cds.reflect.CdsElement;

public class CdsElementEqualsRules {

@RecipeDescriptor(
name = "Replace CdsElement == comparisons",
description = "Replaces CdsElement == comparions with equals")
public static class SetTenantToSystemUser {

@BeforeTemplate
public boolean useObjectIdentity(CdsElement e1, CdsElement e2) {
return e1 == e2;
}

@AfterTemplate
public boolean useEquals(CdsElement e1, CdsElement e2) {
return e1.equals(e2);
}
}

}
51 changes: 51 additions & 0 deletions src/main/java/com/sap/openrewrite/recipe/FindCdsModelEquals.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.sap.openrewrite.recipe;

import org.openrewrite.ExecutionContext;
import org.openrewrite.Preconditions;
import org.openrewrite.Recipe;
import org.openrewrite.TreeVisitor;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.JavaTemplate;
import org.openrewrite.java.JavaVisitor;
import org.openrewrite.java.search.UsesType;
import org.openrewrite.java.template.Semantics;
import org.openrewrite.java.tree.J;
import org.openrewrite.marker.SearchResult;

import com.sap.cds.reflect.CdsModel;

public class FindCdsModelEquals extends Recipe {

@Override
public String getDisplayName() {
return "Finds CdsModel == comparisons";
}

@Override
public String getDescription() {
return "Finds usages of CdsModel ==.";
}

@Override
public TreeVisitor<?, ExecutionContext> getVisitor() {
JavaVisitor<ExecutionContext> javaVisitor = new JavaIsoVisitor<>() {
final JavaTemplate useObjectIdentity = Semantics.expression(this, "useObjectIdentity",
(CdsModel m1, CdsModel m2) -> m1 == m2).build();

@Override
public J.Binary visitBinary(J.Binary elem, ExecutionContext ctx) {
J.Binary b = super.visitBinary(elem, ctx);
if (useObjectIdentity.matches(getCursor())) {
return SearchResult.found(elem);
}
return b;
}

};
return Preconditions.check(
new UsesType<>("com.sap.cds.reflect.CdsModel", true),
javaVisitor
);
}

}
26 changes: 19 additions & 7 deletions src/main/java/com/sap/openrewrite/recipe/FindSetTenant.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
import org.openrewrite.TreeVisitor;
import org.openrewrite.java.JavaIsoVisitor;
import org.openrewrite.java.MethodMatcher;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.J.MethodInvocation;
import org.openrewrite.marker.SearchResult;

import com.sap.openrewrite.recipe.table.SetTenant;

public class FindSetTenant extends Recipe {

// private final transient SetTenant table = new SetTenant(this);
private final transient SetTenant table = new SetTenant(this);

@Override
public String getDisplayName() {
Expand All @@ -24,18 +27,27 @@ public String getDescription() {

@Override
public TreeVisitor<?, ExecutionContext> getVisitor() {
MethodMatcher setTenantMatcher = new MethodMatcher("com.sap.cds.services.request.ModifiableUserInfo#setTenant(..)");
MethodMatcher modifyUserMatcher = new MethodMatcher("com.sap.cds.services.request.RequestContext#modifyUser(..)");
MethodMatcher setTenantMatcher = new MethodMatcher("com.sap.cds.services.request.ModifiableUserInfo setTenant(..)");
MethodMatcher modifyUserMatcher = new MethodMatcher("com.sap.cds.services.runtime.RequestContextRunner modifyUser(..)");
return new JavaIsoVisitor<ExecutionContext>() {

@Override
public MethodInvocation visitMethodInvocation(MethodInvocation method, ExecutionContext p) {
MethodInvocation m = super.visitMethodInvocation(method, p);

// JavaTemplate matcher = Semantics.expression(this, "setTenantMatcher",
// (RequestContextRunner r, String s) -> r.modifyUser(u -> u.setTenant(s)))
// .build();
// if (matcher.matches(getCursor())) {
// return SearchResult.found(m);
// }

if (setTenantMatcher.matches(m)) {
//MethodInvocation enclosing = getCursor().firstEnclosing(J.MethodInvocation.class);
//if (modifyUserMatcher.matches(enclosing)) {
return SearchResult.found(method);
//}
MethodInvocation parent = getCursor().getParent().firstEnclosing(J.MethodInvocation.class);
if (modifyUserMatcher.matches(parent)) {
table.insertRow(p, new SetTenant.Row(m.printTrimmed(getCursor())));
return SearchResult.found(m);
}
}
return m;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.sap.openrewrite.recipe;

import org.openrewrite.java.template.RecipeDescriptor;

import com.google.errorprone.refaster.annotation.AfterTemplate;
import com.google.errorprone.refaster.annotation.BeforeTemplate;
import com.sap.cds.services.runtime.RequestContextRunner;

public class RequestContexRunnerRules {

@RecipeDescriptor(
name = "Replaces setTenant() with systemUser()",
description = "Descriptions")
public static class SetTenantToSystemUser {

@BeforeTemplate
public RequestContextRunner modifyUserBefore(RequestContextRunner runner, String tenant) {
return runner.modifyUser(u -> u.setTenant(tenant));
}

@AfterTemplate
public RequestContextRunner systemUserAfter(RequestContextRunner runner, String tenant) {
return runner.systemUser(tenant);
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.sap.openrewrite.recipe;

import static org.openrewrite.java.Assertions.java;

import org.junit.jupiter.api.Test;
import org.openrewrite.java.JavaParser;
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

public class CdsElementEqualsRulesTest implements RewriteTest {

@Override
public void defaults(RecipeSpec spec) {
spec.recipe(new CdsElementEqualsRulesRecipes()).parser(JavaParser.fromJavaVersion().classpath("cds4j-api"));
}

@Test
void testReplaceModifyUser() {
rewriteRun(
java(

"""
import com.sap.cds.reflect.CdsEntity;
import com.sap.cds.reflect.CdsElement;
class Test {
boolean test(CdsEntity entity, CdsElement elem) {
return entity.getElement("test") == elem;
}
}
""",
"""
import com.sap.cds.reflect.CdsEntity;
import com.sap.cds.reflect.CdsElement;
class Test {
boolean test(CdsEntity entity, CdsElement elem) {
return entity.getElement("test").equals(elem);
}
}
"""
)
);

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.sap.openrewrite.recipe;

import static org.openrewrite.java.Assertions.java;

import org.junit.jupiter.api.Test;
import org.openrewrite.java.JavaParser;
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

public class FindCdsModelEqualsTest implements RewriteTest {

@Override
public void defaults(RecipeSpec spec) {
spec.recipe(new FindCdsModelEquals()).parser(JavaParser.fromJavaVersion().classpath("cds4j-api"));
}

@Test
void testReplaceModifyUser() {
rewriteRun(
java(

"""
import com.sap.cds.reflect.CdsModel;
class Test {
boolean test(CdsModel m1, CdsModel m2) {
return m1 == m2;
}
}
""",
"""
import com.sap.cds.reflect.CdsModel;
class Test {
boolean test(CdsModel m1, CdsModel m2) {
return /*~~>*/m1 == m2;
}
}
"""
)
);

}

}
28 changes: 25 additions & 3 deletions src/test/java/com/sap/openrewrite/recipe/FindSetTenantTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public void defaults(RecipeSpec spec) {
}

@Test
void testSelect() {
void testSetTenantInModifyUser() {
rewriteRun(
java(

Expand All @@ -25,7 +25,9 @@ void testSelect() {
class Test {
void test(CdsRuntime runtime) {
runtime.requestContext().modifyUser(u -> u.setTenant(null));
runtime.requestContext().modifyUser(u ->
u.setTenant(null)
);
}
}
Expand All @@ -36,7 +38,9 @@ void test(CdsRuntime runtime) {
class Test {
void test(CdsRuntime runtime) {
runtime.requestContext().modifyUser(u -> /*~~>*/u.setTenant(null));
runtime.requestContext().modifyUser(u ->
/*~~>*/u.setTenant(null)
);
}
}
Expand All @@ -46,4 +50,22 @@ void test(CdsRuntime runtime) {

}

@Test
void testSetTenant() {
rewriteRun(
java(
"""
import com.sap.cds.services.request.UserInfo;
class Test {
void test() {
UserInfo.create().setTenant(null);
}
}
"""
)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.sap.openrewrite.recipe;

import static org.openrewrite.java.Assertions.java;

import org.junit.jupiter.api.Test;
import org.openrewrite.java.JavaParser;
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

public class RequestContextRunnerRulesTest implements RewriteTest {

@Override
public void defaults(RecipeSpec spec) {
spec.recipe(new RequestContexRunnerRulesRecipes()).parser(JavaParser.fromJavaVersion().classpath("cds-services-api"));
}

@Test
void testReplaceModifyUser() {
rewriteRun(
java(

"""
import com.sap.cds.services.runtime.CdsRuntime;
class Test {
void test(CdsRuntime runtime) {
String test = "test";
runtime.requestContext().modifyUser(u -> u.setTenant(test));
}
}
""",
"""
import com.sap.cds.services.runtime.CdsRuntime;
class Test {
void test(CdsRuntime runtime) {
String test = "test";
runtime.requestContext().systemUser(test);
}
}
"""
)
);

}

}

0 comments on commit 7bd1cbf

Please sign in to comment.