When It Comes to Legacy Systems, It’s Hip to Be Square
September 16, 2021Test-Driven Development
October 21, 2021We are pleased to announce that a new version of Synergy DBL Integration for Visual Studio (SDI) is available and recommended for use by all Synergy developers.
As with the recent SDE release, you will notice that we have adopted a new version numbering scheme for SDI, which now uses a year.month.build# format. This change emphasizes that SDI is on a separate development timeline than SDE and that regardless of the SDE version you deploy your application with, we recommend always using the latest version of SDI, in conjunction with runtime version targeting if necessary.
IMPORTANT: In this document and in other places, the term .NET refers to Microsoft .NET 5 and higher, while the term .NET Framework refers to the original .NET Framework product through its final 4.8 version. The term .NET Core refers to the interim product which culminated with a final 3.1 release. |
Installation
We improved the SDI installer so that the files deployed are compatible with Build Tools for Visual Studio 2019. This makes it easier to set up build systems supporting Synergy project builds without requiring the Visual Studio IDE.
We also added validation to the installer to ensure that both 32-bit and 64-bit Synergy/DE (Professional Series Development Environment) are installed before SDI is installed.
Synergy .NET Compiler
We added support for INITONLY properties. We added a new keyword, INITONLY, that generates an init accessor and a get accessor. If a property is INITONLY, the value of the field cannot be changed once it is created. This feature is available only when targeting .NET Core or .NET.
We added support for covariant return types. A method within an inheritance hierarchy can now be overridden with a return type that is a subtype of the return type of the virtual method being overridden. This is known as a covariant return type and can be used to avoid casting between types, which would otherwise be necessary. This can also apply to the return types of read-only properties.
We added support for default interface methods. Interface methods and properties can now have default implementations, making them similar to abstract base classes but with the added possibility of multiple inheritance. A class that implements an interface containing default implementations does not have access to those methods and properties defined for the interface unless that class instance is cast to a variable of the exact interface type.
We added support for nullable regions via a new .NULLABLE compiler directive. When used with the enable argument (i.e., “.NULLABLE enable”), this marks the start of a nullable region. When used with disable (“.NULLABLE disable”), it marks the end of a nullable region. In a nullable region, a level 3 warning error is generated if a potentially null variable, field, etc., is assigned to a non-null variable. For example, a level 3 warning will be generated if a method return value that could possibly be null is assigned to a non-null variable.
We added support for GetEnumerator extension methods. A collection that does not inherit from IEnumerable or IEnumerable<T> can now be used in a FOREACH loop if it has an extension method named GetEnumerator() that returns an IEnumerator. These extension methods can have different overloads and can be defined for an interface. Only the overload with exactly one parameter will be chosen by the FOREACH loop. That first parameter must also have the correct type (the same as the class representing the collection).
We added a new compile-time define SYN_BUILDNUMBER that can be used to access the build number of the compiler at compile time. This is also available in the traditional Synergy compiler.
Color Coding
SDI now supports syntax colorization (color coding for keywords, types, etc.) for repository schema files. By default, SDI treats files with the following extensions as repository schema files and applies this color coding to these files: .rps, .scm, .schema, .sdl, and .sch, but other file extensions can be configured.
We added support for the new INITONLY auto property, which is now treated as a keyword when it is in a property definition.
IntelliSense
We added IntelliSense support for the new .NULLABLE enable/disable compiler directives, and IntelliSense now supports the null forgive operator (!.) and the null conditional operator (?.)
Project System
Synergy .NET Core projects created with earlier versions can now be configured to target .NET 5 and .NET 6, and the SDI build, IntelliSense, and property page components now support the Synergy 12.0 Runtime and compilers.
Unit Tests
SDI now supports loading and running unit tests for Synergy .NET Core projects in the Test Explorer window, and we have added a new “Unit Test (.NET Core)” project template.
There is a known issue caused by a problem with a Microsoft component that means it is not possible to mix Synergy .NET Framework and Synergy .NET Core unit test projects in the same solution. More information can be found in the release notes.
Visual Studio Support
This version of SDI supports Visual Studio 2019 (version 16.1 or higher is recommended) with the “.NET desktop development” workload, and, as was announced previously, Visual Studio 2017 is no longer supported.
And while this version does provide Synergy capabilities in the Visual Studio 2022 Preview release, we are not yet ready to announce support for that environment. We are still in the process of testing with the Visual Studio 2022 preview versions, and there are known issues with these versions.
If you do use SDI with 2022, do let us know if you discover any issues. Note that upcoming preview versions may require SDI updates to continue functioning. At this time, please do not use Visual Studio 2022 for production code.
For more information on SDI requirements, please refer to https://www.synergex.com/synergy-dbl-integration.
Quality Improvements
As usual, in addition to the new features and enhancements detailed here, this release also includes various quality improvements. As always, please refer to the release notes for complete information.