Project Analyzer version history ================================ Major version history v8.0 VB.NET 2005, Enterprise Diagrams (Feb 2006) v7.1 VBA Plug (Sep 2004) v7.0 VB.NET 2003, duplicate code, dead control and DLL analysis (Aug 2003) v6.2 Ctrl & data flow & form show graphs. Ensure obj clear. (Jan 2003) v6.1 Multi-project analysis for .sln, .vbg and COM (Aug 2002) v6.0 VB.NET 2002 support (May 2002) v5.4 VB.NET compatibility check (May 2001) v5.3 Enterprise Edition with auto-fix and macros (Jan 2001) v5.2 Project NameCheck, support for non-western code (Mar 2000) v5.1 Problem detection, code web site, new reports (May 1999) v5.0 VB 6.0 support (Oct 1998) v4.2 Need report (Aug 1998) v4.1 Project Graph (Jan 1998) v4.0 VB 3.0-5.0 support (Sep 1997) Detailed Version History ======================== v8.0.07 August 2006 *** Bug fix *** 1. ASP.NET 2005 web directories can now be analyzed via the .sln file even if there is no .vbproj file. v8.0.06 July 2006 *** New feature *** 1. Added support for Visual Basic Express Edition 2005 .sln file format. (Dick van der Sar) *** Bug fix *** 1. Fixed a bug that concerned analysis of similar names. A reference could lead to the wrong choice among similar names, especially in multi-project analysis, leading to wrong cross- references and dead code bugs. (Florian Sening) v8.0.05 May 2006 *** Improvements *** 1. Call tree reports improved (in the Report menu): - Call tree for entire project is now linkable in HTML format. Good for large trees. (idea by Stan VanDruff) - Call tree for a single procedure displays call tree metrics. 2. Improved speed at end of phases 1 and 2. 3. Improved Project Metrics Viewer performance on large data sets. 4. Project.chm has been enhanced for printing as a manual. *** Bug fixes *** 1. Module members report (option Detailed with param names), was missing colon after in: or out: parameter type. 2. Fixed dead procedure bug when procedure is only used in module declarations in variable initializer. (Tanja Ekelund) 3. Fixed dead code bug and missing reference in syntax For Each x As datatype In collection In this syntax, read from collection was not stored. (Renke Holert) 4. Fixed crash on large projects exceeding 32K procedures. 5. Fixed data size calculation under circular dependencies. Possible cause of Overflow at end of phase 1. 6. Fixed crash in Project Metrics Viewer when number of data points (rows) exceeds 32K. 7. Fixed full version crash on WinXP and Win2003 with Data Execution Prevention (DEP) on. 8. Fixed "Variable read, not written" when a variable is passed ByRef and the variable is followed by a type character ($%&!#@). (Richard Brooker) 9. Fixed dead procedure bug in syntax Dim mMenuItemCut = New MenuItem("Cu&t", New System.EventHandler(AddressOf EditCut)) 10.Fixed Checklib.exe extra warnings for COM libraries when user account doesn't have full rights to the system registry. v8.0.04 March 2006 *** Improvements *** 1. Support for COM+ CreateInstance. (Gary Cleal) 2. Support for string constant expressions in CreateObject and GetObject, such as CreateObject(ProgID) where ProgID is Const. 3. and attributes with VB.NET Declare/. 4. [in] and [out] attributes with COM libraries. 5. COM analysis: hidden types show up, restricted types do not, because they cannot be used in VB. *** Bug fixes *** 1. Fixed in/out parameter bug with COM files that caused extra "Variable read, not written". (Petri Kiviniemi) 2. Fixed ByVal/ByRef parameter detection bug with COM files. 3. A COM interface could erroneously show up twice (COMSVCS.dll). v8.0.03 March 2006 *** Bug fix *** 1. "File does not appear to be a Visual Studio .NET project file" bug fixed with VB2005 .vbproj files. (Mikael Koskinen) v8.0.02 March 2006 *** Bug fixes *** 1. Error #13 during analysis of file containing an Enum whose name starts with an underscore. (Michael Dorfman) 2. Sped up very slow analysis of large multi-project system at end of phase 2/2. (Michael Dorfman) v8.0.01 February 2006 *** New features *** 1. Support for Visual Basic .NET 2005 2. Enterprise Diagrams offers a new graphing solution in the Enterprise Edition. 3. Project Graph new diagrams and options: - Instantiation tree shows where classes are being instantiated. - Data declaration tree shows where classes, structures, interfaces and forms are being used as data types. This graph also shows class instantiations. - Save graph as GIF file. - New options: Backward links only, Forward links only, Both. (Idea by Rich Ketcham) - New option: Hide binaries. - Saved pictures are now the same size as in the Project Graph window. - New look and new hotkeys. * New windows * 4. Constants and Enums window lets you review constant names and values. Locate duplicated constants (for optimization) and constants with the same name but different values (possible mistake). 5. Variables, constants and parameters window lists your definitions and lets you locate a variable or constant by its name or data type. Review the usage of a data type or look for (un)desired variable or constant names. 6. Procedures window lists all procedures. Location functions and methods quickly. 7. Data types window lists Enums, user-defined types, .NET Structures and COM aliases. Review the definitions and usage of data types. 8. Modules window lists all modules. * New reports * 9. Module members report with several options: - All procedures and variables - Data input, Data output - External access, External data input, External data output - Module data, Private data - Data read access, Data write access - Properties - Procedures - Methods, Events - Constructors, Constructors and finalizers - Procedures with "out" parameters Also available by right-clicking a module in the treeview. Macro command: Report Members subtype [params] 10.Files and projects report lists which project includes which files. It is useful for determining the use of shared files. Macro command: Report FilesProjects 11.Interface report lists interfaces with implementations. Macro command: Report InterfaceReport 12.Super report in Super Project Analyzer lists the dead code accross all your projects, as well as in which projects your code is being reused. 13.Variable use report lists the number of live/dead variable reads & writes. It is useful for locating potentially dead variables and logical flaws where a variable value might not be properly set, for example. Macro command: Report VariableUse 14.Problem statistics report. Macro command: Report ProblemStats 15.Dead code statistics report displays the amount of dead code grouped by deadness type. Macro command: Report DeadStats 16.File dependency levels report lists files in their dependency order. Macro command: Report FileDepLevels 17.Non-cohesive classes report finds classes to split up. Macro command: Report NonCohesive 18.Subsystem report finds reusable subsystems in a program. Macro command: Report Subsystems *** Project Metrics improvements *** 1. New metrics PROJECT METRICS VARSgm Global and module-level variables VARSloc Local variables ENUMSZ Average Enum size ENUMR Enum ratio Rc Reuse of constants TREADS Total variable reads TWRITES Total variable writes TRW Total variable reads+writes DATADENS Data access density IOg% Global I/O ratio maxDCALLT Maximum depth of call tree maxSCALLT Maximum size of call tree MOOD2 PROJECT METRICS for Object-Oriented code OHEF Operation hiding effectiveness factor AHEF Attribute hiding effectiveness factor IIF Internal inheritance factor PPF Parametric polymorphism factor CLASS METRICS LCOM4 Lack of cohesion of methods PROCEDURE METRICS IOg Global I/O IOp Parameter I/O IOvars Input and output variables SCALLT Size of call tree VARIABLE METRICS READS Number of read instructions from variable WRITES Number of write instructions to variable RW Number of reads and writes FLOWS Data flows into and out of a variable LENV Length of variable name VARUSR Variable users 2. New metrics reports - Project metrics report - Metrics statistics report - Metric charts - Project status report - Compare project status report - Limits report - Metrics list - Correlation analysis 3. New Rotated view. 4. XML export. 5. New statistics: Skew and kurtosis. 6. Save charts as GIF files. 7. Improved Regression analysis window. 8. /EDIT command line option for direct access to .mtx file. *** Improvements *** 1. Mouse wheel and Back/Forward button support. 2. "App key" support to bring up context menu. 3. New consistent keyboard shortcuts, such as ^R=Report and ^X=References. The hotkeys are documented in the help (suggested by Gary Chase). 4. Interface report enhanced and renamed as Module interface report. 5. Option to show line numbers in the hypertext view. (Jack Olexy, Chris Strobel, Nicholas Varacalli) 6. Project Printer improvements: - Option to add line numbers. (Peter Carr, Bill Frame, Drew Richards) - Option to save project web site as MHT web archive. - Option to enable/disable Reports. (Jan van Veldhuizen) - More options for ProjectPrinter macro command. (Paul Sinnema) - Enhanced HTML tags, including TITLE for each hyperlink. See details when mouse hovers over a link. 7. New report file type: MHT web archive. Corresponding Macro command: SetReport MHT. 8. Descriptions (help string) shown for COM modules and procedures. Also some previously hidden COM interfaces and members are now shown for completeness. 9. View the bytes required for data storage of user-defined types and structures, classes and modules. 10.Bookmarks for finding frequently reviewed code. 11.You can load a .lst file to analyze several solutions, projects or project groups at once. (idea by Jay Shobe) 12.Super Project Analyzer loads data much faster. 13.New global constant PROJECT_ANALYZER = True allows you to write special lines for Project Analyzer only. You can add missing definitions, tweak the analysis or exclude sections from being analyzed. Examples: #If PROJECT_ANALYZER Then Dim o As MyClass ' Analyze early-bound calls only #Else Dim o As Object ' Run with late binding #End If #If PROJECT_ANALYZER Then FakeCall ' Analyze what would happen with this call #Else SecretCall ' This runs but won't be analyzed #End If 14.Optional hotkey brings up Project Analyzer from the background. 15.Project Printer and the Uncommented code review rule have been updated to consider comments above the procedure header line to be a part of the procedure. 16.Flowchart with Visustin. You can send the currently viewed code directly to Visustin (if you have it) and get a flowchart. 17.Types and Enums report shows number of reads and writes to each field and constant, plus the value of each constant. 18.Copy code as HTML to the clipboard. Publish code snippets easily! 19.PDF report rotates automatically to landscape mode if text is too wide to fit in portrait mode. 20.Form report adds information on menus and Default/Cancel button. 21.Auto-fix can now remove parameterless Call statements from classic VB code. Earlier versions removed Call with parameters only. (Stephen Pantry) *** Dead code analysis improvements *** 1. Unused COM files are detected. You can remove them from your projects. (Enterprise Edition required) (idea by Joe Monnin) 2. Dead Enum constants are detected. Constants intended for API calls are assumed live as an exception. 3. Dead Type fields are detected, as well as fields that are written only. Fields of Types used with API calls are assumed live. 4. "Variable read, not written" rule reports variables that are not given any value, even if they are being read. 5. "Type field read, not written" rule reports Type fields that are not given any value, even if they are being read. Fields of Types used with API calls are assumed live. 6. "Return value not set" rule finds functions that don't set their return value. 7. Dead "NewEnum" procedures are detected for VB Classic collection classes. 8. Protected Sub Finalize in a .NET Structure is not called by the garbage collector. It can thus be dead. 9. Overrides procedures are now flagged dead when possible to detect (when the entire inheritance tree is analyzed). Previous versions flagged them live. 10.Non-Public and Shared variables of an Attribute class can now be reported dead. 11.Form/UserControl_KeyDown event is no longer reported as dead code if KeyPreview is set to True at run-time. (Moshe Pack) *** Code review additions and improvements *** 1. "Too many uncommented lines" rule finds consequtive lines without any comments in them. 2. "Pass ByRef" rule finds call locations where parameters passed will or may be modified by the called procedure, possibly causing unexpected side effects. 3. "ByRef parameter returns a value" rule finds parameters whose value is changed and the new value will be returned to callers, possibly causing unexpected side effects. 4. "ByVal parameter written to" rule reports parameters whose value is changed, but not returned to callers. 5. "ByRef parameter read only, consider ByVal" detects parameters that might be intended to work as ByVal but that are ByRef by accident. 6. "Initializer missing for (local) variable" rule reports VB.NET variables that are not initialized in the Dim statement. 7. "Assignment to self" rule reports unnecessary or erroneous assignment statements of type "x = x". 8. "Empty procedure" rule now reports procedures having no executable code. This means that procedures with local variable or constant declarations will be reported if they have no executable code. (Jean-François Ménard) 9. Class design rule "Child reuses ancestor member name" now considers the entire inheritance tree, not just the immediate parent class. 10."Optional parameter missing default value" is now available as an individual rule. The same rule was formerly part of VB.NET Compatibility Check and it was called "Default param value needed in VB.NET". *** Updates with VB.NET Compatibility Check for VB.NET 2005 *** 1. VB.NET Compatibility Check has been updated. It now covers migration from VB6 to VB.NET 2005. 2. New check: "Property passed ByRef" is reported where a property is being passed to a ByRef parameter. In VB6, changes are not written to the property, whereas they will be in VB.NET. This can lead to a migration bug that is hard to detect. 3. "Array must start at 0 in VB.NET" enhanced to support constant expressions in dimensions, such as Dim x(A to B) 4. "String byte functions unavailable in VB.NET" enhanced to cover InputB. 5. "ParamArray is ByVal in VB.NET" will not fire for ParamArrays that do not return an 'out' value. 6. The upgrade wizard handles the following code for VB.NET 2005, so the corresponding problem rule will not fire any more: - LogEvent "Event log model differs in VB.NET" - KeyPress event "Event behavior changes in VB.NET" - Form_QueryUnload "Event behavior changes in VB.NET" 7. "Resource file requires work in VB.NET" is reported only once for each .res file. The upgrade wizard converts LoadResString, LoadResData and LoadResPicture automatically, so these keywords do not trigger a warning. 8. Removed checks (upgrade wizard handles these cases): "On .. Goto becomes Select Case in VB.NET" "Static procedure unsupported by VB.NET" 9. VB.NET compatibility report enhanced with more detailed data. *** Changes *** 1. Line numbers displayed on various dialogs and reports have been changed from local (procedure-level) line numbers to file-level line numbers. The same line numbers are also shown in the hypertext window, Project Printer and VB.NET. 2. Several metrics have been changed. The scope of the changes range from almost unnoticeable to breaking changes. Old metric values may not be comparable to new values. Read the help file under Project Metrics for the change list. 3. Default CSS settings for HTML reports have changed. If you use a custom CSS file, verify the reports still look ok. *** Changes with problem detection filters *** Existing problem detection filters should be updated for the following fields: - Old rules "Dead Enum and Type" and "Dead structure" have been rearranged as: 1) Dead Enum 2) Dead Structure/Type Rule 1 now applies to Enums only, whereas rule 2 applies to user-defined data types both in classic VB and VB.NET. Review your existing filter settings. - "Variable/const declared in code" has been split to 1) Variable declared in code, and 2) Constant declared in code. Setting 1 will be preserved, you need to update 2. This split is based on idea by Daniel Watts. *** Analysis improvements *** 1. CreateObject and GetObject late-bound calls are now analyzed. A reference to a class is detected if they use hard-coded string parameters. Example: CreateObject("Excel.Application") 2. When an object is being instantiated (via New, CreateObject or GetObject), a call to the appropriate constructor (VB.NET) or Initialize event (VB Classic) is added to the call tree. 3. Invisible call from Sub New to MyBase.New() is recorded. 4. Record pointer functions VarPtr, StrPtr and ObjPtr as "Address" references and read/write access. 5. Copy in/copy out semantics are taken into account when passing a property to a ByRef parameter in VB.NET. Both Property Set and Get will show up in the call tree and Set will not be reported dead any more. 6. ByRef passing is recorded and ByRef parameters are further classified as read-only and 'out' parameters. 7. Record the setting of a function return value. 8. When a VB.NET Interface contains an overloaded member, implementing procedures are correctly matched to the interface members. 9. Record "as datatype" references as a special "Data" reference. 10.Handle multiple Inherits for Interfaces. 11.References to vb6.olb classes Form, MDIForm, UserControl, UserDocument and PropertyPage are detected. 12.References to default members are resolved, but only when parentheses follow the object name. Thus: - Collection[.Item](1) is resolved - TextBox[.Text] is not resolved because no (..) follows. FYI: A default member is one whose name you may omit. 13.References via !bang syntax are now resolved to COM methods. Earlier they were only resolved to VB methods. Example: Collection!key 14.References to enumerators via For Each .. In .. are resolved. An enumerator is one of: - "NewEnum" procedure in VB Classic - Procedure implementing IEnumerable.GetEnumerator in VB.NET 15.Record late-bound procedure calls as "Call late-bound". 16.Better support for arrays declared as - name as datatype() - name()() as datatype 17.More accurate Overrides/Overloads analysis 18.Get,Put,FileGet,FilePut,FileGetObject and FilePutObject access all the fields of the referenced data type. 19.Protected and Protected Friend members of NotInheritable classes are not treated as exposed code, because there cannot be any descendant classes. 20.Support for Config conditional compilation constant (VB.NET) *** Bug fixes *** 1. VB Classic Attribute lines were incorrectly counted as logical lines of code (LLOC). Now they are excluded since they are not code, but configuration options. This also fixes some bugs (Interface class contains code, for example). 2. Problem "Dollar would increase performance" erroneously showed up for the Mid() statement (applies to function only). 3. Resolving overloaded calls assumed all Overloads procedures had Public scope. Fixed. 4. Certain Rem statements are now correctly detected as comments. This fixes handling of Rem statements not followed by a space, Rem*** for example. This affects several features dealing with comments, but only when this special syntax is used. 5. When you unselected all COM files from the analysis, the setting was not always saved for subsequent analyses. 6. MyClass and MyBase procedure calls are now correctly treated as NotOverridable. 7. If a UserControl had members with the same name as the underlying intrinsic UserControl object, references to the intrinsic object were not correctly detected. 8. Statement On Error and function Error don't create a reference to class DAO.Error. 9. Shadows Structure is parsed properly. 10.With New blocks could lead to Cannot add scope error if repeated over 250 times in the same file. (Simon de Groot) 11."Parameter without type specification" problem now also affects ParamArray parameters in VB.NET. Ensure that your ParamArrays are typed. 12.Protected Friend Classes and Structures were incorrectly handled as Protected. 13.Quotation marks (") fixed for .csv reports. 14.Auto-fix produced syntax error for "Error handler missing" problem when "Manual fix problems" setting was Ignore. 15.Fixed "Option Explicit missing" for non-standard .vbproj's that didn't define Option Explicit. The default is On. 16.Fixed "Possibly twisted tab order - Container doesn't precede children" for some cases where the tab order of container and child doesn't matter. 17.Auto-fix does not encapsulate classic VB variables passed ByRef. Passing a property ByRef is different from passing the underlying variable. 18."Control not enabled" is not reported for UserControls as it is frequently wrong due to limitations of analysis. 19.Dead code bug fixed with UserControl events: DragOver, DragDrop, GotFocus, LostFocus, Validate *** VBA Plug fixes *** 1. If several VBA projects with the same internal project name (VBAProject) are open at the same time, export failed with message "Folder x is not empty". Fixed. (Tony Caine) *** Removed features *** 1. The obsolete Call depth report has been removed. You can get the same information by using Project Metrics. 2. Module diagrams report has been superseded by Module members report. 3. Removed macro commands: - Report CallDepth (feature removed) - Report ModuleDiagrams (replaced by Report Members All) - Report Interfaces (replaced by Report ModuleInterfaces) 4. Removed option to treat variables "written, not read" as live code. Now such write-only variables are treated as dead code. v7.1.07 August 2005 *** Bug fixes *** 1. Fixed a bug that hid "procedure called by" information after first use. v7.1.06 April 2005 *** Bug fixes *** 1. Fixed missing reference to MyMethod in a GlobalMultiUse class with syntax MyProject.MyMethod. (Papadolias Vasilis) v7.1.05 March 2005 *** Bug fixes *** 1. Hypertext view crashed Project Analyzer when displaying a very large file with more than 32k hyperlinks. (Chad Lowe) 2. Fixed flashing in main window status bar. 3. Syntax "With ControlName, .Enabled=True" resulted in an erroneous disabled control warning. (Chris Nicolatos) v7.1.04 March 2005 *** Bug fix *** 1. Fixed crash with Project Printer and File Dependency Analysis. (Anko Groenewegen) v7.1.03 January 2005 *** Bug fixes *** 1. Interface report crashed when a VB6 file had an Event and a Property with the same name. (reported by Chris Nicolatos) 2. Extra "Return value discarded" problem showed up for function calls where the function's return value is used via the dot operator, not via assignment. Example: Err.Raise. (reported by Chris Nicolatos) 3. Project Graph toolbar combobox covered a button. (Moshe Pack) 4. "Case Else branch missing" was reported if a colon followed "Case Else:" (James Jones) 5. Private members of a UserControl were not reported dead even if they were not used. (Erik Bradshaw) 6. "Out of stack space" in analysis Phase 2/2 happened when a UserControl had the same class name as one of VB's intrinsic controls. (Scott Deaver) v7.1.02 October 2004 *** Bug fixes *** 1. VBA Plug v1.0.2 fixes "Host application not supported" with German, Swedish, Spanish (and other) regional settings where VBA Plug incorrectly detected Office version number. 2. Project Metrics Viewer v1.1.02 fixes occasional crashes when moving the cursor to the rightmost column. This happened in the Project in time tab when some of the Change metrics were being displayed. 3. Problem icons sometimes disappeared when resizing the main window. 4. Project Metrics title for a multi-project analysis could be prefixed with "+". Extra plus sign removed. v7.1.01 September 2004 *** Major new features *** 1. Office VBA project analysis available via VBA Plug. *** Minor new features *** 1. Project Printer HTML Site option includes 12 new reports. 2. New option to select which files to show up on the problem list. This helps working on a few files in a large project. (Brian Smith, Jean-François Ménard) 3. Options to define the comment prefixes for Auto-fix. You can choose prefixes such as 'HACK:, 'TODO: and 'UNDONE: for showing up on the Visual Studio .NET Task List. You can also choose a dedicated prefix such as '+ for commenting out dead code automatically. (idea by Daniel Watts) 4. Project Metrics calculates Outliers, which are metric values that are exceptionally high or low. 5. Project Metrics lets you compare historical development of a single file, class or procedure. 6. Project Metrics supports new metrics: - Statement counts STMT, STMTd, STMTx, STMTc, STMTnc - Executability XQT - Control density CTRL - Cyclomatic complexity variations CC2 and CC3 - Reuse benefit RB 7. Project Metrics displays new charts. *** Improvements *** 1. Number of problems listed has increased from 2000 to 5000. 2. File Dependency Analysis enabled for Standard and Pro Editions. 3. The Project Printer HTML site option generates a .hhk file for compiling to .chm. This becomes the Index tab in HTML Help. 4. File associations dialog allows you to control file associations in the Windows Explorer shell. 5. You can import Project NameCheck settings (.std) and a problem filter (.flt) by right-clicking the file in Windows Explorer. 6. You can open a .sud or .sup file in Super Project Analyzer by double-clicking it in Windows Explorer. 7. You can define a fixed default directory for file dialogs in General Options. (Andrew Hellyer) 8. Support for the !bang operator. Syntax such as myobject!param calls the default function or property of myobject. This syntax is often used with collection classes and also as form!control. (Jean-François Ménard) 9. The problem Hotkey missing has been refined so that Frame controls are not required to have a hotkey if they contain controls that can have their own hotkey. (Patricia Pickup) 10.References from a .NET project to a .NET assembly are resolved for multi-project analysis and dependencies between 2 .vbproj's are detected even if the dependency is via a compiled library. (Arnaud Guelfucci) 11.The comment directive '$PROBHIDE DEAD flags a procedure as live. It now also flags all procedures it calls as live, down along the entire call tree. (Moshe Pack) 12.New IN_THIS_FILE scope for comment directives. (Moshe Pack) 13.New macro commands: CommentManual, CommentManualUnformatted (idea by Brian Lee) 14.Added support for the Parent property of a VB6 control and a VB6 UserControl. (Erik Berg) 15.Added support for the UserControl keyword. 16.Added support for a UserControl's ActiveControl and Controls properties. 17.PDM (VB6 Package and Deployment Wizard) files are included as related documents, but not analyzed. 18.Project Metrics to calculate Outliers and Extreme outliers, which are exceptional metric values. 19.Support for Project Imports. (Bob Stoner) 20.Project Printer comment manual syntax refined. (based on input from Anko Groenewegen) 21.Project Printer HTML web site includes an alternative main file 00index.html for easy opening. (Wes Carew) 22.Line-up of HTML report tables. 23.Problem report refined. *** Changes *** 1. The rules to calculate Meaningful comments (MCOMM) have been refined. They now exclude certain comments, such as repeated use of a single letter, which is a banner line. MCOMM values reported by this and earlier versions of Project Analyzer can differ. 2. Summary report and Design quality report rearranged. *** Bug fixes *** 1. Saving metrics for a multi-project analysis could create a file name that was too long. (Namrata Shah) 2. References to X were skipped in the following VB Classic statements: Open..As X and Name..As X. This could cause an dead code warning. (Tom Cranstoun) 3. Fixed some menu check marks' visibility in Windows 2000. 4. References to a read-only property of an unknown data type were sometimes missed in an assignment statement, which caused a dead code bug. Fixed. (Mike Stockdale) 5. Detection of Property Set|Get|Let was refined in certain cases, such as unknown or UDT property type. 6. Detection of iterator variable was refined in syntax For Each object.variable In ... 7. Late-bound references to Property Set were missed in .NET projects. 8. Fixed Implements references to Interface procedures that were overloaded in the Interface. 9. .NET methods marked with the or attribute are not reported dead. 10.Fixed "Internal error in autofix, making filenames" for analyses with \\server paths. (Skip Lee) 11.Fixed bugs in Cross-references report. 12.Fixed HTML generation bugs in HTML reports. 13.Save metrics produced an invalid .mtx file if the project had no procedures. 14."If .. Then GoTo" and "If .. Then GoSub" are now caught by the GoTo/GoSub code review rules. 15.Fixed missing dependency problem in a multi-project analysis where a .vbp referenced several other .vbp's. 16.In a classic VB procedure with an Attribute line, local variables and constants were erroneously reported as being "declared in code". 17.Fixed parsing of .NET project-level compiler constant settings that are separated by commas or semicolons. (Len Porzio) 18.Project Graph crashed when saving a large graph as .wmf file. (Matthew Phillips) 19.The ProbFilter macro command was not reflected on the screen. 20.Project Metrics to handle division by zero with metrics such as MCOMM%. 21.Project Metrics crashed when deleting a metrics limit set. 22.References to Friend Enums were missed when Friend Enum was declared outside modules or classes. (Pierre Grant) 23.Fixed handling of HTML/XML comments in Project Printer HTML reports. (Anko Groenewegen) 24.Removing an item from Project NameCheck wasn't possible. (Joe Frahm) 25.The problem "Dead return value" didn't obey the flag "Ignore deadness of exposed code". v7.0.07 March 2004 *** Improvements *** 1. If a required COM file typelib version is not found on the system, tries to locate a newer version automatically. 2. Library report includes COM typelib version numbers and shows a warning if there is a mismatch between the required and the available version. 3. Module tab at bottom of main screen shows GUID and typelib version when a COM Library is selected. *** Bug fixes *** 1. Fixed a bug that caused a .NET compatibility problem to be shown for certain standard VB5/VB6 function calls when COM analysis was enabled for default VB run-times. 2. Imports statements that imported a Namespace weren't analyzed correctly. The bug affected versions v7.0.05 and .06. Imports statements whose target was not a Namespace worked correctly. (Daniel Watts) 3. A VB.NET startup form wasn't detected correctly if the project contained a class or COM library that had the same name as the root namespace of the project. This could cause the form to show as dead. (Daniel Watts) 4. Removed error message when analyzing COM files msadco.dll and mswcrun.dll. (Namrata Shah) v7.0.06 February 2004 *** Improvements *** 1. Added Copy to Clipboard functionality to all call tree and list views in the main window, and also the Call tree window. 2. Added Report functionality to all call trees in the main window. 3. Syntax colored view for HTML and XML files, as well as .vbp, .vbg, .vbw, .ebp and .ini files. 4. New macro commands: SaveMTX, OpenMTX, FindDuplicateCode, Include, Log. 5. Enhanced macro command: SetReport. 6. Speed optimization for reading of large files. 7. Readability of call tree reports improved in HTML mode. 8. AddressOf procedure references are now classified as such. 9. VB5, VB6: AddressOf flags a procedure as an API callback. API callback parameters and return values are always live. (Moshe Pack) *** Bug fixes *** 1. The Dictionary report used to crash with some .NET analyses. 2. The problem Dead return value wasn't reported correctly. v7.0.05 January 2004 *** New features *** 1. Limited support for .vbdproj files (.NET Compact Framework). 2. Library report lists duplicate declarations for the same DLL procedure. *** Improvements *** 1. COM analysis supports the following default type libraries: msvbvm60.dll, vb6.olb msvbvm50.dll, vb5.olb, vba5.dll Including these libraries in the analysis may improve the overall accuracy of the results. 2. COM analysis can now read several typelibs in a file. 3. Project Graph can now pick the project's start-up form or module for graph types Inheritance, Control Flow, Data Flow, Form Show. This feature is in the View menu. 4. Several features (but not all) now move files to the recycle bin instead of deleting them when an overwrite is required. 5. Module tab in the main screen shows the number of interfaces, classes, modules and structures defined within a module or library. 6. Library report reformatted. *** Bug fixes *** 1. A VB.NET start-up form can never be dead. (Daniel Watts) 2. If a VB.NET project had a class with the same name as the root namespace of the project, references were not detected correctly. v7.0.04 December 2003 *** Bug fixes *** 1. Project Metrics Viewer crashed when the .mtx file search path contained an inaccessible path. 2. Design quality report displayed an incorrect Code lines count in the Comments and whitespace section. (Pierre Grant) 3. Multi-project analysis of VB classic projects was skipping some references. (Pierre Grant) *** Changes *** 1. VB classic project names were removed from the Namespace report. Now it lists .NET Namespaces as the title indicates. v7.0.03 November 2003 *** Improvements *** 1. Faster analysis phase 1/2 for VB.NET projects and classic VB projects with comment directives. 2. The Possibly twisted tab order rule now supports RightToLeft forms. (requested by Moshe Pack) *** Bug fixes *** 1. A mismatching '$END comment directive (without corresponding BEGIN) could cause another, unclosed BEGIN.. block in another file to terminate an incorrect line. (Moshe Pack) 2. Single-line problem directives could affect more lines than just one. 3. The bug fix for the detection of the procedure header line in v7.2.02 caused another bug to appear. This created extra warnings for "Variable/constant declared in code". Fixed. (Moshe Pack) 4. The Possibly twisted tab order sub-problem "Container doesn't precede children" was incorrectly reported for forms with nested container controls. 5. Fixed an error message analyzing COMCT332.OCX. (Rob Lewis) 6. Autofix produced lines exceeding 1024 characters that VB6 wouldn't read in correctly. (Ian Jury) v7.0.02 October 2003 *** Minor new features *** 1. Added Report button in Dependencies view. (Boris Velikovich) *** Improvements *** 1. A .dbp project in a .sln file is now ignored without an error message. (Paul Hatcher) 2. Project NameCheck to allow either prefix or no prefix together with ProperCase. Syntax "o," is now supported to approve alternatives such as MyObject and oMyObject. Earlier it wasn't possible to define both a prefix and no prefix as alternatives. (Jean-François Ménard and others) 3. References between files window shows source file if the option is selected. (Jean-François Ménard) 4. File names given as command line parameters are relative to the working directory, not to the directory of project.exe. 5. New macro parameter %0 contains the working directory when the macro is run from the command line. 6. Current problem filter name is displayed on the main screen. (Jean-François Ménard) *** Documentation updates in help file *** 1. The description of the system complexity metric is rewritten. 2. New topic "Practical issues" for Project NameCheck shows how to configure the naming standards. *** Bug fixes *** 1. Class with both Shared and non-Shared members erroneously raised a "Private constructor expected" problem when it had no Inherits statement. (Nick Varacalli) 2. Method call to .Select incorrectly caused a "Case Else missing" problem to be displayed. (Moshe Pack) 3. Fixed detection of procedure header line in procedures that have comments before the procedure header line. Bug affected several code review features and call trees. (Moshe Pack, Jean-François Ménard) 4. Export features provide a warning instead of crashing if you wish to overwrite a read-only file. (Jean-François Ménard) 5. Fixed NameCheck support for alternative prefixes with different lengths, used along with ProperCase. (Jean-François Ménard) 6. Removed crash with VB Classic projects having an enum with over 255 constants. (Moshe Pack) 7. Fixed bug where a reference from a procedure to an overloading variant of the same procedure (similar names) was detected but not stored. (Ewald Hofman) 8. The analysis ignored a reference to "entity" in syntax "object.keyword entity" where keyword was ReDim. (Edward Buttler) v7.0.01 August 2003 *** Major new features *** 1. Support for Visual Basic .NET 2003. Now supporting all VB versions from 3.0 to 6.0 and VB.NET 2002 & 2003. Support improved for ASP.NET projects. 2. Find duplicate code Reduce code size by joining repeated code blocks that result from copy & paste coding. 3. Project Metrics Calculate and store tens of metrics. View metrics history and compare projects. Project, file, class and procedure level metrics available. 4. Dead code detection improved with new rules. You can now spot more removable and problematic code than ever. + Dead interface Can be removed. + Implemented interface not used Can be removed. + Interface not implemented Code has no run-time effect. + Dead class Can be removed. + Class not inherited MustInherit class has no concrete children. (VB.NET) + Class not instantiated Code has no run-time effect. + Dead structure Can be removed. (VB.NET) + Dead module Can be removed. + Dead function return value Could be Sub. (idea by Raul Fajardo) Dead control detection (VB 3-6) finds controls that don't seem to be in use. Consider removing such controls and any connected code, including events. + Control not visible + Control outside visible area + Control not enabled 5. New class design code review rules. + Constructor missing A concrete .NET class should define a constructor. + Protected constructor expected Mark all constructors of an abstract class Protected. + Private constructor expected Prevent instantiation of shared class. + Finalize found A destructor will slow down the garbage collection. + Finalize missing Finalization required if class uses unmanaged resources. + IDisposable not implemented Implement IDisposable.Dispose to free resources. + Finalize missing MyBase.Finalize Destructor should call MyBase.Finalize. + SuppressFinalize missing IDispose.Dispose should call GC.SuppressFinalize(Me). + Parent class instantiated Don't instantiate base classes. + Parent class requires MustInherit Keep base classes abstract. + Class looks like Interface Could you rewrite the class as an Interface? + Inheritance limited Subclasses can add but not redefine operations. + Shadows keyword found Shadowing makes programs harder to understand. + Child reuses ancestor member name Use of similar names increases probability of errors. + Member scope exceeds container scope Scope of member is wider than scope of class. + Protected found in NotInheritable class Protected makes no sense in a class that cannot be derived. + Interface members missing Class contents cannot be accessed. + Interface class instantiated Do not instantiate interface classes. + Interface class contains code Keep interface and concrete classes separate. 6. Miscellaneous new code review rules. + Require releasing of Win API resource handles Handles must be released to prevent resource leaks. + Constant without type specification Optimize by explicit typing. (idea: Blake Kanewischer) + Case Else branch missing Deal with unexpected Case values. (idea: Joe Monnin) + Variable/constant declaration found in procedure code Keep Dim/Const at start of procedure. (idea: Lori Sites) + Return value discarded for function call Should you use the function return value? (Nicholas Varacalli, Raul Fajardo) + Base address unoptimal for library project Optimize by changing the value. + Compilation unoptimized Enable optimized compilation for your project. + File not found Warning for files that cannot be read by the analysis. Improved code review rules. - Detect constant with type character ($#%!@&) Obsolete syntax. - Parameter with generic type Use explicit types and early binding. 7. Library file analysis (Enterprise Edition) reads contents of conventional DLL files, displays their declaration syntax and reports missing DLL procedures as well as OS version compatibility of each API call. 8. String literal analysis reports the amount of string data and detects duplicate literals that could possibly be joined to save some space. *** Minor new features *** 1. New listings - File list (file names sorted by path) - File list with details - File list by size and date - Module list (alphabetical and hierarchical order) - Namespace list - Procedure list - Procedure list, alphabetical 2. New reports - Form report lists forms and "shown by" information - Dead procedures report gives a list sorted by size so you can focus on removing the largest procedures first. - Report button added in Find window (David Kelly) 3. Report to CSV file. Import data to a spreadsheet. (idea by Rich Ketcham) 4. Printer margin setup. (Jerry Jost, John White) 5. Added option to References window so that you can search for references from anywhere to a selected file. 6. New macro commands and options - Parameter DLL in command Analyze - File type CSV in command SetReport - Lots of new reports supported (see help file) - Report type Files now gives an undetailed list. Use FilesDetailed to get a detailed file list. - Report type Procedures now gives an undetailed list. Use ProceduresDetailed to get a detailed procedure list. - New option in command SaveSUD to skip a question to allow for unattended execution. (Boris Velikovich) 7. New types of cross-references detected. Right-click a programming element to view the references to it. - Implements interface/class. Find classes that implement an interface definition. - Instantiate class. Find places where objects of a class are being instantiated. - Inherits class. Find the descendants of a class. 8. Find window supports search for comments. 9. Copy from hypertext view to clipboard retains colors and other formatting. (John White) 10.Option to locate web project files referenced via http. This makes it quicker to analyze ASP.NET solutions. 11.COM files show procedure parameters. 12.More text and XML files can now be viewed in the Hypertext screen. 13.Double-click a graphic file to view the picture. 14.Solution item files are shown for .NET solutions. 15.webinfo files are now detected and included in project files. *** Improvements *** 1. VB.NET Compatibility Check has been revised to work with Visual Studio .NET 2003. New rules: + COM+/MTS not upgradable to VB.NET Project refers COMSVCS.DLL. Rewrite required. + COM method not callable from VB.NET VB.NET doesn't allow calls to certain COM methods. Compatibility rule changes: - UserControls are no longer problematic for upgrading. - WebClasses do not prevent upgrading, but may require work. - Property ScaleMode triggers problem "ScaleMode must be vbTwips" (was "Work required after upgrade") Removed compatibility rules: - DefType (auto-converted) - Imp, Eqv, Tag, Null (auto-converted) - Work required after upgrade (detected certain keywords, was not very informative) 2. Problem report allows easier selection of report by description or by location. Report by description is rewritten. 3. Added a problem icon when a file cannot be found. 4. Project NameCheck ignores implementation procedure parameters, as they are defined by the interface. 5. Project NameCheck optionally ignores Declare statement parameters, as they are often named in a non-VB standard. (idea by Phil Akin) 6. Library report contains more data. 7. The use of AddHandler flags the target as an event handler. This is useful if you use dynamic event handling rather than static (VB.NET). (Paul Hatcher) 8. Event definitions and event handlers have a different icon. 9. Better support for parameters in .NET attribute. 10.Wrapping enhanced on reports. 11.Auto-fix preserves directory structure. This is useful if your source files are located in many directories. 12.Unused parameters in Overrides procedures are not reported dead because they are defined in an ancestor class. 13.Improved display of duplicate items, such as two files with the same name but in different directory. 14.Problems are not shown for automatically generated source files, such as Web References proxy classes. 15.Problems are not shown in designer generated #Regions. This works for the English, German and French VB.NET versions. *** Bug fixes *** 1. Correct detection of single vs. multiuse instancing for .cls files. Affects VB.NET Compability Check. 2. Improved handling of .NET namespaces and root namespaces. 3. Dictionary report to indicate Event names and property declarations without Get/Set accessor. 4. Late-bound calls are now detected to .NET Structure members. 5. Auto-fix for Encapsulate variable as property generated a syntax error for instantiating definitions such as Dim obj As New class() and commented definitions such as Dim obj As type ' comment 6. The data type of a "As New MyClass" field was not correctly detected in a VB Classic Type block due to the New keyword. 7. .NET Default procedures are not reported dead because calls to them are not necessarily detected. 8. Improved detection of Property Set/Get in chains such as "property.property = value" *** Changes *** 1. Interface report lists Friend, Protected Friend and Public scope members, but not Protected or Private. Previously Protected were included but they are not really part of a class's interface but a part of its implementation. Interface report also lists controls. 2. Case "Abstract New should be Protected" has been moved from rule Excess scope to rule Protected constructor expected. 3. Removed problem option to disable warning for VB3 binary file. Now the warning will always show up. Copyright Aivosto Oy www.aivosto.com vbshop (at) aivosto.com