Skip to content

Releases: Acumatica/Acuminator

v4.0.0

29 Dec 08:21
06c3e87

Choose a tag to compare

Acuminator 4.0.0: December 25, 2025

Acuminator 4.0.0 includes the bug fixes and enhancements described in this section, as well as the features that have been implemented in previous versions.

Announcements

Support of Visual Studio 2017 Dropped

Starting from Acuminator 4.0.0, Visual Studio 2017 is no longer supported. The last Acuminator version supporting Visual Studio 2017 is Acuminator 3.1.3.

Acuminator Supports ARM Platform

The Acuminator extension can now be used on machines with ARM64 processors, enabling development and code analysis on ARM-based devices. An example of such an environment is a MacBook with an ARM CPU that runs Windows and Visual Studio in a virtual machine. While this is not a commonly encountered working environment, you can now develop Acumatica code with Acuminator on these systems.

Analysis of PXGraph.InstanceCreatedEvents.AddHandler Calls Dropped

Analysis of calls to PXGraph.InstanceCreatedEvents.AddHandler calls has been dropped to significantly improve Acuminator's performance.

The PXGraph.InstanceCreatedEvents.AddHandler API adds event handlers to an Acumatica Framework event that is triggered when a new graph instance is created. Previously, the Acuminator analysis tried to check the correctness of such event handlers with PX1054, PX1057, PX1058, PX1059, PX1081, PX1082, and PX1085 diagnostics.

The analysis of Acumatica source code has discovered that the PXGraph.InstanceCreatedEvents.AddHandler API is extremely rarely used. At the same time, the required Acuminator analysis for this feature involves expensive operations and is executed in many scenarios. Therefore, the analysis of PXGraph.InstanceCreatedEvents.AddHandler calls has been dropped and the performance of Acuminator has been improved as the result.

New PX1099 Diagnostic

A new PX1099 diagnostic has been introduced to Acuminator to flag the calls to APIs deemed as incompatible with the Acumatica Framework. Using these forbidden APIs can lead to unexpected behavior, application instability, data inconsistencies, and issues in the asynchronous code. Each forbidden API comes with its own specific reason to be banned from usage together with Acumatica Framework.

How PX1099 Reports API Calls

The PX1099 diagnostic validates all API calls in the code against a configurable list of forbidden APIs. The API call is reported if any of the following criteria is met:

  • The API itself is in the list of forbidden APIs.
  • The namespace containing the checked API is in the list of forbidden APIs.
  • One of the types containing the API is in the list of forbidden APIs. In case of nested types, the API is banned if any of the containing types is in the list of banned APIs.
  • The API is a type and one of its base types is in the list of banned APIs.
  • The API is a method, property or event; also it is an override of a base type member, and one of the overridden members is in the list of banned APIs.

The PX1099 diagnostic also supports a configurable list of allowed APIs. A call to the API from the allowed list is not reported by the diagnostic even if the API is recognized as forbidden according to the rules above. The combination of lists of forbidden and allowed APIs allows a flexible, granular and concise configuration of the PX1099 analysis.

PX1099 Diagnostic Settings

The PX1099 diagnostic provides advanced configuration options that you can use to customize the diagnostic behavior. You can disable the diagnostic or configure custom files with forbidden and allowed APIs. You can find the PX1099 settings in the following Acuminator section of Visual Studio settings: Tools -> Options -> Acuminator -> Banned API:
Banned API settings
The following settings are available:

  • Enable PX1099 diagnostic for banned APIs: Enables or disables the PX1099 diagnostic. By default, the diagnostic is enabled.
  • Banned APIs File: Specifies the path to the file with forbidden APIs.
  • Allowed APIs File: Specifies the path to the file with allowed APIs.

Acuminator comes with default lists of forbidden and allowed APIs. They are deployed by Acuminator as files on your machine in the "My Documents Folder>\Acuminator\Acumatica Banned API" folder.
The Banned APIs File and Allowed APIs File settings are initially set to these files. You can modify these files to customize the list of banned and allowed APIs. The records in these files have the same API format. Each API record is represented by a single line in the file. You can find more about the format of API records from the diagnostic documentation page.

Note, that clearing the Banned APIs File and Allowed APIs File settings in Visual Studio will not disable the PX1099 diagnostic. The diagnostic will use the default lists of forbidden and allowed APIs that are embedded into the Acuminator assemblies. To disable the PX1099 diagnostic, you need to set the Enable PX1099 diagnostic for banned APIs setting to false.

APIs Banned by PX1099

The PX1099 diagnostic comes with a default list of forbidden APIs. These APIs can be roughly divided into several groups:

  • System.Math.Round overloads that do not specify the midpoint rounding mode.
  • APIs to perform asynchronous and concurrent operations such as System.Threading.Tasks.Parallel, System.Threading.Tasks.Task.Run, System.Threading.Tasks.Task.ConfigureAwait(bool).
  • For ISVs and partner developers there are some additional groups of forbidden APIs:
    • The APIs used to obtain the information about the working environment, such as System.Environment and System.OperatingSystem.
    • The APIs used to access global web site parameters such as PX.Common.WebConfig.
    • Some of the Reflection APIs such as System.Reflection.MethodInfo.
    • Some IO APIs such as System.Data.SqlClient and System.IO.File.

The list of forbidden APIs may grow in the future. You can find the table with all APIs banned and allowed by the PX1099 diagnostic by default on the diagnostic documentation page.

New Acuminator Diagnostics for DACs and DAC Extensions

  • The new PX1065 diagnostic reports DAC field properties that are missing their corresponding BQL field declarations. An accompanying code fix is available to automatically generate the required BQL field, ensuring DAC integrity and preventing potential runtime errors.
  • The new PX1066 diagnostic detects typos in names of DAC BQL fields. An accompanying code fix changes the name of the BQL field in the solution so that it matches the name of the DAC field property.
  • The new PX1067 diagnostic reports BQL fields from derived DAC that are not redeclared. The code fix for this diagnostic adds redeclarations of all BQL fields declared in base DACs to the derived DAC.
  • The new PX1068 diagnostic checks whether the type of the DAC field property matches the type of the BQL field. The diagnostic has two available code fixes:
    • Change the property type so that it corresponds to the type of the BQL field.
    • Change the type of the BQL field so that it corresponds to the property type.
  • The new PX1069 diagnostic checks DACs for missing required fields such as audit fields and the tstamp field. An accompanying code fix can automatically add the missing mandatory fields to the DAC.
  • The new PX1078 diagnostic checks for incompatible types and sizes between a local DAC field and a foreign DAC field referenced by the PXSelector attribute to prevent runtime truncation or mismatches. The diagnostic has been implemented by the member of the Acumatica Commerce team Andrei Saiapin. His contribution is much appreciated.
  • The new PX1110 diagnostic enforces that DACs with PXDBLocalizableString attributes also declare a `No...
Read more

v3.1.3

24 Oct 10:19
abc47b1

Choose a tag to compare

Acuminator 3.1.3: October 24, 2023

Acuminator 3.1.3 includes the bug fixes and enhancements described in this section, as well as the features that have been implemented in previous versions.

Enhancements

In Acuminator 3.1.3, the following enhancements have been implemented:

  • The Acuminator code refactoring mechanism that changed weakly typed old graph event handlers into strongly typed generic event handlers has been converted into a new diagnostic PX1041.
    The default severity of the new diagnostic is Information because Acumatica Framework supports both types of event handlers. Now you can use the new diagnostic to convert graph event handlers to generic ones in the entire document, project, and solution.
  • The category of Acuminator diagnostics has been changed to "Acuminator". You can see this category in Error List window of Visual Studio if you group diagnostics by Category as shown in the following screenshot.

    image

Fixed Bugs

In this version of Acuminator, the following bugs have been fixed:

  • Visual Studio 17.7 crashed when the static code analysis was configured to be executed in the Visual Studio process (in process mode).
    The crashes were caused by the asynchonous code in old Acuminator analyzers.

v3.1.2

21 Jul 14:40

Choose a tag to compare

Acuminator 3.1.2: June 8, 2023

Acuminator 3.1.2 includes the bug fixes and enhancements described in this section, as well as the features that have been implemented in previous versions.

Enhancements

In Acuminator 3.1.2, the following enhancements have been implemented:

  • The PX1096 diagnostic has been added to check the signature of methods with the PXOverride attribute: The diagnostic checks whether the base graph or base graph extensions contain a base method that is compatible with the PXOverride method.
  • The PX1007 diagnostic has been updated in the following ways:
    • The diagnostic now supports the inheritdoc tag for DACs, DAC extensions, and their properties. The diagnostic also checks that mapped DAC field properties of projection DACs have the inheritdoc tag with the cref attribute pointing to the corresponding DAC field property of the original DAC.
    • A new code fix can generate the inheritdoc tag for a mapped DAC property of a projection DAC.
      This code fix also removes incorrect documentation tags such as summary or incorrectly declared inheritdoc.
    • Code fixes of the diagnostic can now generate documentation correctly even for badly formatted code. Also, in the properties of mapped fields of projection DACs, incorrect documentation tags can be removed. The code fixes also support documentation tags declared as empty XML elements, such as <summary/>.
    • The diagnostic no longer checks the following DAC fields for a code annotation:
      • Selected
      • Attributes
      • GroupMask
      • CompanyID
      • CompanyMask
      • DeletedDatabaseRecord
    • The Suppress with a local comment code fix of Acuminator now supports the Fix All functionality of Visual Studio for the PX1007 diagnostic. The diagnostic can be suppressed for a whole DAC. Suppressing the diagnostic could be useful when you do not plan to write the documentation immediately and want to leave it to the documentation team.

Fixed Bugs

In this version of Acuminator, the following bugs have been fixed:

  • In Visual Studio 2022, Acuminator analysis did not work in the out-of-process mode (that is, when the Run code analysis in separate process check box is selected in Visual Studio options).
  • The PX1023 diagnostic showed a false alert for the INUnit attribute.
  • It was possible to suppress the PX1007 diagnostic for DAC extensions by marking the class with the PXHidden attribute.
  • The PX1016 diagnostic showed a false alert for generic non-abstract graph extensions.