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.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. <in> and <out> attributes with VB.NET Declare/<DLLImport>.
        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-Franois Mnard)
        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-Franois Mnard)
        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-Franois Mnard)
        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 <COMRegisterFunction()> or 
           <COMUnRegisterFunction()> 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-Franois Mnard and others)
        3. References between files window shows source file if the 
           <Any other file> option is selected. (Jean-Franois Mnard)
        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-Franois Mnard)

        *** 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-Franois Mnard)
        4. Export features provide a warning instead of crashing if you 
           wish to overwrite a read-only file. (Jean-Franois Mnard)
        5. Fixed NameCheck support for alternative prefixes with
           different lengths, used along with ProperCase. 
           (Jean-Franois Mnard)
        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 <Any other file> 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 <DLLImport> 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

