The best way to analyze and optimize VB .NET 2002 and VB 3-6 code
Project Analyzer is a Visual Basic source code analyzer, optimizer and documentor.
Project Analyzer works with VB.NET, VB, ASP.NET and Office VBA.
Project Analyzer does an automatic code review to detect quality control issues like dead code, unoptimal variable declarations, unoptimized syntax, memory leaks and functionality issues such as missing event handlers or questionable tab order.
You can enforce programming standards on variable naming, commentation, disallowed statements and code complexity.
Optionally, you can let the tool automatically remove or comment out the unused, dead code to considerably reduce the size of your program.
You can also search for duplicated code blocks that frequently result from copy-paste coding.
Project Analyzer lets you navigate your projects with hypertext and graphical views. Click objects to see their use and declarations. Locate
code via the enhanced Find window.
Copy syntax-formatted code to documents. Cross-reference information such as call trees, called-by trees and control + data flow diagrams help you understand existing code.
Project Analyzer generates comprehensive project documentation, including procedure list, control list, project dictionary and module diagrams. It can turn your code into a hyperlinked web site or a .chm file.
Besides source code analysis, the program also analyzes binary DLL and COM libraries.
Project Analyzer calculates tens of metrics including lines of code, cyclomatic complexity, relative complexity, depth of conditional nesting, amount of commentation and object-oriented metrics for the entire inheritance tree.
Limitations:
This demo is fully functional with max 10 source files at a time.
What's New in This Release:
Improvements and new features
Support for Visual Basic 2008.
Export source code as PDF.
Project Printer generates source documentation as PDF.
View contents of COM and DLL files as pseudo-code.
View binary files with built-in hex viewer.
Analyze all source files in a sub-directory tree. Analyze
projects without a .vbproj or a .sln file.
Module list report classifies modules into groups such as
Definitions, Interface, Abstract class, Concrete class,
Stateless class, Dialog, Standard module and the like.
Useful for learning to understand an existing project.
set of code review rules helps locate logical
mistakes and omissions and prevent future errors.
New code review rules
Rules marked with (*) can be fixed via auto-fix.
Hard-coded path found
RaiseEvent fails via constructor
Enum missing zero value
Enum with duplicate value
Trailing comment found *
Line too long *
ReDim without Dim *
For index variable not local
Write-only property found
Cyclic recursion found
Declare contains ordinal number
File with several classes or modules
Implicit variable
Shared constructor decreases performance
Parent class inherited only once
Data-only class found
Dataless class found
Shared-only class instantiated
NotInheritable expected
CVDate found, use CDate
Dead parameter
ByVal parameter not read
ariable users all dead
ariable readers all dead
ariable writers all dead
ariable not read, writers all dead
ariable not written, readers all dead
Type field users all dead
Type field readers all dead
Type field writers all dead
Type field not read, writers all dead
Type field not written, readers all dead
Constant users all dead
Enum constant users all dead
Type users all dead
Enum users all dead
Enum constant expected
Type inference used
Optional parameter in exposed procedure
Interface ambiguous
Interface duplicated
MustInherit class missing MustOverride methods
MustInherit class inherits concrete class
MustOverride overrides concrete procedure
Shared expected
Multiple Return statements found
ReadOnly variable expected
Octal number found
Case branch(es) missing for Enum
Condition always True or False
Case useless
Case overlap
Improved features
Unicode support for international characters was added to:
Hypertext view
Reports (Display, HTML, MHT, RTF)
PDF reports (Latin-based, Greek and Cyrillic characters)
Copy to Clipboard (RTF)
Export code (RTF, HTML, Unicode text)
Project Metrics
Option to load international source in a different codepage.
Report enhancements:
ariables and constants report rewritten for clarity.
Added underlying numeric constant values.
ariable use report shows variable deadness status.
File sizes and dates report shows line count and file age.
Library report shows image base addresses for optimizing
the base address of your library projects.
Dictionary report displays new statistics on names.
PDF reports greatly improved.
Image version and compile time displayed for library files.
Syntax formatting for .sln files in hypertext and print-outs.
Find window improved:
Results displayed in an easier-to-read format
Option to search for "Code or String" (Klaus Lair)
Print code: New option "Bracket structures" emphasizes
conditionals and loops. (Trevor Tregellas)
Auto-fix now preserves existing line continuation characters
(_) when possible. A continued line gets reformatted only
when the particular line is auto-fixed.
Analyze several directory trees by creating a .lst file.
Compatibility library detected for classic VB projects.
B2008 support details
Option Infer
Extension methods:
Nullable types
Object initializers: New With { .field=value }
attribute
Lambda expressions: Function(x). Partial support.
LINQ
WPF/XAML projects
If() function
Improved analysis
Added support for single-line Type and Enum blocks.
(Les Sullivan)
Classic VB: Added support for single-line declarations such
as Dim x:Dim y or Sub x:End Sub.
Added support for date literals #10/5/2008 11:25:00#
Arrays declared with ReDim (without Dim) are now detected
in classic VB.
Support for generic Structure and Interface (Of T)
Support for Structures implementing an Interface.
Overloads resolution improved. The correct Overloads
procedure is now picked more often.
Accuracy of late-bound call resolution improved by taking
account the number of call arguments. (idea by Steve Gilbert)
COM procedures. If an Optional parameter has an Enum data
type and a default value, the name of the respective Enum
constant is displayed as the default.
Problem detection improvements
Option to Ignore dead Property Get/Set/Let if another one
lives. This option allows read&write properties even if read
or write is dead. (Ian Digby)
Special warning for an empty procedure when it Overrides
an ancestor class procedure. Empty Overrides deletes
functionality of an ancestor class, which is bad class
design.
Unused file problem is enhanced in a multi-project analysis.
It now verifies use for each project separately. You can
then exclude the file from some projects and keep it in those
projects where it is used.
Option to switch Dead parameter rule on/off.
(idea by Jean-François Ménard)
Overrides procedures are not subject to NameCheck, since
their name is defined in an ancestor class. (Alex Mauer)
Microsoft.VisualBasic imported rule checks project-level
imports in addition to Imports statements. (Eric Burdo)
More accurate rules for Excess Scope problem (classic VB).
Performance improvements
Reduced analysis time at end of phase 2/2.
Faster processing of overly large Enums (such as 9000 lines).
Project Metrics Viewer loads large .mtx files faster.
Bug fixes
Fixed Unicode character width problems in "Print code"
feature.
"Initializer missing for variable" is not reported for arrays
with defined bounds. Cannot be initialize them. (Alex Mauer)
Fixed bug where calls to Events declared "As EventHandler"
were not found from implementing classes. This lead to extra
"Event not raised" warnings. (Charles Loreja)
Fixed crash reading some OCX properties. (Chaudier Guillaume)
Fixed bug where COM analysis ignored files with LCID0 in a
B 2002/2003 project. Sample file: XL5EN32.OLB.
Fixed .NET startup form being reported as dead.
The rule Option Strict missing was accidentally labeled
Option Strict Off in Problem Options. The rule considers
that an Option Strict Off statement is intentional, not a
problem. A problem is triggered when project-level Option
Strict is Off and there is no Option Strict statement in a
file. To search for any Option Strict Off statements, do
a simple Find.
Support added for Shared Event and Shared Custom Event.
Fixed Save WMF/EMF in Project Graph.
Added missing support for ReadOnly variables.
Added missing support for Sub New in a Module.
Added missing support for generic procedures (Of T)
FRX file viewer did not always save icons and cursors
correctly. (Jan Polonský)
Scope declaration missing no longer reported for a Shared
Sub New, because it you can't declare one. (Alex Mauer)
Fixed dead code detection with Type fields declared As New.
Dictionary report showed too low Unique names count.
Fixed display problems with line continuation characters,
especially in Hypertext view, code print-outs and
Project Printer.
Reduced flickering in Hypertext and Report views.
Fixed crash in Enterprise Diagrams, File belongs to project
diagram when analyzing a project directory without a
project file. (Richard Hurst)
Saving metrics as a .xml file produced invalid XML for
characters beyond Unicode &H7FFF (such as in Japanese).
Fixed handling of keyword New in Dim x, y As New datatype.
Fixed unnecessary warnings for IIf() and Choose() function.
Fixed parameter
Fixed sorting, then double-clicking in Find window.
Fixed autofix: If all variables in a Structure are dead,
don't removes them. A Structure without variables is illegal.
Fixed autofix: Adding return typename to property named P.
Fixed autofix: Don't remove dead Interface procedures if
they are implemented. VB.NET refuses to compile implementor.
Fixed autofix: Don't remove Overrides base procedures or
children of MustOverride when required to compile.
Code review rule changes
Classification changes
Return value discarded: Style -> Dead code
ariable/function/constant missing type declaration:
Optimization -> Style
Case Else missing: Style -> Functionality
"Case Else missing" now reported at Select Case line.
Move any '$PROBHIDE CASE_ELSE next to Select Case.
Case Else is no longer required if existing Case branches
cover all theoretically possible input values.
B.NET Compatibility Check changes
Rules updated to cover upgrading code from VB6 to VB2008,
with Visual Basic Power Packs 3.0 installed.
Removed compatibility rules (and reason why removed):
Circle and Oval controls unsupported (use Power Packs)
No control arrays (automated upgrade now available)
bAlias unavailable (replacement available)
ByVal/ByRef missing (upgrade wizard works correctly now)
(feedback by Torsten Borg)
Metrics changes
TCC for classes includes Custom Event accessors. May increase
slightly.
Values of SC, SYSC and RSYSC may have changed significantly
due to improved analysis.
BA Plug changes
VBA Plug v2 is required for Project Analyzer v9.
Old version VBA Plug v1 is no longer compatible.
Command line option /Q quits VBA Plug after export.