From 1c2c604acb816a35211ba3b1e48376a59cb2b6fe Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Wed, 6 Jul 2022 13:46:49 -0500 Subject: [PATCH] @W-10459675@: Part 5 of 5. Added InvocableMethod-annotated methods as sources. --- sfge/src/main/java/com/salesforce/graph/Schema.java | 1 + .../java/com/salesforce/graph/ops/MethodUtil.java | 11 +++++++++-- sfge/src/main/java/com/salesforce/rules/RuleUtil.java | 2 ++ .../graph/build/CustomerApexVertexBuilderTest.java | 4 ++-- .../graph/build/InheritanceEdgeBuilderTest.java | 4 +--- .../java/com/salesforce/graph/ops/MethodUtilTest.java | 10 ++++++++-- .../test/java/com/salesforce/rules/RuleUtilTest.java | 8 +++++++- 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/sfge/src/main/java/com/salesforce/graph/Schema.java b/sfge/src/main/java/com/salesforce/graph/Schema.java index 9cdaa9a65..8e865d78f 100644 --- a/sfge/src/main/java/com/salesforce/graph/Schema.java +++ b/sfge/src/main/java/com/salesforce/graph/Schema.java @@ -30,6 +30,7 @@ public class Schema { public static final String IMPLEMENTED_BY = "ImplementedBy"; public static final String INTERFACE_DEFINING_TYPES = "InterfaceDefiningTypes"; public static final String INTERFACE_NAMES = "InterfaceNames"; + public static final String INVOCABLE_METHOD = "InvocableMethod"; /** True if this vertex is part of the Apex Standard Library */ public static final String IS_STANDARD = "IsStandard"; /** 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 acc1e7fc9..aaad1de86 100644 --- a/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java +++ b/sfge/src/main/java/com/salesforce/graph/ops/MethodUtil.java @@ -189,10 +189,17 @@ public static List getRemoteActionMethods( return getMethodsWithAnnotation(g, targetFiles, Schema.REMOTE_ACTION); } + /** + * Returns non-test methods in the target files with an @InvocableMethod annotation. An empty + * list implicitly includes all files. + */ + public static List getInvocableMethodMethods( + GraphTraversalSource g, List targetFiles) { + return getMethodsWithAnnotation(g, targetFiles, Schema.INVOCABLE_METHOD); + } + static List getMethodsWithAnnotation( GraphTraversalSource g, List targetFiles, String annotation) { - // Only look at UserClass vertices. Uninterested in Enums, Interfaces, or Triggers. - final String[] labels = new String[] {NodeType.USER_CLASS}; return SFVertexFactory.loadVertices( g, rootMethodTraversal(g, targetFiles) diff --git a/sfge/src/main/java/com/salesforce/rules/RuleUtil.java b/sfge/src/main/java/com/salesforce/rules/RuleUtil.java index f5a4858c5..1aa76d56f 100644 --- a/sfge/src/main/java/com/salesforce/rules/RuleUtil.java +++ b/sfge/src/main/java/com/salesforce/rules/RuleUtil.java @@ -63,6 +63,8 @@ public static List getPathEntryPoints( methods.addAll(MethodUtil.getNamespaceAccessibleMethods(g, fileLevelTargets)); // ...and RemoteAction methods... methods.addAll(MethodUtil.getRemoteActionMethods(g, fileLevelTargets)); + // ...and InvocableMethod methods... + methods.addAll(MethodUtil.getInvocableMethodMethods(g, fileLevelTargets)); // ...and PageReference methods... methods.addAll(MethodUtil.getPageReferenceMethods(g, fileLevelTargets)); // ...and global-exposed methods... diff --git a/sfge/src/test/java/com/salesforce/graph/build/CustomerApexVertexBuilderTest.java b/sfge/src/test/java/com/salesforce/graph/build/CustomerApexVertexBuilderTest.java index 8716abf0e..b568e8370 100644 --- a/sfge/src/test/java/com/salesforce/graph/build/CustomerApexVertexBuilderTest.java +++ b/sfge/src/test/java/com/salesforce/graph/build/CustomerApexVertexBuilderTest.java @@ -13,7 +13,6 @@ import com.salesforce.graph.ops.MethodUtil; import com.salesforce.graph.vertex.MethodVertex; import com.salesforce.graph.vertex.SFVertexFactory; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -120,7 +119,8 @@ public void testCaseSafeProperties() { ((Object[]) userClassVertex.get( Schema.INTERFACE_NAMES - + CaseSafePropertyUtil.CASE_SAFE_SUFFIX))[0]); + + CaseSafePropertyUtil.CASE_SAFE_SUFFIX)) + [0]); Map userInterfaceVertex = g.V().hasLabel(NodeType.USER_INTERFACE).elementMap().next(); diff --git a/sfge/src/test/java/com/salesforce/graph/build/InheritanceEdgeBuilderTest.java b/sfge/src/test/java/com/salesforce/graph/build/InheritanceEdgeBuilderTest.java index bceff013f..cdc491446 100644 --- a/sfge/src/test/java/com/salesforce/graph/build/InheritanceEdgeBuilderTest.java +++ b/sfge/src/test/java/com/salesforce/graph/build/InheritanceEdgeBuilderTest.java @@ -337,9 +337,7 @@ private void verifyInterfaceDefiningTypeProperty( .values(Schema.INTERFACE_DEFINING_TYPES) .toList(); for (Object propValue : propValues) { - MatcherAssert.assertThat( - (Object[])propValue, - arrayContaining(parentDefiningType)); + MatcherAssert.assertThat((Object[]) propValue, arrayContaining(parentDefiningType)); } } } 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 8997082ea..b69e82bfc 100644 --- a/sfge/src/test/java/com/salesforce/graph/ops/MethodUtilTest.java +++ b/sfge/src/test/java/com/salesforce/graph/ops/MethodUtilTest.java @@ -335,7 +335,13 @@ public void getTargetMethods_targetMethodInInnerAndOuterClass() { containsString(EventKey.WARNING_MULTIPLE_METHOD_TARGET_MATCHES.getMessageKey())); } - @ValueSource(strings = {Schema.AURA_ENABLED, Schema.REMOTE_ACTION, Schema.NAMESPACE_ACCESSIBLE}) + @ValueSource( + strings = { + Schema.AURA_ENABLED, + Schema.INVOCABLE_METHOD, + Schema.REMOTE_ACTION, + Schema.NAMESPACE_ACCESSIBLE + }) @ParameterizedTest(name = "{displayName}: {0}") public void testGetMethodsWithAnnotation(String annotation) { String[] sourceCode = { @@ -369,7 +375,7 @@ public void testGetMethodsWithAnnotation(String annotation) { + "}\n", }; - TestUtil.buildGraph(g, sourceCode); + TestUtil.buildGraph(g, sourceCode, true); List methods = MethodUtil.getMethodsWithAnnotation(g, new ArrayList<>(), annotation); diff --git a/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java b/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java index 1e1e03d60..16a638670 100644 --- a/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java +++ b/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java @@ -37,7 +37,13 @@ public void setup() { this.g = TestUtil.getGraph(); } - @ValueSource(strings = {Schema.AURA_ENABLED, Schema.REMOTE_ACTION, Schema.NAMESPACE_ACCESSIBLE}) + @ValueSource( + strings = { + Schema.AURA_ENABLED, + Schema.INVOCABLE_METHOD, + Schema.REMOTE_ACTION, + Schema.NAMESPACE_ACCESSIBLE + }) @ParameterizedTest(name = "{displayName}: {0}") public void getPathEntryPoints_includesAnnotatedMethods(String annotation) { String sourceCode =