1.4.11. Migration to 7.10.0

1.4.11.1. AxivionC#Frontend

A number of improvements have been made in how AxivionC#Frontend communicates with MSBuild:

  • MSBuild is now invoked directly and only once for a configured solution and project. This leads to faster build times especially with solutions consisting of many projects.

  • Environment variables passed to axivion_ci are directly inherited by the MSBuild process. In particular, the following variables are no longer treated special:

    • The PLATFORM environment variable is no longer overwritten, which may cause build errors, if axivion_ci is executed from an environment that was created using vcvarsall.bat.

    • AxivionC#Frontend no longer emulates Visual Studio Design Time builds, therefore the BuildingInsideVisualStudio variable is no longer set to true.

    • The UseSharedCompilation MSBuild property no longer set to false, which allows the build to use the “Compiler Server infrastructure”.

    • The MSBuildSdksPath MSBuild property is no longer overwritten.

  • AxivionC#Frontend is now able to use multiple cores when running the initial build as well as when performing analyses. For the initial build phase parallelization must be explicitly enabled using the build_in_parallel setting.

  • Note: If the binarylog setting was previously configured in an analysis containing multiple projects, the binlog for each project was recorded as a separate file in a subdirectory. Now the binarylog setting refers to the name of a single log file even for solutions. If the directory still exists from a previous build, AxivionC#Frontend will print a warning message and store the binarylog in a temporary location instead. It will never delete a directory. This can be fixed by deleting the old binarylog directory manually, or by changing the name of the binarylog.

1.4.11.2. Dead Code detection for C#

DeadCodeDetection now reports two cases of unused code that were previously assumed to be used:

  • Unused code entities that have custom attributes attached to them are now reported as dead. Previously, the presence of a custom attribute made the code entity unconditionally alive. If you use custom attributes to mark a code entity as an external entry-point that should be considered alive – even if there are no uses in C# code – these entry-points can be configured using the EntryPoints-EntriesByAttribute rule.

  • Code entities that have no implementation (such as extern, partial or abstract methods), are now reported as unused, if there is no caller in C# code.

1.4.11.3. Metrics

Metric-Coupling and Metric-InverseCoupling

The option coupling_edge_name was renamed to coupling_hierarchy_edge_name to better reflect its purpose. Existing JSON configuration files that set this option are migrated on the fly when they are loaded.

1.4.11.4. Dashboard

Renaming of old “upload” mode

The boolean option /Results/Dashboard/upload was renamed to /Results/Dashboard/database_mode with enumerators shared_database (old upload=false) and managed_upload (old upload=true). Migration of that option is automatic in JSON when not using an environment variable reference. If you used an environment variable reference in JSON or are using this option in a Python layer, you will have to adjust your configuration manually.

Initial Configuration Templates

Template names for the dashboard init <template> subcommand have been updated. It is now also mandatory to specify a template. You can find more information in the full list of initial configuration options.

Encryption of Configuration Database

The encryption of sensitive values stored inside the file dashboard2.db was already introduced with 7.8.3. So far, only one, easily recoverable field was actually encrytped. With this version, we have greatly extended the use of encryption for sensitive fields as a protective measure. Please be aware – even though we already mentioned it in the 7.8.3 Migration Guide – that the files dashboard2.db and the file secrets.json residing next to it since 7.8.3 must always be used as a pair and loosing the file secrets.json belonging to a concrete dashboard2.db is now a lot harder to recover from.

API Tokens

Caution

All authentication tokens will now be deleted when user password is changed.

Previously tokens of the types General, SourceFetch and ContinuousIntegration were not affected by password change. For more information about available API token types see ApiTokenTypes. If you require a permanent token we recommend creating a passwordless user similar to what is described in axivion_ci Authentication.

Issue Annotations

Issue annotations (Comments/Tags) now use the correct display name of OAuth2/OpenID Connect users. This change requires a migration of the .dbx project database. During migration a database backup file with the extension .bak will be created. Depending on whether the project/database is managed or unmanaged and your automatic cleanup settings, the backup may get a .<timestamp>.trash extension and is potentially deleted after 5 days. We recommend to disable the two Delete *.trash file ... options in the general settings page until the users are sufficiently confident the update didn’t create problems. Downgrading the dashboard to a previous version after this successful migration, will lead to unexpected errors on the Issue and Issue List pages. Therefore, use the .bak file in case of downgrading the dashboard.

OIDC Configuration

The configuration interface for OIDC providers has been moved from General Settings to its own page which is reachable via the settings menu. In addition to the new location, with the new interface it is now possible to have multiple providers configured simultaneously.

OIDC Logout / End Session Configuration

When clicking the logout button in the navigation bar, the Axivion Dashboard Server tries to also end the session at the OIDC Provider. When finished, the OP will redirect back to the Axivion Dashboard Server base URL. As all redirect URIs need to be registered at the OP beforehand, please add the Axivion Dashboard Server base URL to the list of allowed post logout redirect URIs. If your OIDC Provider does not have a separate section for post logout redirect URIs, please use the default Redirect URIs section.

1.4.11.5. IR

Several IR classes have been removed; and in some places the inheritance hierarchy has been slightly simplified.

If you have custom stylecheck rules using any of the following classes, you will need to adjust your code:

Mapping of old PIR class names to new PIR class names

Old name

New name

Ordinary_Class_Scoped_Based_Enum_Type_Definition

Class_Scoped_Based_Enum_Type_Definition

Ordinary_Class_Scoped_Unbased_Enum_Type_Definition

Class_Scoped_Unbased_Enum_Type_Definition

Ordinary_Unnamed_Based_Enum_Type_Definition

Unnamed_Based_Enum_Type_Definition

Ordinary_Unscoped_Based_Enum_Type_Definition

Unscoped_Based_Enum_Type_Definition

Ordinary_Unnamed_Unbased_Enum_Type_Definition

Unnamed_Unbased_Enum_Type_Definition

Ordinary_Unscoped_Unbased_Enum_Type_Definition

Unscoped_Unbased_Enum_Type_Definition

Using_Typename_Class_Member_Declaration

Using_Class_Member_Declaration

General_Using_Namespace_Member_Declaration

Using_Namespace_Member_Declaration

Using_Typename_Namespace_Member_Declaration

Using_Namespace_Member_Declaration

Literal_Operator_Function_Definition

Operator_Function_Definition

Literal_Operator_Function_Declaration

Operator_Function_Declaration

Normal_Operator_Function_Definition

Operator_Function_Definition

Normal_Operator_Function_Declaration

Operator_Function_Declaration

Standard_Command_Line_Function_Macro_Definition

Command_Line_Function_Macro_Definition

Standard_Source_Function_Macro_Definition

Source_Function_Macro_Definition

General_Catch_One_Block

Catch_One_Block

Asm_Definition

Asm_Statement

Mapping of old LIR class names to new LIR class names

Old name

New name

CFG_Generated_Catch_All_Block

CFG_Catch_All_Block

CFG_Explicit_Catch_All_Block

CFG_Catch_All_Block

Const_Cast_Instruction

Qualifier_Conversion_Instruction

C_Cast_Instruction

Conversion_Instruction

Implicit_C_Cast_Instruction

Conversion_Instruction

Explicit_C_Cast_Instruction

Conversion_Instruction

Static_Cast_Instruction

Conversion_Instruction

A number of additional classes were deleted without replacement. Those classes would never appear in any C/C++ IR, so it is unlikely that they were in use in any custom rules.

In the type ir.Logical.Composite_Type, the field Finalizer was renamed to Destructor.

1.4.11.6. Stylechecks

Frameworks-QtSupport

The default value of the option exclude_qt_generated_files has changed from false to true, so if Frameworks-QtSupport is activated, files generated by Qt and files in the configured Qt directory are implicitly added to the global_excludes.

This may result in removed issues in your existing projects.

This change affects existing configurations that do not explicitly set this option and might cause existing issues to be removed after upgrading to version 7.10.0 onwards. If you are interested in issues in files generated by Qt or in files in the Qt directory, you can reinstate the previous behavior by setting the option /Analysis/AnalysisControl/Environment/Frameworks/Frameworks-QtSupport/exclude_qt_generated_files to false in your configuration.