Skip to content

Latest commit

 

History

History
84 lines (67 loc) · 4.35 KB

README.md

File metadata and controls

84 lines (67 loc) · 4.35 KB

Introduction

Tool for removing .NET Code Contracts from source code. Currently only C# is supported. I will gladly accept PR with VB support.

.NET 4.7.1 is required to run this application.

Installation

Install-Package CodeContractsRemover

or

Download and un-zip from https://www.nuget.org/api/v2/package/CodeContractsRemover 

Usage

Tool is located at "PROJECT_DIR/packages/CodeContractsRemover.VERSION/tools/".

CodeContractsRemover.exe <Convert|Stats> <directoryPath> [--searchPattern *.cs *.csproj] [--encoding utf-8] [--ignorePattern .svn/ ]

Example

CodeContractsRemover.exe Convert ./myproject

To run using mono on Mac OS X

/Library/Frameworks/Mono.framework/Commands/mono code_contracts_remover.exe Convert ./myproject

To run using mono on Linux

/usr/bin/mono code_contracts_remover.exe Convert ./myproject

Modes

Mode - Convert

  • Converts all Contract.Requires to "if(!x) throw new ArgumentException()" pattern at the beginning of method/property/constructor.
  • Converts all Contract.Ensures to "if(!x) throw new InvalidOperationException()" pattern before each return inside method/property/constructor.
  • Converts all Contract.Assert, Contract.Assume and Contract.Invariant to "if(!x) throw new InvalidOperationException()" pattern.
  • Invokes invariant methods before each return incide method/property/constructor.
  • Preserves all other Contract invocations (including Attributes and Contract classes).
  • Removes CodeContract properties and constants from project files

#### Mode - Remove

  • Removes any Contract invocations.
  • Invariant methods are preserved
  • Attributes and Contract classes are removed
  • Removes CodeContract properties and constants from project files

Mode - Stats

  • Collects statistics about how Contracts are used. Example of result:
[ContractClassFor]                                	  1
[ContractInvariantMethod]                         	  2
Contract.Assert                                   	  1
Contract.Ensures                                  	  6
Contract.Invariant                                	  2
Contract.Requires                                 	  6
Contract.Result                                   	  5

Annotation modes

In Convert mode Jet Brains annotations ([NotNull]) can be added to class members. Jet Brains annotations are added using JetBrains.Annotations NuGet package.

Mode - None

Don't add annotations

Mode - Add

Include annotations only for work in Visual Studio/Rider before compilation. When project is compiled, annotations would be removed. When dll is referenced into other project, Rider/Re# wouldn't show hints. This mode is recommended for applications. Read more on Jet Brains site.

Mode - IncludeIntoBinaries

Annotations will be included into binaries, so Rider/Re# would show hints before and after compilation (when binary is referenced into other project). This mode is recommended for packages. Read more on Jet Brains site.

Contributors

  • @ishatalkin
  • @mgaffigan