- Created by Mark Juras , last modified on Jul 25, 2018
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 6 Next »
Remove Statement Summary
Remove is a terminal, refactoring statement that occurs only with a Refactor statement. It prevents a component from being authored. For components other than subprograms, removing them involves simply not declaring them in the target code. For subprograms, they can either not be declared or they can be stubbed out --.i.e., declared but no procedural code authored. The problem with not declaring components is that their references in the procedural code must be dealt with as well. The bulk of the attributes associated with this statement deal with the issue of replacing references to the undeclared components. The attributes of the Remove statement are as follows:Attribute | Description |
Identifier | This required identifier attributes specifies the component to be removed. If the containing Refactor statement had a FileFilter specified then this identifier should be specified relative to it; else, it should be specified relative to the root of the symbol table. |
MigPattern | This string attribute contains a pattern string that will be used as a substitute for a reference to the component. Any arguments that reference might require have to be accounted for in the pattern string. See the Patterns page for details. |
MigStatus | This attribute is one of the entries -- Notimplemented, Delete, Stubout, Conditional, or a code event string. |
MigComment | This attribute supplies a string that is substituted for references to the component. |
The script errors associated with the Remove statement are as follows:
Error | Description |
1098 | The identifier [%1d] could not be found. |
The migStatus entries are used to control how remove declared components from the translation without causing build problems caused by references to those components. To demonstrate how these change the translations consider the demonstration code fmstocks\vb6\FMStocks_DB\FMStocks_DB.vbp from which a subprogram DBHelper.collectParams and a declare Helpers.RegisterEventSource will be removed with various migStatus settings. In the source, these are, showing a typical reference and the declaration
collectParams cmd, params ... Private Sub collectParams(ByRef cmd As ADODB.Command, ByVal argparams As Variant) Dim params As Variant, v As Variant Dim i As Integer, l As Integer, u As Integer ... End Sub hEventLog = RegisterEventSource("", sEventTitle) ... Declare Function RegisterEventSource Lib "advapi32.dll" Alias _ "RegisterEventSourceA" (ByVal lpUNCServerName As String, _ ByVal lpSourceName As String) As Long
collectParams(ref cmd,params_migname); ... private void collectParams(ref ADODB.Command cmd,object argparams) { object[][] params_migname = null; object v = null; ... } hEventLog = RegisterEventSource("",sEventTitle); ... [DllImport("advapi32.dll",EntryPoint="RegisterEventSourceA")] public static extern int RegisterEventSource(string lpUNCServerName,string lpSourceName);
Using Remove with no migStatus
Using the remove without any migStatus specification removes the indicated component from the translation without effecting any of the references to that component. Using this Remove<Compile Project="C:\gmSrc\fmstocks\vb6\FMStocks_DB\FMStocks_DB.vbp" > <Refactor> <Remove Identifier="FMStocks_DB.DBHelper.collectParams" /> <Remove Identifier="FMStocks_DB.Helpers.RegisterEventSource" /> </Refactor> </Compile>
collectParams(ref cmd,params_migname); ... hEventLog = RegisterEventSource("",sEventTitle);
Using Remove with Delete migStatus
Using the remove with the delete migStatus removes both the declarations for the components and also the references. Using this Remove<Compile Project="C:\gmSrc\fmstocks\vb6\FMStocks_DB\FMStocks_DB.vbp" > <Refactor> <Remove Identifier="FMStocks_DB.DBHelper.collectParams" migStatus="Delete" /> <Remove Identifier="FMStocks_DB.Helpers.RegisterEventSource" migStatus="Delete" /> </Refactor> </Compile>
Using Remove with NotImplemented migStatus
Using the remove with the NotImplemented migstatus removes the declaration but comments out the references rather that removing them completely. Using this Remove<Compile Project="C:\gmSrc\fmstocks\vb6\FMStocks_DB\FMStocks_DB.vbp" > <Refactor> <Remove Identifier="FMStocks_DB.DBHelper.collectParams" migStatus="NotImplemented" /> <Remove Identifier="FMStocks_DB.Helpers.RegisterEventSource" migStatus="NotImplemented" /> </Refactor> </Compile>
// collectParams // collectParams(ref cmd,params_migname); ... // RegisterEventSource // hEventLog = Convert.ToString(RegisterEventSource("",sEventTitle));
Using Remove with StubOut migStatus
As an alternative to removing the declaration, a stubbed version of that declaration can be authored instead. This has the advantage that this approach does not require that any references to the components be changed. Using this Remove<Compile Project="C:\gmSrc\fmstocks\vb6\FMStocks_DB\FMStocks_DB.vbp" > <Refactor> <Remove Identifier="FMStocks_DB.DBHelper.collectParams" migStatus="StubOut" /> <Remove Identifier="FMStocks_DB.Helpers.RegisterEventSource" migStatus="StubOut" /> </Refactor> </Compile>
public void collectParams(ref ADODB.Command cmd,object argparams) { }
Using Remove with Conditional migStatus
From time to time we come across a subroutine that we plan to reauthor during the migration phase of the project. Frequently the subroutine is not translating well, perhaps because it depends on a lot of win32 APIS and the most productive approach is a reauthor. However, we want to defer the reauthoring task. Also Reauthoring almost always begins with the latest good translation of the code. Being able to get a current translation but also defer finishing it and changing it to a reauthor are somewhat at odds. Using the Conditional migstatus is a way to get a current translation of a routine, but have the .NET compiler treat the resulting routine as a stub. Using this Remove<Compile Project="C:\gmSrc\fmstocks\vb6\FMStocks_DB\FMStocks_DB.vbp" > <Refactor> <Remove Identifier="FMStocks_DB.DBHelper.collectParams" migStatus="Conditional" /> <Remove Identifier="FMStocks_DB.Helpers.RegisterEventSource" migStatus="Conditional" /> </Refactor> </Compile>
*** Refactored start of connectParams { // UPGRADE_INFO: conditional stub FMStocks_DB.DBHelper.collectParams #if mig_conditional_stub object[][] params_migname = null; *** Original start of connectParams { object[][] params_migname = null; *** Refactored end of connectParams #endif } *** Original start of connectParams }
Table of Contents
- No labels