From 55d1f14ac4a1e64fd75cd0663e6b6cd48bd40622 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Fri, 16 Jun 2023 12:01:30 +0200 Subject: [PATCH 1/2] Add library to data extensions editor This adds a new library column to the data extensions editor containing the JAR or DLL file the method is defined in. This will be used to group methods by library in the future. For now, it just shows in a column. --- .../ql-vscode/src/data-extensions-editor/bqrs.ts | 2 ++ .../data-extensions-editor/external-api-usage.ts | 4 ++++ .../src/data-extensions-editor/queries/csharp.ts | 2 +- .../src/data-extensions-editor/queries/java.ts | 2 +- .../src/data-extensions-editor/queries/query.ts | 2 ++ .../DataExtensionsEditor.stories.tsx | 7 +++++++ .../data-extensions-editor/MethodRow.stories.tsx | 1 + .../DataExtensionsEditor.tsx | 15 +++++++++------ .../src/view/data-extensions-editor/MethodRow.tsx | 15 +++++++++------ .../data-extensions-editor/auto-model.test.ts | 8 ++++++++ .../data-extensions-editor/yaml.test.ts | 2 ++ 11 files changed, 46 insertions(+), 14 deletions(-) diff --git a/extensions/ql-vscode/src/data-extensions-editor/bqrs.ts b/extensions/ql-vscode/src/data-extensions-editor/bqrs.ts index a5c65fe13fa..5cdb96a0cb7 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/bqrs.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/bqrs.ts @@ -10,6 +10,7 @@ export function decodeBqrsToExternalApiUsages( const usage = tuple[0] as Call; const signature = tuple[1] as string; const supported = (tuple[2] as string) === "true"; + const library = tuple[4] as string; const [packageWithType, methodDeclaration] = signature.split("#"); @@ -31,6 +32,7 @@ export function decodeBqrsToExternalApiUsages( if (!methodsByApiName.has(signature)) { methodsByApiName.set(signature, { + library, signature, packageName, typeName, diff --git a/extensions/ql-vscode/src/data-extensions-editor/external-api-usage.ts b/extensions/ql-vscode/src/data-extensions-editor/external-api-usage.ts index 5d2eb4a888d..29c3a45a167 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/external-api-usage.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/external-api-usage.ts @@ -6,6 +6,10 @@ export type Call = { }; export type ExternalApiUsage = { + /** + * Contains the name of the library containing the method declaration, e.g. `sql2o-1.6.0.jar` or `System.Runtime.dll` + */ + library: string; /** * Contains the full method signature, e.g. `org.sql2o.Connection#createQuery(String)` */ diff --git a/extensions/ql-vscode/src/data-extensions-editor/queries/csharp.ts b/extensions/ql-vscode/src/data-extensions-editor/queries/csharp.ts index ff3757fb323..56944a2e319 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/queries/csharp.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/queries/csharp.ts @@ -26,7 +26,7 @@ where apiName = api.getApiName() and supported = isSupported(api) and usage = aUsage(api) -select usage, apiName, supported.toString(), "supported" +select usage, apiName, supported.toString(), "supported", api.getFile().getBaseName(), "library" `, dependencies: { "ExternalApi.qll": `/** Provides classes and predicates related to handling APIs from external libraries. */ diff --git a/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts b/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts index 0d40107218f..c66161158a9 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts @@ -28,7 +28,7 @@ where apiName = api.getApiName() and supported = isSupported(api) and usage = aUsage(api) -select usage, apiName, supported.toString(), "supported" +select usage, apiName, supported.toString(), "supported", api.jarContainer(), "jar" `, dependencies: { "ExternalApi.qll": `/** Provides classes and predicates related to handling APIs from external libraries. */ diff --git a/extensions/ql-vscode/src/data-extensions-editor/queries/query.ts b/extensions/ql-vscode/src/data-extensions-editor/queries/query.ts index b09b15e1481..f790fd9d408 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/queries/query.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/queries/query.ts @@ -7,6 +7,8 @@ export type Query = { * - apiName: the name of the external API. This is a string. * - supported: whether the external API is supported by the extension. This should be a string representation of a boolean to satify the result pattern for a problem query. * - "supported": a string literal. This is required to make the query a valid problem query. + * - libraryName: the name of the library that contains the external API. This is a string and usually the basename of a file. + * - "library": a string literal. This is required to make the query a valid problem query. */ mainQuery: string; dependencies?: { diff --git a/extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx b/extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx index 2a24b9cc951..97b89051983 100644 --- a/extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx +++ b/extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx @@ -34,6 +34,7 @@ DataExtensionsEditor.args = { }, initialExternalApiUsages: [ { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Connection#createQuery(String)", packageName: "org.sql2o", typeName: "Connection", @@ -64,6 +65,7 @@ DataExtensionsEditor.args = { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Query#executeScalar(Class)", packageName: "org.sql2o", typeName: "Query", @@ -94,6 +96,7 @@ DataExtensionsEditor.args = { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Sql2o#open()", packageName: "org.sql2o", typeName: "Sql2o", @@ -124,6 +127,7 @@ DataExtensionsEditor.args = { ], }, { + library: "rt.jar", signature: "java.io.PrintStream#println(String)", packageName: "java.io", typeName: "PrintStream", @@ -144,6 +148,7 @@ DataExtensionsEditor.args = { ], }, { + library: "spring-boot-3.0.2.jar", signature: "org.springframework.boot.SpringApplication#run(Class,String[])", packageName: "org.springframework.boot", @@ -165,6 +170,7 @@ DataExtensionsEditor.args = { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Sql2o#Sql2o(String,String,String)", packageName: "org.sql2o", typeName: "Sql2o", @@ -185,6 +191,7 @@ DataExtensionsEditor.args = { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Sql2o#Sql2o(String)", packageName: "org.sql2o", typeName: "Sql2o", diff --git a/extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx b/extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx index b0aa7e804fb..c3909f80d3b 100644 --- a/extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx +++ b/extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx @@ -16,6 +16,7 @@ const Template: ComponentStory = (args) => ( export const MethodRow = Template.bind({}); MethodRow.args = { externalApiUsage: { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Sql2o#open()", packageName: "org.sql2o", typeName: "Sql2o", diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx index 4b09a842446..6d9f1c0e852 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx @@ -235,24 +235,27 @@ export function DataExtensionsEditor({ - Type + Library - Method + Type - Usages + Method - Model type + Usages - Input + Model type - Output + Input + Output + + Kind diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx index b79c2aed9d6..46ab830c15b 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx @@ -149,6 +149,9 @@ export const MethodRow = ({ return ( + {externalApiUsage.library} + + - + - + {externalApiUsage.usages.length} - + {(!externalApiUsage.supported || (modeledMethod && modeledMethod?.type !== "none")) && ( )} - + {modeledMethod?.type && ["sink", "summary"].includes(modeledMethod?.type) && ( @@ -198,7 +201,7 @@ export const MethodRow = ({ )} - + {modeledMethod?.type && ["source", "summary"].includes(modeledMethod?.type) && ( @@ -212,7 +215,7 @@ export const MethodRow = ({ )} - + {predicate?.supportedKinds && ( { const externalApiUsages: ExternalApiUsage[] = [ { + library: "spring-boot-3.0.2.jar", signature: "org.springframework.boot.SpringApplication#run(Class,String[])", packageName: "org.springframework.boot", @@ -34,6 +35,7 @@ describe("createAutoModelRequest", () => { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Connection#createQuery(String)", packageName: "org.sql2o", typeName: "Connection", @@ -64,6 +66,7 @@ describe("createAutoModelRequest", () => { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Query#executeScalar(Class)", packageName: "org.sql2o", typeName: "Query", @@ -94,6 +97,7 @@ describe("createAutoModelRequest", () => { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Sql2o#open()", packageName: "org.sql2o", typeName: "Sql2o", @@ -124,6 +128,7 @@ describe("createAutoModelRequest", () => { ], }, { + library: "rt.jar", signature: "java.io.PrintStream#println(String)", packageName: "java.io", typeName: "PrintStream", @@ -144,6 +149,7 @@ describe("createAutoModelRequest", () => { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Sql2o#Sql2o(String,String,String)", packageName: "org.sql2o", typeName: "Sql2o", @@ -164,6 +170,7 @@ describe("createAutoModelRequest", () => { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Sql2o#Sql2o(String)", packageName: "org.sql2o", typeName: "Sql2o", @@ -184,6 +191,7 @@ describe("createAutoModelRequest", () => { ], }, { + library: "test.jar", signature: "org.test.MyClass#test()", packageName: "org.test", typeName: "MyClass", diff --git a/extensions/ql-vscode/test/unit-tests/data-extensions-editor/yaml.test.ts b/extensions/ql-vscode/test/unit-tests/data-extensions-editor/yaml.test.ts index 190950a8053..f30fdd9bb8c 100644 --- a/extensions/ql-vscode/test/unit-tests/data-extensions-editor/yaml.test.ts +++ b/extensions/ql-vscode/test/unit-tests/data-extensions-editor/yaml.test.ts @@ -9,6 +9,7 @@ describe("createDataExtensionYaml", () => { "java", [ { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Connection#createQuery(String)", packageName: "org.sql2o", typeName: "Connection", @@ -39,6 +40,7 @@ describe("createDataExtensionYaml", () => { ], }, { + library: "sql2o-1.6.0.jar", signature: "org.sql2o.Query#executeScalar(Class)", packageName: "org.sql2o", typeName: "Query", From 23745ba93fad4300a154e0f16412e65b60d5636a Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Mon, 19 Jun 2023 11:25:40 +0200 Subject: [PATCH 2/2] Change jar to library for Java query --- extensions/ql-vscode/src/data-extensions-editor/queries/java.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts b/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts index c66161158a9..ca6a14bfccb 100644 --- a/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts +++ b/extensions/ql-vscode/src/data-extensions-editor/queries/java.ts @@ -28,7 +28,7 @@ where apiName = api.getApiName() and supported = isSupported(api) and usage = aUsage(api) -select usage, apiName, supported.toString(), "supported", api.jarContainer(), "jar" +select usage, apiName, supported.toString(), "supported", api.jarContainer(), "library" `, dependencies: { "ExternalApi.qll": `/** Provides classes and predicates related to handling APIs from external libraries. */