Home Blog Announcing the Release of Acumatica Acuminator 3.0.0

Announcing the Release of Acumatica Acuminator 3.0.0

Sergey Nikomarov | April 19, 2022

Announcing the Release of Acumatica Acuminator 3.0.0

Acuminator now supports Visual Studio 2022 in addition to the two previous versions of Visual Studio, 2017 and 2019. Also, Acuminator now supports preview versions of Visual Studio.

You can download it in the Visual Studio Marketplace. If you have previously installed the beta version of Acuminator 3.0.0, it is better to remove it before installing the new version.

Acuminator 3.0.0 includes new enhancements and bug fixes in static code analysis, in the Code Map, along with other features of Acuminator.

Here are the details for each area.

Changes in Static Code Analysis

  • The PX1007 diagnostic, which checks the presence of XML comments for public API, has been reworked and now checks only DACs and DAC extensions. This diagnostic will soon be enabled in the ATR-100 Acuminator test.
  • The PX1008 diagnostic, which looks for captured references to the graph instance in delegate closures, now validates delegates passed to the PXLongOperation.StartOperation() method.
  • The PX1026 diagnostic, which forbids underscores in the names of DACs and DAC fields, now allows underscores in the names of DAC extensions.
  • The PX1088 diagnostic has been removed because its function is covered by the PX1008 diagnostic.
  • Acuminator refactorings did not work when Visual Studio was configured to perform static code analysis in a separate process.
  • The PX1073 diagnostic, that forbids throwing an exception in the RowPersisted graph event handler, has been reworked and now does not report an error if one of the following statements is true:
    • The RowPersisted graph event handler is declared in a processing graph.
    • The containing graph is not a processing graph and the exception type is among the following types or is derived from them:
      • PX.Data.PXRowPersistedException
      • PX.Data.PXLockViolationException
      • .NET exceptions from the System namespace: NotImplementedException, NotSupportedException, ArgumentException (including its descendants ArgumentNullException and ArgumentOutOfRangeException)

Improvements in the Code Map

The Code Map has been improved in the following ways:

  • The state and layout of the Code Map tool window are now automatically persisted by Visual Studio. The Code Map window now behaves similarly to other Visual Studio tool windows like Solution Explorer. It means that the Code Map window is reopened and restored to its previous state at Visual Studio startup if the Code Map window was opened at the last Visual Studio closure.
  • Different icons are now displayed for DACs, DAC extensions, graphs, and graph extensions. See the following screenshots for examples of these icons.
  • Each DAC node now indicates whether the node represents a DAC or a DAC extension as shown in the previous screenshot.
  • For each graph or a graph extension, overrides of virtual type members are now displayed under the new Base Overrides node. The Persist method overrides are indicated with a special diskette icon. See the following screenshots for an example of this node.
  • The Initialization and Activation node has been introduced. It displays the following information:
    • Graph instance and static constructors for graphs and graph extensions
    • The IsActive method for a graph extension and a DAC extension.

See the following screenshots for examples of the Initialization and Activation node.

Disabling of Locally Suppressed Diagnostics

Acuminator provides two different suppression mechanisms to suppress diagnostic alerts in a particular place: a global suppression file and a local suppression with a special comment.

The suppression mechanism can be disabled in the Acuminator settings in Visual Studio by specifying False for the following setting: Tools > Options > Acuminator > Code Analysis > Suppress selected diagnostics.

With this mechanism disabled, you can see all suppressed errors in the legacy code and perform refactoring.

Previously, you could disable suppression of only globally suppressed diagnostic alerts. Alerts that have been suppressed locally via suppression comments could not be displayed even when the suppression mechanism was turned off. Now Acuminator diagnostics that have been suppressed locally can also be displayed when suppression is disabled. Thus, you can see all errors, including the ones that were suppressed with a comment in the code editor or in the Error List tool window. For details on diagnostic suppression, see Diagnostic Suppression.


The Acumatica Acuminator development team would like to offer our gratitude and sincere thanks to our open source contributors: Angel Sanchez (@ShadowFiendZX) and Shawn Burt (@shawnburt). We are grateful for your input and hope you continue to contribute to Acuminator in the future.

Blog Author

Sergey joined Acumatica in 2017 and started as an application developer on the OEM team, where he did a lot of Acumatica Framework development – along with doing several customizations. An example is a large customization for automated budget control for Censof, an OEM partner. In 2019, he joined the Platform Development team as a system developer. And most recently, Sergey is responsible for Acuminator and our RVT development and maintenance. Participating in a number of internal Acumatica hackathons, Sergey was part of the winning team – along with Vladimir Panchenko – that created Acuminator. In a subsequent hackathon, his team extended it further in developing the Code Map with some other improvements to Acuminator.
Categories: Developers

Receive blog updates in your Inbox.