From c49760e999171e0340cb95f687901444e93268fd Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Fri, 24 Jun 2022 12:35:36 -0500 Subject: [PATCH 1/2] @W-10459675@: Part 2 of several. Added RemoteAction-annotated methods as sources. --- .../java/com/salesforce/graph/Schema.java | 1 + .../com/salesforce/graph/ops/MethodUtil.java | 9 +++ .../java/com/salesforce/rules/RuleUtil.java | 2 + .../salesforce/graph/ops/MethodUtilTest.java | 58 +++++++++---------- .../com/salesforce/rules/RuleUtilTest.java | 40 ++++--------- 5 files changed, 53 insertions(+), 57 deletions(-) diff --git a/sfge/src/main/java/com/salesforce/graph/Schema.java b/sfge/src/main/java/com/salesforce/graph/Schema.java index b27726cd4..b38a1d413 100644 --- a/sfge/src/main/java/com/salesforce/graph/Schema.java +++ b/sfge/src/main/java/com/salesforce/graph/Schema.java @@ -47,6 +47,7 @@ public class Schema { public static final String NAMESPACE_ACCESSIBLE = "NamespaceAccessible"; public static final String OPERATOR = "Operator"; public static final String REFERENCE_TYPE = "ReferenceType"; + public static final String REMOTE_ACTION = "RemoteAction"; public static final String RETURN_TYPE = "ReturnType"; public static final String RULE_NAMES = "RulesNames"; public static final String STATIC = "Static"; diff --git a/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java b/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java index cbb8db917..4d758cab5 100644 --- a/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java +++ b/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java @@ -177,6 +177,15 @@ public static List getNamespaceAccessibleMethods( return getMethodsWithAnnotation(g, targetFiles, Schema.NAMESPACE_ACCESSIBLE); } + /** + * Returns non-test methods in the target files with a @NamespaceAccessible annotation. An empty + * list implicitly includes all files. + */ + public static List getRemoteActionMethods( + GraphTraversalSource g, List targetFiles) { + return getMethodsWithAnnotation(g, targetFiles, Schema.REMOTE_ACTION); + } + static List getMethodsWithAnnotation( GraphTraversalSource g, List targetFiles, String annotation) { // Only look at UserClass vertices. Uninterested in Enums, Interfaces, or Triggers. diff --git a/sfge/src/main/java/com/salesforce/rules/RuleUtil.java b/sfge/src/main/java/com/salesforce/rules/RuleUtil.java index bd0dae90b..b0b7c6ec0 100644 --- a/sfge/src/main/java/com/salesforce/rules/RuleUtil.java +++ b/sfge/src/main/java/com/salesforce/rules/RuleUtil.java @@ -61,6 +61,8 @@ public static List getPathEntryPoints( methods.addAll(MethodUtil.getAuraEnabledMethods(g, fileLevelTargets)); // ...and NamespaceAccessible methods... methods.addAll(MethodUtil.getNamespaceAccessibleMethods(g, fileLevelTargets)); + // ...and RemoteAction methods... + methods.addAll(MethodUtil.getRemoteActionMethods(g, fileLevelTargets)); // ...and PageReference methods... methods.addAll(MethodUtil.getPageReferenceMethods(g, fileLevelTargets)); // ...and exposed methods on VF controllers. diff --git a/sfge/src/test/java/com/salesforce/graph/ops/MethodUtilTest.java b/sfge/src/test/java/com/salesforce/graph/ops/MethodUtilTest.java index 30f4c41ff..051ed13a0 100644 --- a/sfge/src/test/java/com/salesforce/graph/ops/MethodUtilTest.java +++ b/sfge/src/test/java/com/salesforce/graph/ops/MethodUtilTest.java @@ -181,20 +181,20 @@ public void getTargetMethods_targetMultipleMethods() { MatcherAssert.assertThat(methodVertices, hasSize(equalTo(2))); - boolean method1Found = false; - boolean method2Found = false; - for (MethodVertex methodVertex : methodVertices) { - String name = methodVertex.getName(); - if (METHOD_WITHOUT_OVERLOADS_1.equals(name)) { - method1Found = true; - } else if (METHOD_WITHOUT_OVERLOADS_2.equals(name)) { - method2Found = true; - } else { - fail("Unexpected method name " + name); - } - } - assertTrue(method1Found); - assertTrue(method2Found); + boolean method1Found = false; + boolean method2Found = false; + for (MethodVertex methodVertex : methodVertices) { + String name = methodVertex.getName(); + if (METHOD_WITHOUT_OVERLOADS_1.equals(name)) { + method1Found = true; + } else if (METHOD_WITHOUT_OVERLOADS_2.equals(name)) { + method2Found = true; + } else { + fail("Unexpected method name " + name); + } + } + assertTrue(method1Found); + assertTrue(method2Found); String messages = CliMessager.getInstance().getAllMessages(); assertEquals("[]", messages); } @@ -242,20 +242,20 @@ public void getTargetMethods_targetNameDupedMethods() { MatcherAssert.assertThat(methodVertices, hasSize(equalTo(2))); - boolean line18Found = false; - boolean line22Found = false; - for (MethodVertex methodVertex : methodVertices) { - assertEquals(METHOD_WITH_EXTERNAL_NAME_DUPLICATION, methodVertex.getName()); - if (methodVertex.getBeginLine() == 18) { - line18Found = true; - } else if (methodVertex.getBeginLine() == 22) { - line22Found = true; - } else { - fail("Unexpected line number " + methodVertex.getBeginLine()); - } - } - assertTrue(line18Found); - assertTrue(line22Found); + boolean line18Found = false; + boolean line22Found = false; + for (MethodVertex methodVertex : methodVertices) { + assertEquals(METHOD_WITH_EXTERNAL_NAME_DUPLICATION, methodVertex.getName()); + if (methodVertex.getBeginLine() == 18) { + line18Found = true; + } else if (methodVertex.getBeginLine() == 22) { + line22Found = true; + } else { + fail("Unexpected line number " + methodVertex.getBeginLine()); + } + } + assertTrue(line18Found); + assertTrue(line22Found); String messages = CliMessager.getInstance().getAllMessages(); MatcherAssert.assertThat( @@ -335,7 +335,7 @@ public void getTargetMethods_targetMethodInInnerAndOuterClass() { containsString(EventKey.WARNING_MULTIPLE_METHOD_TARGET_MATCHES.getMessageKey())); } - @ValueSource(strings = {Schema.AURA_ENABLED, Schema.NAMESPACE_ACCESSIBLE}) + @ValueSource(strings = {Schema.AURA_ENABLED, Schema.REMOTE_ACTION, Schema.NAMESPACE_ACCESSIBLE}) @ParameterizedTest(name = "{displayName}: {0}") public void testGetMethodsWithAnnotation(String annotation) { String[] sourceCode = { diff --git a/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java b/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java index a7be11d6a..0479775a4 100644 --- a/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java +++ b/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java @@ -9,6 +9,7 @@ import static org.junit.jupiter.api.Assertions.fail; import com.salesforce.TestUtil; +import com.salesforce.graph.Schema; import com.salesforce.graph.vertex.MethodVertex; import com.salesforce.metainfo.MetaInfoCollectorTestProvider; import com.salesforce.metainfo.VisualForceHandlerImpl; @@ -25,6 +26,8 @@ import org.hamcrest.MatcherAssert; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; public class RuleUtilTest { private static final Logger LOGGER = LogManager.getLogger(RuleUtilTest.class); @@ -35,16 +38,19 @@ public void setup() { this.g = TestUtil.getGraph(); } - @Test - public void getPathEntryPoints_includesAuraEnabledMethods() { + @ValueSource(strings = {Schema.AURA_ENABLED, Schema.REMOTE_ACTION, Schema.NAMESPACE_ACCESSIBLE}) + @ParameterizedTest(name = "{displayName}: {0}") + public void getPathEntryPoints_includesAnnotatedMethods(String annotation) { String sourceCode = "public class Foo {\n" - + " @AuraEnabled\n" - + " public boolean auraMethod() {\n" + + " @" + + annotation + + "\n" + + " public boolean annotatedMethod() {\n" + " return true;\n" + " }\n" + "\n" - + " public boolean nonAuraMethod() {\n" + + " public boolean nonAnnotatedMethod() {\n" + " return true;\n" + " }\n" + "}\n"; @@ -54,29 +60,7 @@ public void getPathEntryPoints_includesAuraEnabledMethods() { MatcherAssert.assertThat(entryPoints, hasSize(equalTo(1))); MethodVertex firstVertex = entryPoints.get(0); - assertEquals("auraMethod", firstVertex.getName()); - } - - @Test - public void getPathEntryPoints_includesNamespaceAccessibleMethods() { - String sourceCode = - "public class Foo {\n" - + " @NamespaceAccessible\n" - + " public boolean nsMethod() {\n" - + " return true;\n" - + " }\n" - + "\n" - + " public boolean nonNsMethod() {\n" - + " return true;\n" - + " }\n" - + "}\n"; - TestUtil.buildGraph(g, sourceCode, true); - - List entryPoints = RuleUtil.getPathEntryPoints(g); - - MatcherAssert.assertThat(entryPoints, hasSize(equalTo(1))); - MethodVertex firstVertex = entryPoints.get(0); - assertEquals("nsMethod", firstVertex.getName()); + assertEquals("annotatedMethod", firstVertex.getName()); } @Test From 9a5cb3b8c55d582aae7b091a3e7984de34b48936 Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Mon, 27 Jun 2022 09:52:36 -0500 Subject: [PATCH 2/2] @W-10459675@: Updated typo in documentation. --- sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java b/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java index 4d758cab5..37a144e2f 100644 --- a/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java +++ b/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java @@ -178,7 +178,7 @@ public static List getNamespaceAccessibleMethods( } /** - * Returns non-test methods in the target files with a @NamespaceAccessible annotation. An empty + * Returns non-test methods in the target files with a @RemoteAction annotation. An empty * list implicitly includes all files. */ public static List getRemoteActionMethods(