Main Content

padv.builtin.query.FindCodeForModel Class

Namespace: padv.builtin.query
Superclasses: padv.Query

Query for finding generated code files and buildInfo.mat for model

Description

This class requires CI/CD Automation for Simulink Check.

The padv.builtin.query.FindCodeForModel class provides a query that can return the generated code files and buildInfo.mat for a model. You can automatically include or exclude certain artifacts by using the optional name-value arguments.

You can use this query in your process model to find artifacts for your tasks to iterate over or use as inputs.

The padv.builtin.query.FindCodeForModel class is a handle class.

Creation

Description

query = padv.builtin.query.FindCodeForModel() creates a query for finding the generated code files and buildInfo.mat for a model.

example

query = padv.builtin.query.FindCodeForModel(Name=Value) sets certain properties using one or more name-value arguments. For example, padv.builtin.query.FindCodeForModel(Name = "MyCodeQuery") creates a query object with the name "MyCodeQuery".

The padv.builtin.query.FindCodeForModel class also has other properties, but you cannot set those properties during query creation.

example

Input Arguments

expand all

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: query = padv.builtin.query.FindCodeForModel(Name = "MyCodeQuery")

Exclude artifacts with specific project label, specified as a cell array where the first entry is the project label category and the second entry is the project label name.

Example: {"Category","Label"}

Data Types: cell

Exclude artifacts where the path contains specific text, specified as a string or a character vector.

Example: "Control"

Data Types: string

Find artifacts with specific project label, specified as a cell array where the first entry is the project label category and the second entry is the project label name.

Example: {"Category","Label"}

Data Types: cell

Find artifacts where the path contains specific text, specified as a string.

Example: "Control"

Data Types: string

Unique identifier for query, specified as a string.

Example: "FindMyCode"

Data Types: string

Initial query run before iteration query, specified as either a padv.Query object or the Name of a padv.Query object. When you specify a padv.Query object as the iteration query for a task, the Parent query is the initial query that the build system runs before running the specified iteration query.

The build system ignores the Parent query when you specify a query as an input query or dependency query for a task.

For information on how to improve Process Advisor load times by sharing query instances across your process model, see Best Practices for Process Model Authoring.

Example: padv.builtin.query.FindModels

Example: padv.builtin.query.FindModels(IncludePath = "Control")

Properties

expand all

Find artifacts with specific project label, specified as a cell array where the first entry is the project label category and the second entry is the project label name.

Example: {"Category","Label"}

Data Types: cell

Exclude artifacts with specific project label, specified as a cell array where the first entry is the project label category and the second entry is the project label name.

Example: {"Category","Label"}

Data Types: cell

Find artifacts where the path contains specific text, specified as a string.

Example: "Control"

Data Types: string

Exclude artifacts where the path contains specific text, specified as a string or a character vector.

Example: "Control"

Data Types: string

Query title, specified as a string or a character vector.

Example: "Find my generated code and buildInfo"

Data Types: string

Default artifact type returned by the query, specified as one or more of the values in this table. To specify multiple values, use an array.

CategoryArtifact TypeDescription

MATLAB®

"m_class"MATLAB class
"m_file"MATLAB file
"m_func"MATLAB function
"m_method"MATLAB class method
"m_property"MATLAB class property

Model Advisor

"ma_config_file"Model Advisor configuration file
"ma_justification_file"Model Advisor justification file

Process Advisor

"padv_dep_artifacts"

Related artifacts that current artifact depends on

"padv_output_file"

Process Advisor output file

Project

"project"Current project file

Requirements

"mwreq_item"Requirement (since R2024b)

"sl_req"

Requirement (for R2024a and earlier)
"sl_req_file"Requirement file
"sl_req_table"Requirements Table

Stateflow®

"sf_chart"Stateflow chart
"sf_graphical_fcn"Stateflow graphical function
"sf_group"Stateflow group
"sf_state"Stateflow state
"sf_state_transition_chart"Stateflow state transition chart
"sf_truth_table"Stateflow truth table

Simulink®

"sl_block_diagram"Block diagram
"sl_data_dictionary_file"Data dictionary file
"sl_embedded_matlab_fcn"MATLAB function
"sl_block_diagram"Block diagram
"sl_library_file"Library file
"sl_model_file"Simulink model file
"sl_protected_model_file"Protected Simulink model file
"sl_subsystem"Subsystem
"sl_subsystem_file"Subsystem file

System Composer™

"zc_block_diagram"System Composer architecture
"zc_component"System Composer architecture component
"zc_file"System Composer architecture file
Tests"harness_info_file"Harness info file
"sl_harness_block_diagram"Harness block diagram
"sl_harness_file"Test harness file
"sl_test_case"Simulink Test™ case
"sl_test_case_result"Simulink Test case result
"sl_test_file"Simulink Test file
"sl_test_iteration"Simulink Test iteration
"sl_test_iteration_result"Simulink Test iteration result
"sl_test_report_file"Simulink Test result report
"sl_test_result_file"Simulink Test result file
"sl_test_resultset"Simulink Test result set
"sl_test_seq"Test Sequence
"sl_test_suite"Simulink Test suite
"sl_test_suite_result"Simulink Test suite result

Example: "coder_code_files"

Example: ["coder_code_files" "other_file"]

Initial query run before iteration query, specified as either a padv.Query object or the Name of a padv.Query object. When you specify a padv.Query object as the iteration query for a task, the Parent query is the initial query that the build system runs before running the specified iteration query.

The build system ignores the Parent query when you specify a query as an input query or dependency query for a task.

For information on how to improve Process Advisor load times by sharing query instances across your process model, see Best Practices for Process Model Authoring.

Example: padv.builtin.query.FindModels

Example: padv.builtin.query.FindModels(IncludePath = "Control")

Unique identifier for query, specified as a string.

Example: "FindMyCode"

Data Types: string

Show file extensions in the Alias property of returned artifacts, specified as a numeric or logical 1 (true) or 0 (false). The Alias property controls the display name for the artifact in the Tasks column in Process Advisor.

By default, queries strip file extensions from the Alias property of each task iteration artifact. To show file extensions for all artifacts in the Tasks column, select the project setting Show file extensions. To keep file extensions in the results for a specific query, specify the query property ShowFileExtension as true.

Example: true

Data Types: logical

Setting for automatically sorting artifacts by address, specified as a numeric or logical 1 (true) or 0 (false). When a query returns artifacts, the artifacts should be in a consistent order. By default, the build system sorts artifacts by the artifact address.

Alternatively, you can sort artifacts in a different order by overriding the internal sortArtifacts method in a subclass that defines a custom sort behavior. For an example, see Sort Artifacts in Specific Order.

The build system automatically calls the sortArtifacts method when using the process model. The sortArtifacts method expects two input arguments: a padv.Query object and a list of padv.Artifact objects returned by the run method. The sortArtifacts method should return a list of sorted padv.Artifact objects.

Example: SortArtifacts = false

Data Types: logical

Handle to the function that a function-based query runs, specified as a function_handle.

If you define your query functionality inside a function and you or the build system call run on the query, the query runs the function specified by the function_handle.

The built-in queries are defined inside classes and do not use the FunctionHandle.

Example: FunctionHandle = @FunctionForQuery

Data Types: function_handle

Methods

expand all

Examples

collapse all

You can use the FindCodeForModel query in your process model to find generated code and buildInfo.mat files for your tasks to iterate over (IterationQuery) or use as inputs (addInputQueries). For example, you can use the FindCodeForModel query to find the code a code generation task, like padv.builtin.task.GenerateCode, generates and use those files as the input to a code analysis task like padv.builtin.task.RunCodeInspection.

Open a project. For this example, you can open the Process Advisor example project.

processAdvisorExampleStart
Suppose that you want to create one subprocess to contain your code generation tasks and another subprocess to contain your code analysis tasks. Your code analysis tasks need access to the generated code, but the tasks themselves cannot directly depend on the code generation task because that relationship would cross the subprocess boundary.

To pass the generated code from your code generation subprocess to your code analysis subprocess, you can update each of your code analysis tasks to find and use the generated model code as a task input by specifying FindCodeForModel as the input query for your code analysis tasks. Since the code analysis subprocess depends on the code that the code generation subprocess generates, you also need to specify a dependency between those subprocesses. For example, you can have the following process model:

function processmodel(pm)
    % Defines the project's processmodel

    arguments
        pm padv.ProcessModel
    end

    % Add "Code Generation" subprocess
    spCodeGen = pm.addSubprocess("Code Generation Tasks");
    spCodeGen.addTask(padv.builtin.task.GenerateCode);

    % Add "Code Analysis" subprocess
    spCodeAnalysis = pm.addSubprocess("Code Analysis Tasks");
    % Update task to find and use model code as an input to the task
    spCodeAnalysis.addTask(padv.builtin.task.RunCodeInspection(...
        InputQueries=padv.builtin.query.FindCodeForModel()));

    % Dependency between "Code Generation" and "Code Analysis" subprocesses
    spCodeAnalysis.dependsOn(spCodeGen);

end
For information on subprocesses and subprocess boundaries, see Group Tasks with Subprocesses.

In Process Advisor, view the updated Tasks by clicking Refresh Tasks and switching to the Project view. When you run the code analysis task, the task automatically runs the code generation task and uses the generated code as an input for code analysis.

Note that in the previous example process model, the GenerateCode and RunCodeInspection tasks both use the same FindModels iteration query. To potentially improve process model loading times, you can share a single query object, in this case findModels, across the tasks.

function processmodel(pm)
    % Defines the project's processmodel

    arguments
        pm padv.ProcessModel
    end

    findModels = padv.builtin.query.FindModels(Name="ModelsQuery");

    % Add "Code Generation" subprocess
    spCodeGen = pm.addSubprocess("Code Generation Tasks");
    codeGenTask = spCodeGen.addTask(padv.builtin.task.GenerateCode(...
        IterationQuery = findModels));

    % Add "Code Analysis" subprocess
    spCodeAnalysis = pm.addSubprocess("Code Analysis Tasks");
    % Update task to find and use model code as an input to the task
    spCodeAnalysis.addTask(padv.builtin.task.RunCodeInspection(...
        IterationQuery = findModels,...
        InputQueries=padv.builtin.query.FindCodeForModel(Parent = findModels)));

    % Dependency between "Code Generation" and "Code Analysis" subprocesses
    spCodeAnalysis.dependsOn(spCodeGen);

end
For more information, see Best Practices for Process Model Authoring.

Capabilities and Limitations

This table identifies functionality that is supported by the query.

FunctionalitySupported?

Input query for task

Yes.

Iteration query for task

Yes.

Note

If you use this query as an input query and specify non-empty values for IncludeLabel, ExcludeLabel, IncludePath, or ExcludePath, your task results can unexpectedly become outdated. If you see this behavior, consider using a different query, like padv.builtin.query.FindArtifacts, instead. For more information and a list of queries that are not impacted by this limitation, see Other Limitations.