Skip to content

deniszykov/code-contracts-remover

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

About

tool for removing .net code contracts from project

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages