[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

US20020016953A1 - Development system with methods for assisting a user with inputting source code - Google Patents

Development system with methods for assisting a user with inputting source code Download PDF

Info

Publication number
US20020016953A1
US20020016953A1 US09/934,942 US93494201A US2002016953A1 US 20020016953 A1 US20020016953 A1 US 20020016953A1 US 93494201 A US93494201 A US 93494201A US 2002016953 A1 US2002016953 A1 US 2002016953A1
Authority
US
United States
Prior art keywords
user
source code
input
code
list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US09/934,942
Inventor
Peter Sollich
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Borland Software Corp
Original Assignee
Borland International Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Borland International Inc filed Critical Borland International Inc
Priority to US09/934,942 priority Critical patent/US20020016953A1/en
Publication of US20020016953A1 publication Critical patent/US20020016953A1/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors

Definitions

  • the present invention relates generally to system and methods for creating software programs. More particularly, the present invention relates to a visual development system and methods for assisting users with the task of creating source code during development of software programs.
  • a digital computer Before a digital computer may accomplish a desired task, it must receive an appropriate set of instructions. Executed by the computer's microprocessor, these instructions, collectively referred to as a “computer program,” direct the operation of the computer. Expectedly, the computer must understand the instructions which it receives before it may undertake the specified activity.
  • machine code i.e., the low-level, minute instructions for performing specific tasks—the sequence of ones and zeros that are interpreted as specific instructions by the computer's microprocessor. Since machine language or machine code is the only language computers actually understand, all other programming languages represent ways of structuring human language so that humans can get computers to perform specific tasks.
  • a program called a “compiler” translates these instructions into the requisite machine language.
  • the program written in the high-level language is called the “source code” or source program.
  • the ultimate output of the compiler is an intermediate module or “object module,” which includes instructions for execution by a target processor.
  • the intermediate module is a Pascal “unit” (e.g., .TPU file).
  • an object module includes code for instructing the operation of a computer, the object module itself is not usually in a form which may be directly executed by a computer. Instead, it must undergo a “linking” operation before the final executable program is created.
  • Linking may be thought of as the general process of combining or linking together one or more compiled object modules or units to create an executable program. This task usually falls to a program called a “linker.”
  • a linker receives, either from the user or from an integrated compiler, a list of modules desired to be included in the link operation.
  • the linker scans the object modules from the object and library files specified. After resolving interconnecting references as needed, the linker constructs an executable image by organizing the object code from the modules of the program in a format understood by the operating system program loader.
  • executable code typically an .EXE file
  • “Visual” development environments such as Borland's DelphiTM, Microsoft® Visual Basic, and Powersoft's PowerBuilder®, are rapidly becoming preferred development tools for quickly creating production applications.
  • Such environments are characterized by an Integrated Development Environment (IDE) providing a form designer or painter, a property getter/setter manager (“inspector”), a project manager, a tool palette (with objects which the user can drag and drop on forms), an editor, a compiler, and a linker.
  • IDE Integrated Development Environment
  • the user “paints” objects on one or more forms, using the form painter. Attributes and properties of the objects on the forms can be modified using the property manager or inspector.
  • the user attaches or associates program code with particular objects on screen (e.g., button object); the editor is used to edit program code which has been attached to particular objects.
  • p seudo-compiled For Microsoft Visual Basic and Powersoft PowerBuilder, programs are “pseudo-compiled” into p-code (“ p seudo” codes) modules. Each p-code module comprises byte codes which, for execution of the program, are interpreted at runtime by a runtime interpreter. Runtime interpreters themselves are usually large programs (e.g., VBRUNxx.DLL for Visual Basic) which must be distributed with the programs in order for them to run. In the instance of DelphiTM, on the other hand, programs are compiled and linked into true machine code, thus yielding standalone executable programs; no runtime interpreter is needed.
  • VBRUNxx.DLL Visual Basic
  • a visual development system of the present invention includes a compiler, a linker, and an interface. Through the interface, the developer user “paints” forms with objects and supplies source listings (i.e., enters source code) for the compiler. From the source code or listings, once compiled by the compiler and linked with other run-time or support files by the linker, the system generates a computer program, which may be executed by a target processor(s).
  • source listings i.e., enters source code
  • the interface includes an Integrated Development Environment (IDE) interface having a code editor.
  • IDE Integrated Development Environment
  • the IDE provides “Code Insight” functionality to the code editor for displaying context sensitive pop-up windows within a source code file.
  • Code Completion and Code Parameter features of Code Insight are of particular interest to the present invention.
  • Code Completion is implemented at the user interface level by displaying a Code Completion dialog box after the user enters a record or class name followed by a period.
  • the dialog lists the properties, methods and events appropriate to the class.
  • the dialog lists the data members of the record. To complete entry of the expression, the user need only select an item from the dialog list, whereupon the system automatically enters the selected item in the code.
  • Code Completion also operates during input of assignment statements.
  • a hot key e.g., ⁇ ctrl> ⁇ space_bar>
  • a list of arguments valid for the variable is displayed.
  • the user can simply select an argument to be entered in the code.
  • the user can select a type which itself is not appropriate (e.g., record type) but nevertheless includes a nested data member having a type which is valid.
  • the user can select a type variable SMTP1, a structure of type TSMTP which contains an integer data member.
  • the system displays a list of valid data members for SMTP1, that is, the data members which are assignment compatible for the integer assignment. Now, the user can simply select a valid member to be entered in the code.
  • the system Upon the user entering the opening parenthesis, the system automatically displays parameter information for the call. In this manner, the user can view the required arguments for a method as he or she enters a method, function, or procedure call.
  • FIG. 1A is a block diagram of a computer system in which the present invention may be embodied.
  • FIG. 1B is a block diagram of a software system provided for directing the operation of the computer system of FIG. 1A.
  • FIG. 2 is a block diagram of a visual development system of the present invention which includes a compiler, a linker, and an interface.
  • FIG. 3 is a bitmap screen shot illustrating a preferred interface of an application development environment in which the present invention is embodied.
  • FIG. 4 is a bitmap screen shot illustrating an Environment Options dialog box, for configuring operation of “Code Insight” features of the system.
  • FIGS. 5 A-E are bitmap screen shots illustrating a “Code Completion” user interface methodology of the present invention.
  • FIG. 5F is a bitmap screen shot illustrating a “Code Parameters” user interface methodology of the present invention.
  • the present invention may be embodied on a computer system such as the system 100 of FIG. 1A, which includes a central processor 101 , a main memory 102 , an input/output controller 103 , a keyboard 104 , a pointing device 105 (e.g., mouse, track ball, pen device, or the like), a display device 106 , and a mass storage 107 (e.g., removable disk, floppy disk, fixed disk, optical disk (including CD-ROM), and the like). Additional input/output devices, such as a printing device 108 , may be provided with the system 100 as desired. As shown, the various components of the system 100 communicate through a system bus 110 or similar architecture. In a preferred embodiment, the system 100 includes an IBM-compatible personal computer, available from a variety of vendors (including IBM of Armonk, N.Y.).
  • a computer software system 150 is provided for directing the operation of the computer system 100 .
  • Software system 150 which is stored in system memory 102 and/or on disk storage 107 , includes a kernel or operating system (OS) 160 and a windows shell or interface 180 .
  • OS operating system
  • One or more application programs, such as application programs 170 or windows application programs 190 may be “loaded” (i.e., transferred from storage 107 into memory 102 ) for execution by the system 100 .
  • OS 160 and shell 180 as well as application software 170 , 190 , include an interface for receiving user commands and data and displaying results and other useful information.
  • Software system 150 also includes a visual development system 200 of the present invention for developing system and application programs. As shown, the development system 200 includes components which interface with the system 100 through windows shell 180 , as well as components which interface directly through OS 160 .
  • operating system 160 includes MS-DOS and shell 180 includes Microsoft® Windows, both of which are available from Microsoft Corporation of Redmond, Wash.
  • components 160 and 180 can be provided by Microsoft Windows 9x/Windows NT.
  • Application software 170 , 190 can be any one of a variety of software applications, such as word processing, database, spreadsheet, text editors, and the like, including those created by the development system 200 , which is now described in greater detail.
  • the visual development system 200 of the present invention includes a compiler 220 , a linker 250 , an interface 210 , and (optional) debugger 270 .
  • the developer user “paints” forms 202 with objects and supplies source listings 201 to the compiler 220 .
  • Interface 210 includes both command-line driven 213 and Integrated Development Environment (IDE) 211 interfaces, the former accepting user commands through command-line parameters, the latter providing menu equivalents thereof.
  • IDE Integrated Development Environment
  • the compiler 220 “compiles” or generates object module(s) or “units” 203 .
  • linker 250 “links” or combines the units 203 with runtime libraries 260 (e.g., standard runtime library functions) to generate program(s) 204 , which may be executed by a target processor (e.g., processor 101 of FIG. 1A).
  • runtime libraries 260 include previously-compiled standard routines, such as graphics, I/O routines, startup code, math libraries and the like.
  • Operation i.e., “compilation” by a compiler, such as compiler 220
  • a compiler parses the source program and builds a parse tree—a well known tree data structure representing parsed source code.
  • the “back end” traverses the tree and generates code (if necessary) for each node of the tree, in a post-order fashion.
  • compilers see Fischer et al., Crafting a Compiler with C , Benjamin/Cummings Publishing Company, Inc., 1991, the disclosure of which is hereby incorporated by reference. Further description of the back end of the compiler is provided in commonly-owned U.S.
  • FIG. 3 illustrates an application development environment 360 , which is provided by Delphi. Many of the traditional requirements of programming, particularly for Windows applications, are handled for the programmer automatically by Delphi.
  • the programming environment 360 comprises a main window 361 , a form 371 , a code editor window 381 , and an object manager or “inspector” window 391 .
  • the main window 361 itself comprises main menu 362 , tool bar buttons 363 , and component palette 364 .
  • Main menu 362 lists user-selectable commands, in a conventional manner. For instance, the main menu invokes File, Edit, View submenus, and the like. Each submenu lists particular choices which the user can select.
  • toolbar 363 provides the user with shortcuts to the most common commands from the main menu.
  • the toolbar is configurable by the user for including icons for most of the menu commands.
  • Forms such as form 371
  • the user employs the form like a canvas, placing and arranging “components” on it to design the parts of one's user interface.
  • the components themselves are the basic building blocks of applications developed within the environment. Available components appear on the component palette 364 , which is displayed as part of the main window 361 .
  • the form can be thought of as a component that contains other components.
  • One form serves as the main form for the application; its components interact with other forms and their components to create the interface for an application under development. In this manner, the main form serves as the main interface for an application, while other forms typically serve as dialog boxes, data entry screens, and the like.
  • the user can change the properties of the form, including resizing the form and moving it anywhere on screen.
  • the form itself includes standard features such as a control menu, minimize and maximize buttons, title bar, and resizeable borders.
  • the user can change these features, as well as other “properties” of the form, by using the object inspector window 391 to edit the form during design time.
  • properties define a component's appearance and behavior.
  • Components are the elements which a user employs to build his or her applications. They include all of the visible parts of an application, such as dialog boxes and buttons, as well as those which are not visible while the application is running (e.g., system timers).
  • components are grouped functionally on different pages of the component palette 364 . Each functional group is identified by a tab member, which includes a label indicating the particular nature of the group. For example, components that represent the Microsoft Windows common dialog boxes are grouped on the “Dialogs” page of the palette.
  • the palette can incorporate user-created custom controls, which the user installs onto the palette. Additionally, the user can install third-party components.
  • the object inspector window 391 enables the user to easily customize the way a component appears and behaves in the application under development.
  • the inspector 391 comprises an object selector field 392 , a properties page 393 , and an events page 394 .
  • the object selector 392 shows the name and type of the currently selected object, such as “Form1,” as shown.
  • the properties page 391 lists the attributes of a component placed on a form (or the form itself) which can be customized.
  • the events page on the other hand, lists “event handlers” for a particular component. Event handlers are specialized procedures which may include user-provided program code.
  • Code editor 381 is a full-featured editor that provides access to all the code in a given application project. In addition to its basic editing functionality, the code editor 381 provides color syntax highlighting, for assisting the user with entering syntactically-correct code. When a project is first opened, the system automatically generates a page in the code editor for a default unit of source code; in the Object Pascal preferred embodiment, the default unit is named Unit1.
  • the IDE provides “Code Insight” features to the code editor for displaying context sensitive pop-up windows within a source code file. By default these features are enabled.
  • the user invokes (selects Tools
  • Code Insight provides several features, which generally function as follows.
  • [0050] Feature Use and Functionality Code Enter a class name followed by a period in a code file. Completion The list of properties, methods and events appropriate to the class will be displayed. The user can then select the item to be entered in the code. Enter an assignment statement and press ⁇ ctrl> ⁇ spacebar >. A list of arguments that are valid for the variable is displayed. Select an argument to be entered in the code. Code View the syntax of a method as the user enters it into Parameters the code. Tooltip When the compiler is stopped during debug, the user Expression can view the value of a variable by pointing to it with Evaluation the cursor. Code Set the duration of the pause before a Code Insight Completion dialog box is displayed.
  • Delay Code Available templates are listed by name with a short Templates description. Click a template name to display the code that will be entered in the file when that template is selected. Code displayed in the code window can be edited. Templates The Templates box includes a name and short description for each template. Code The code box displays the code that will be inserted into a file when the template is selected. The code displayed can be edited.
  • Code Completion is implemented at the user interface level by displaying a Code Completion dialog box after the user enters a record or class name followed by a period.
  • the dialog lists the properties, methods and events appropriate to the class.
  • the dialog lists the data members of the record.
  • FIG. 5A for instance, at 501 , the user has begun entry of MainForm, a class of type TMainForm.
  • the system automatically displays list dialog 503 next to the current cursor position. Dialog 503 lists the properties, methods and events appropriate to the class.
  • the user need only select an item from the dialog list, whereupon the system automatically enters the selected item in the code.
  • FIG. 5B illustrates Code Completion for a rectangle structure, TRect.
  • the user has declared a variable, myRect, of type TRect.
  • the TRect type defines a rectangle as follows.
  • TRect record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end;
  • TPoint is itself a record defined as follows.
  • TPoint record X: Longint; Y: Longint; end;
  • Dialog 513 lists the data members appropriate to the record (structure). Again, the user need only select an item from the dialog list to complete entry of the expression, whereupon the system automatically enters the selected item in the code.
  • Code Completion also operates during input of assignment statements.
  • FIG. 5C when the user enters an assignment statement for integer variable J and presses a hot key (e.g., ⁇ ctrl> ⁇ space_bar>) at 525 , a list of arguments 523 valid for the variable is displayed.
  • the user can simply select an argument to be entered in the code.
  • FIGS. 5 D-E the user can select a type which itself is not appropriate (e.g., record type) but nevertheless includes a nested data member having a type which is valid.
  • type variable SMTP1 a structure of type TSMTP, at 531 .
  • the system displays a list of the data members for SMTP1, as shown at 541 in FIG. 5E. Now, the user can simply select a valid argument to be entered in the code.
  • the user can bring up a list of arguments when typing a procedure, function, or method call and needs to add an argument.
  • FIG. 5F for instance, the user has begun entry of a SendFile method call.
  • the SendFile method itself is defined elsewhere in the code as follows.
  • the system Upon the user entering the opening parenthesis, the system automatically displays parameter information for the call.
  • the syntax for the argument(s) to the method is displayed, as shown at 551 in FIG. 5F. In this manner, the user can view the required arguments for a method as he or she enters a method, function, or procedure call.
  • the Integrated Development Environment or IDE invokes the compiler for determining an appropriate context for the source code, based on where the screen cursor is currently positioned within the code.
  • the compiler in response, compiles the source code up to the current point (of the user's cursor) and then returns a result back to the IDE which describes the current context within the source code.
  • the IDE receives two core pieces of information. If the user has positioned the cursor within the parameter list of a function call, the IDE will receive information from the compiler reporting the name of the function together with the name and the types of the function's formal parameters. With this information, the IDE can display a pop-up menu providing an argument list for the current function, thus eliminating the need to invoke a help system for looking up the function.
  • the second type of information which the IDE receives relates to symbols or identifiers. If a symbol or identifier would be valid at the current cursor position, the compiler will identify the condition and prepare a list of the valid identifier, together with other valid identifiers, for the cursor position. The IDE, upon receiving this information, can display the list to the user. The user, in turn, selects the desired symbol from the list, for instance using incremental searching technique.
  • one of the data members might be a rectangle structure (e.g., a structure of type RECT) which, in turn, comprises integer data members (i.e., nested data members).
  • the system displays the rectangle (nested structure) member since there is a legal way to employ integer data members of that structure.
  • the user will ultimately need to type an additional dot (i.e., dot operator) to complete selection of the final data member.
  • a first method, CompilerKibitz is invoked by the IDE to trigger compilation.
  • the IDE passes in the filename (i.e., source code filename), together with the current line number and column position where the cursor is located.
  • the method may be constructed as follows (using the C programming language). void EXPORT CompiierKibitz(CompOptions *options, UnitNameFileNamePair *unitpileNamePairs, const char *stopSrc, int stopLine, int stopCol, char makeFlag, KibitzResult *resu1t) ⁇ // ...
  • the method is invoked with seven parameters.
  • the first parameter a pointer-to compiler options (CompOptions), is a structure which specifies a “source to compile”; this might be different than the source which the IDE desires the compiler to stop.
  • the file can be specified in a conventional manner, such as by filename (text string).
  • the second parameter is a pointer-to unit/file name pairs. This, in essence, is a table of unit name/file name associations. This is passed to the compiler since the IDE might have some knowledge about where particular files are located (on disk) for corresponding “units” which are included in the user's project.
  • a “uses” statement sets forth particular Pascal “units” which are employed. Since the IDE stores directory information for various files (e.g., library files), the IDE can pass such information on to the compiler via the second parameter.
  • the next three parameters specify the user's source position.
  • the stopSrc parameter is a (pointer to) character string specifying the “stop source”—that is, the current source file where the user has stopped (i.e., stopped data entry long enough to invoke the code completion methodology of the present invention).
  • the stopLine parameter is an integer data member storing the particular line number where the user stopped in the source code.
  • stopCol is an integer data member specifying the particular column in the source code where the user stopped.
  • the makeFlag parameter serves as a flag indicating that the compiler should “make” the program (i.e., compiling all dependent source files for ensuring that the currently-compiled unit or project is up-to-date). This is set to “true” when the IDE has detected that other files have been added, thus requiring a “make.” If, on the other hand, other files have not been added, the flag is set to false and only the current source file is compiled.
  • the last parameter is a pointer to a “Kibitz” result structure, KibitzResult. After completion of the method execution, the result structure still does not contain a list of valid symbols. Instead, the IDE invokes yet another method to fill out this particular information in the result structure.
  • the IDE invokes a GetValidSymbols method.
  • the method includes the following prototype. int EXPORT GetValidSymbols(const KibitzResult *k, Symbol **result, GF_Flags *flags, It maxCnt) ⁇ /* Find symbols valid in this context. Find up to maxCnt, and report how many were found. Write them into result, if result ⁇ > 0. */ ⁇
  • the method is invoked by passing in (by reference) the KibitzResult structure, as the method's first parameter. Together with the result structure, a vector of symbols is passed in as the second parameter and a vector of flags is passed in as the third parameter. Finally, a maximum count is specified in the fourth parameter, for indicating an upper limit on the number of symbols which should be returned (i.e., based on how many the IDE can realistically handle).
  • the IDE invokes the GetValidSymbols method twice. On the first invocation of the method, the IDE simply specifies NULL for the two vectors whereupon the method returns a count for the number of valid symbols. Based on this first call, the IDE will allocate sufficient memory and then invoke the GetValidSymbols method a second time, passing in appropriate pointers to the allocated vectors which are to store the symbol results.
  • KibitzResult may be defined as follows. typedef struct ⁇ KibitzKind kind; Unit *unit; int scopeCnt; Symbol *scopeList [MAXSCOPES/*scopeCnt*/]; Symbol *proc; // valid for KK_ARGUMENT and KK_STD_ARG Symbol *formalArg; // valid for KK_ARGUMENT int formalInx; // valid for KK_STD_ARG, 1-based unsigned validTypes; // valid for KK_TYPE, KK_STO_ARG Type *validType; // valid for KK_EXPR, KK_CONST_EXPR Token validToken; // valid for KK_TOKEN TokenClass validTokens; // valid for KK_TOKENS KibitzPos pos; // position of kibitz point char partialIden[64]; // may have found a partial identifier // KK ARGUMENT: where the parms were
  • the data structure is a record storing context information. Of the various data members of the record, the most important is KibitzKind, an numerated type indicating the “kind” of source code situations the system is currently in.
  • KibitzKind data type is itself defined as follows.
  • KK_NONE // Not something we support KK_FIELD, // A field of a record/object/class KK_ARGUMENT, // An actual argument to a user- declared // function or procedure KK_STD_ARG, // An actual argument to a standard function/procedure KK_TYPE, // A type KK_EXPR, // An expression KK_STMT, // A stint KK_CONST_EXPR, // A constant expression KK_TOKEN, // A token KK_TOKEN_CLASS,// A set of tokens KK_PROC_DECL, // A procedure, function, method, constructor, // or destructor declaration KK_ERROR, // Error case where we don't have enough info KibitzKinds, ⁇ KibitzKind;
  • KK_NONE indicates that the cursor is currently positioned at a location where code completion is not supported, such as positions within a user's comment.
  • KK_ERROR indicates an error condition; this occurs when the user's program contains so many errors that the system cannot correctly determine appropriate code completion.
  • the KK_FIELD data type indicates a field of a record (structure), object, or class. For instance, if the user types Form1, a field member of Form1 is expected.
  • KK_ARGUMENT indicates that the system expects an actual argument to a user-declared function or procedure.
  • further restrictions can be imposed. If the argument is a var argument, then the argument must be a variable. If, on the other hand, the argument is a value, then an expression is acceptable.
  • KK_STD_ARG indicates that an actual argument to a compiler-defined, standard function/procedure is expected. Since such functions or procedures have special requirements, the system treats them separately.
  • KK_TYPE indicates that the system expects a “type,” such as within a declaration statement.
  • KK_EXPR indicates that an expression is expected.
  • KK_STMT indicates that a statement is expected—that is, the system expects any valid identifier which can start a statement.
  • both a variable or procedure would be acceptable, for instance.
  • KK_CONST_EXPR indicates that a constant expression is expected. This is typically employed for declarations, such as for string declarations. A type expression can be applied here, such as for indicating that an integer expression is required.
  • KK_TOKEN and KK_TOKEN_CLASS indicate that the compiler is expecting a token or a particular type or class of token, respectively.
  • Borland DelphiTM using Object Pascal
  • KK_PROC_DECL indicates a procedure (function, method, or the like) declaration. In such a case, the system can display a list of all such procedures, functions, or methods which were forward declared.
  • the second data member is unit.
  • the unit data member points to a data structure (internal to the compiler) which represents the unit, as compiled by the compiler. This is followed by a scope count, scopeCnt, and a scope list, scopeList, for representing the available scopes at this particular point in the source code. For instance, when the user starts a statement within a procedure, all of the local symbols of the procedure represent one scope. If the procedure is in fact a class method, then all of the fields of “self” (i.e., of the “self” hidden parameter) would represent another scope. The symbols of the unit would represent still yet another scope. Still further, there are symbols of other units which the current unit employs giving rise to yet another scope.
  • the scope count and scope list keep track of which of these scopes are available at a given point in the source (where the cursor is positioned). This information is ultimately used by the GetValidSymbols method which “walks” the scope list for determining the valid symbols for the current source position under exam.
  • the next data member, proc is a pointer to a procedure symbol which is employed when the system is processing a call.
  • the formalArg data member is a symbol pointer which points to the formal argument which the cursor is currently positioned at. For a function having three arguments, for example, the cursor could be positioned at the second argument.
  • the next data member or field, formalInx is an integer data member providing an index into the formal arguments.
  • the validTypes data member is an internal encoding of the compiler which keeps track of which types will be valid at this point (in the source code). In the cases where the system expects an expression, such as an assignment into a variable, the pointer to validType references the valid type for the variable.
  • the next two data members keep track of the expected tokens and token class.
  • a token class represents a scenario where several tokens can be valid.
  • the next data member, pos represents the position where the user's cursor is positioned in the source code.
  • the pos data member is implemented as a record or structure of type KibitzPos which may be implemented as follows. typedef struct ⁇ short fileIndex; short lineNo; // up to here idential to SourcePos short columnNo; // 1-based ⁇ KibitzPos;
  • the KibitzPos structure specifies a file (via an index), a line number, and a column number.
  • KibitzResult The next data member of KibitzResult is partialIden, which is employed for instances where the system has found a partial identifier.
  • the IDE will employ the information to perform an incremental search of available identifiers for attempting to find a match.
  • the KibitzResult structure includes a parameter position array, paramPos. This indicates the source position of the actual parameter for a function call.
  • the UnitNameFileNamePair data structure may be constructed as follows. typedef struct ⁇ uchar *unitName; char *unitFileName; ⁇ UnitNameFileNamePair;
  • This data structure is employed to keep track of unit names (e.g., simple Pascal names in Borland DelphiTM) and filenames (i.e., qualified by file directory and drive).
  • the compiler employs this data structure for determining a filename (i.e., the name of a file on disk) which corresponds to a unit name encountered in the source code.
  • the system defines the following flags which are used when a list of identifiers are reported back from the compiler to the IDE, for keeping track of whether a particular identifier itself is acceptable or whether the identifier itself only has a field which would be acceptable.
  • I is an integer variable and, thus, the statement can be completed by assigning the integer j as follows.
  • the statement can be completed by assigning an integer member of r (which itself is a variable of type TRect).
  • the IDE displays a list showing j normally and showing r with an ellipsis appended to it. This informs the user that r is acceptable but that the user has to still complete the entry with a dot (for accessing a field of r).
  • the GF_SCOPE would be set for r, indicating that it is acceptable but only because it has a field which is acceptable.
  • TK_IF i.e., identifier
  • TK_IDENT i.e., identifier
  • TK_KIBITZ special token
  • Exemplary method steps for performing this operation are as follows. /* Lexical analyser (scanner) delivers special token (TK_KTBITZ) at cursor position. The following method checks against stop line once per line, then sets special marker character in the line buffer.
  • the implementation comprises a “switch” statement over the next input character (i.e., from the source code stream).
  • the first case of interest is a line feed character.
  • the system at this case arm checks whether the current line number and filename correspond to that specified for the “stop” source (i.e., the source file where the user's cursor is positioned). As shown above, the line number is examined first so that the system can perform an integer comparison first, before a more expensive string comparison is undertaken. In the event that the line number and source filename indicate that the current input character corresponds to the cursor position, the system proceeds to mark the current line (maintained in a line buffer) with a special character, such as zero (i.e., NULL).
  • NULL special character
  • the system After the line is marked, the system “switches” on subsequent input characters until it encounters the value of zero (i.e., the special character inserted above to mark the stop position). The system at this point confirms that this is the position of interest by comparing the current column (in the source stream) with the column from the IDE. If the current column is equal to the column where the system wishes to stop, then the system inserts the special token—TK_KIBITZ—that tells the parser to stop at this point.
  • This method step of the scanner illustrates the transformation from a stop source, a stop line, and a stop column to a special token which instructs the parser where to stop.
  • the parser in turn compiles the source normally, including the declaration, until it encounters the special token. During this compilation, however, the parser will skip compilation of function bodies unless a particular function body contains the special token.
  • code completion in accordance with the present invention, the code contained within function bodies (apart from a current function which the user cursor might be positioned within) is not relevant. Since function bodies are skipped, no code is generated for those function bodies and the background compilation for code completion, therefore, occurs quickly.
  • the parser During processing, the parser maintains a stack of “kibitz” contexts. When the parser encounters a TK_KIBITZ token, it returns the context information back to the IDE. This is illustrated, for instance, by the following snippet.
  • variable : FooFunction( a, b,
  • An exemplary method for skipping the body of functions, using the kibitz token may be constructed as follows. /* Parser parses declarations fully, tries to skip function bodies, suppresses code generation. Routine to skip keeps track of nesting of structured statements, returns TRUE if the function body was skipped, FALSE otherwise.
  • the SkipBody method is invoked when the parser detects the beginning of a function body.
  • the method operates as follows. At the outset, the method remembers the current position, as storing it to startPos. Next, the method initializes a local variable, nestLevel, which serves to keep track of the nesting of structured statements. This is followed by a “while” loop which switches on token. In operation, the loop reads a token and then switches to a particular case arm based on token type. If the token type marks the beginning of a structured statement, the nestLevel countered is incremented. Conversely, if this token marks the end of a structured statement, nestLevel is decremented.
  • the method If the method encounters the special “kibitz” token, it returns to the beginning of the function by invoking ScannerSeek. Thereafter, the method returns “false” as the method has not been skipped. After completing execution of the switch statement, the method can determine whether it has found the final end of the function.
  • the basic approach is to go through the function as fast as possible (i.e., look through the tokens of the function as fast as possible), keeping track of nesting. If the end is encountered, the method can return true. If, on the other hand, a special “kibitz” token is encountered, the method repositions the parser (scanner) to the beginning of the function and returns “false.” In such a case, the parser will resume parsing forward as more detail about the function is required, since it is the function where the user's cursor is positioned.
  • Scopes that are accessible include “with” scopes (i.e., Pascal with statements), local symbols of any current procedures the parser is within, the symbols of the current unit (i.e., symbols global to the unit), and symbols of any units employed by the current unit (i.e., imported symbols).
  • the parser In order to handle method function calls directly, the parser maintains a stack of contexts which it is in. Just as the computer system stack must maintain a separate copy of local variables for each function invocation, the parser mirrors the approach so that it can keep track of the appropriate context.
  • the parser During parsing of a function call, for instance, when the parser encounters the left paren (i.e., opening parenthesis), the parser “pushes” onto its stack information indicating it is now parsing within the context of a function argument.
  • the parser When the parser has parsed the right paren (i.e., closing parenthesis), the parser “pops” the previously-pushed stack entry, for indicating that it is no longer within the context of function argument.
  • the context information would indicate at this point that the parser is popping back into the context of an expression.
  • the stack would contain entries for different argument contexts.
  • helper functions include the following (shown in function prototype form). /* In the case of KK_ARGUMENT or KK_STD_ARG, we are in a call to a user-declared or standard function, respectively.
  • the IDE uses the information in the result record and the following compiler entry points to build a parameter list to show to the user: */ int EXPORT GetSymbols (Symbol *root, SQ_Flags flags, Symbol **symList); /* used to get the parameters of a procedure/function/method */ GSF_Flags EXPORT GetSymbolFlags(Symbol *sym); /* used to get information about parameter and function symbols ⁇ / void EXPORT GetSymbolText(Symbol *sym, String text, ST_Flags flags); /* used to get names of symbols */ Symbol *EXPORT GetResultType(Symbol *sym); /* used to get the result type of a function */
  • the GetSymbols method is employed to get the parameters (symbols) of a called procedure, function, or method.
  • the root parameter is the routine being called; this is obtained from the result record.
  • the SQ_Flags parameter is employed to indicate whether the GetSymbols routine should return parameter information.
  • the symList parameter is a pointer to a result vector, which is employed for returning the parameters.
  • the GetSymbolFlags method is employed for getting additional information about parameter and function symbols, such as whether a parameter is a var or const parameter.
  • the routine can also be invoked on the procedure or function symbol itself for determining whether the symbol is a procedure, function, or method.
  • the GetSymbolText method is employed to get the actual text for a symbol, such as the actual name of a parameter.
  • the routine can also be used (with a particular flag setting) to get the name of the type of symbol. This information is used by the IDE to construct the parameter list for display to users.
  • the GetResultType routine is employed to get the result type of a function (i.e., the symbol that represents the result type of a function). After obtaining this symbol, the IDE in turn can invoke GetSymbolText for getting the text or name for the symbol.
  • the GetValidSymbols method is employed to get a list of valid symbols.
  • the IDE will usually invoke the method twice; first, to get a count of valid symbols, and second to actually get the result (of symbols).
  • the IDE can request a list of valid symbols via GetValidSymbols.
  • the usual procedure is to call GetValidSymbols with a result and flags parameter of 0 in which case only the count of valid symbols will be reported. After allocating big enough buffers, the system can pass the information to a second call with otherwise identical parameters.
  • GetValidSymbols typically invokes logic steps that traverse or walk all accessible scopes, applying to each symbol found in a “validation” function that checks whether the symbol would be accessible.
  • the routine invokes additional logic steps for examining each symbol for determining whether it is valid in the current context. If the symbol would be acceptable, it is reported to the IDE; if not, on the other hand, it is skipped.
  • the function first checks whether the symbol is a constant; if not, the symbol is immediately rejected. If the symbol is a constant, the function then determines whether it is assignment compatible with the type which is expected. The function returns “true” if the symbol is assignment compatible; otherwise, the function returns “false.”
  • Routines are provided for walking different kinds of scopes.
  • the method is invoked with the following parameters: a list of symbols (i.e., local symbols of the unit), a result record, a result vector, a flags parameter, a maximum count, and a pointer to a validation procedure.
  • the method traverses the symbol list, keeping track of the count of acceptable symbols.
  • the method determines whether it already has a sufficient number of symbols; if so, the method is done and may return. Otherwise, the method enters the “for” loop.
  • the method skips compiler-generated names; these will have names which are not legal for the underlying computer language (e.g., Pascal).
  • the method skips objects which are not at the global declaration level, such as local functions. If the symbol passes these tests, the method applies a validation function to it. If the validation function returns “true,” then the symbol is flagged as a normal symbol. Even if the symbol is not accepted by the validation function, it might nevertheless have a field which is acceptable (e.g., a member field of a structure). If the symbol (or a field of a symbol) is acceptable, it is added to the result array; corresponding flags for the symbol are set in the flags array. As an optimization, the IDE performs a CompilerKibitz call in the background at certain times, so used units, source files, and the like get loaded into the compiler or the operating system's disk cache.
  • a particular difficulty is encountered when determining whether a structure has an acceptable field. If precautions are not taken, the system might be trapped in a “cycle.”
  • a TForm data structure A TForm structure often includes components which are themselves of type TForm. Accordingly, extra care is required to avoid infinite incursion when traversing or walking a field list of a structure.
  • the system adopts the following approach. For each type examined, the system keeps track of the “state” of the type—that is, what the system knows about the type.
  • four states are defined as follows. // states a type can be in - all types start out as TS_UNKNOWN typedef enum ⁇ TS_UNKNOWN, // don't know whether this type is acceptable TS_FALSE, // know this type is not acceptable TS_TRUE, // know this type is acceptable TS_ACTIVE, // working to find out whether this type is acceptable ⁇ TypeState;
  • the first state, TS_UNKNOWN indicates that the system does not know whether the type is acceptable.
  • the second state, TS_FALSE indicates that the system knows that the type is not acceptable.
  • an assignment statement which assigns a floating point variable to an integer variable will not be acceptable and, thus, would be identified as TS_FALSE.
  • TS_TRUE the third state, indicates that the type is acceptable.
  • TS_ACTIVE indicates a state where the system is working to determine whether the type is acceptable.
  • a method, SymbolHasScope, for determining whether a symbol has an acceptable type for a given context may be constructed as follows. // find out whether a symbol with acceptable type can be reached // from type static int SymbolHasScope(Type *type, const KibitzResult *k, ValidSymbolProc *v) ⁇ Type *type; switch (type ⁇ >g.form) ⁇ case TF_CLASSREF: // only these types have scopes at all case TF_INSTANCE: case TF_RECORD: case TF_OBJECT: switch (GetTypeState(type)) ⁇ case TS_TRUE: return TRUE; // know the answer is TRUE case TS_FALSE: return FALSE; // know the answer is FALSE case TS_ACTIVE: return FALSE; // cut off recursion here case TS_UNKNOWN: // need to do some work here SetTypeState(type, TS_ACTIVE); if (WalkFieldScope(type,
  • the method is implemented as a large case or “switch” statement which serves to determine whether the type has any scope at all (i.e., has fields). If it does have a scope, the method proceeds to retrieve the state of the type. This state is tested by a nested “switch” statement. If the state is known to be true (TS_TRUE) or false (TS_FALSE), the method can return “true” or “false,” respectively. If, on the other hand, the state is “active” (TS_ACTIVE), the method returns “false,” for presenting incursion or reentry.
  • switch a large case or “switch” statement which serves to determine whether the type has any scope at all (i.e., has fields). If it does have a scope, the method proceeds to retrieve the state of the type. This state is tested by a nested “switch” statement. If the state is known to be true (TS_TRUE) or false (TS_FALSE), the method can return “true” or “
  • the method proceeds to determine the type as follows. First, if type state is set to “active” (TS_ACTIVE), for indicating that the system is in the process of determining the state. Next, the method traverses or walks the list of symbols for this scope, by invoking a WalkFieldScope helper routine. This call will determine whether the structure has a field which is accepted by the validation function. If it is acceptable, WalkFieldScope will return “true,” whereupon the state of the type can be set to “true” (TS_TRUE). Otherwise, the state is set to “false” (TS_FALSE). Also, if the type does not have a scope, the SymbolHasScope method returns “false.”
  • the system can index into the table for determining whether the type has already been processed before.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

A visual development system having an interface which assists a user with input of source code expressions and statements during creation of a computer program is described. The interface includes an Integrated Development Environment (IDE) interface having a code editor with “Code Completion” and “Code Parameter” features for displaying context sensitive pop-up windows within a source code file. Code Completion is implemented at the user interface level by displaying a Code Completion dialog box after the user enters a record or class name followed by a period. For a class, the dialog lists the properties, methods and events appropriate to the class. For a record or structure, the dialog lists the data members of the record. To complete entry of the expression, the user need only select an item from the dialog list, whereupon the system automatically enters the selected item in the code. Code completion also operates during input of assignment statements. When the user enters an assignment statement for a variable and presses a hot key (e.g., <ctrl><space_bar>), a list of arguments valid for the variable is displayed. Here, the user can simply select an argument to be entered in the code. Similarly, the user can bring up a list of arguments when typing a procedure, function, or method call and needs to add an argument. In this manner, the user can view the required arguments for a method as he or she enters a method, function, or procedure call.

Description

    COPYRIGHT NOTICE
  • A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. [0001]
  • BACKGROUND OF THE INVENTION
  • The present invention relates generally to system and methods for creating software programs. More particularly, the present invention relates to a visual development system and methods for assisting users with the task of creating source code during development of software programs. [0002]
  • Before a digital computer may accomplish a desired task, it must receive an appropriate set of instructions. Executed by the computer's microprocessor, these instructions, collectively referred to as a “computer program,” direct the operation of the computer. Expectedly, the computer must understand the instructions which it receives before it may undertake the specified activity. [0003]
  • Owing to their digital nature, computers essentially only understand “machine code,” i.e., the low-level, minute instructions for performing specific tasks—the sequence of ones and zeros that are interpreted as specific instructions by the computer's microprocessor. Since machine language or machine code is the only language computers actually understand, all other programming languages represent ways of structuring human language so that humans can get computers to perform specific tasks. [0004]
  • While it is possible for humans to compose meaningful programs in machine code, practically all software development today employs one or more of the available programming languages. The most widely used programming languages are the “high-level” languages, such as C or Pascal. These languages allow data structures and algorithms to be expressed in a style of writing which is easily read and understood by fellow programmers. [0005]
  • A program called a “compiler” translates these instructions into the requisite machine language. In the context of this translation, the program written in the high-level language is called the “source code” or source program. The ultimate output of the compiler is an intermediate module or “object module,” which includes instructions for execution by a target processor. In the context of Borland's Turbo Pascal and Object Pascal, the intermediate module is a Pascal “unit” (e.g., .TPU file). Although an object module includes code for instructing the operation of a computer, the object module itself is not usually in a form which may be directly executed by a computer. Instead, it must undergo a “linking” operation before the final executable program is created. [0006]
  • Linking may be thought of as the general process of combining or linking together one or more compiled object modules or units to create an executable program. This task usually falls to a program called a “linker.” In typical operation, a linker receives, either from the user or from an integrated compiler, a list of modules desired to be included in the link operation. The linker scans the object modules from the object and library files specified. After resolving interconnecting references as needed, the linker constructs an executable image by organizing the object code from the modules of the program in a format understood by the operating system program loader. The end result of linking is executable code (typically an .EXE file) which, after testing and quality assurance, is passed to the user with appropriate installation and usage instructions. [0007]
  • “Visual” development environments, such as Borland's Delphi™, Microsoft® Visual Basic, and Powersoft's PowerBuilder®, are rapidly becoming preferred development tools for quickly creating production applications. Such environments are characterized by an Integrated Development Environment (IDE) providing a form designer or painter, a property getter/setter manager (“inspector”), a project manager, a tool palette (with objects which the user can drag and drop on forms), an editor, a compiler, and a linker. In general operation, the user “paints” objects on one or more forms, using the form painter. Attributes and properties of the objects on the forms can be modified using the property manager or inspector. In conjunction with this operation, the user attaches or associates program code with particular objects on screen (e.g., button object); the editor is used to edit program code which has been attached to particular objects. [0008]
  • At various points during this development process, the user “compiles” the project into a program which is executable on a target platform. For Microsoft Visual Basic and Powersoft PowerBuilder, programs are “pseudo-compiled” into p-code (“[0009] pseudo” codes) modules. Each p-code module comprises byte codes which, for execution of the program, are interpreted at runtime by a runtime interpreter. Runtime interpreters themselves are usually large programs (e.g., VBRUNxx.DLL for Visual Basic) which must be distributed with the programs in order for them to run. In the instance of Delphi™, on the other hand, programs are compiled and linked into true machine code, thus yielding standalone executable programs; no runtime interpreter is needed.
  • To a large extent, the progress of a particular software development project is tied to the progress of the task of writing source code or “coding.” It is highly desirable, therefore, to facilitate this task. Although there has been some effort to address this task by increasing code reuse, one nevertheless finds that core functionality of a program must often at some point still be coded by hand. Since software components are often constructed from complex classes comprising numerous class members and methods, the developer user typically spends a lot of time looking up help information (e.g., class definitions) for such components before he or she can use such a component. Thus even with the high degree of reuse provided by component-based visual development environments, developers still must spend substantial amounts of time coding functionality to suit a new project, and of that, developers spend substantial amounts of time referencing on-line help information for understanding how to use numerous components. [0010]
  • What is needed is a system providing methods for assisting users with inputting source code—that is, the fundamental task of writing the individual code statements and expressions which comprise a software program. Such a system should free developers from having to repeatedly reference on-line reference or help materials. The present invention fulfills this and other needs. [0011]
  • SUMMARY OF THE INVENTION
  • A visual development system of the present invention includes a compiler, a linker, and an interface. Through the interface, the developer user “paints” forms with objects and supplies source listings (i.e., enters source code) for the compiler. From the source code or listings, once compiled by the compiler and linked with other run-time or support files by the linker, the system generates a computer program, which may be executed by a target processor(s). [0012]
  • The interface includes an Integrated Development Environment (IDE) interface having a code editor. The IDE provides “Code Insight” functionality to the code editor for displaying context sensitive pop-up windows within a source code file. Of particular interest to the present invention are Code Completion and Code Parameter features of Code Insight. [0013]
  • Code Completion is implemented at the user interface level by displaying a Code Completion dialog box after the user enters a record or class name followed by a period. For a class, the dialog lists the properties, methods and events appropriate to the class. For a record or structure, the dialog lists the data members of the record. To complete entry of the expression, the user need only select an item from the dialog list, whereupon the system automatically enters the selected item in the code. [0014]
  • Code Completion also operates during input of assignment statements. When the user enters an assignment statement for a variable and presses a hot key (e.g., <ctrl><space_bar>), a list of arguments valid for the variable is displayed. Here, the user can simply select an argument to be entered in the code. Additionally, the user can select a type which itself is not appropriate (e.g., record type) but nevertheless includes a nested data member having a type which is valid. In an integer assignment statement, for example, the user can select a type variable SMTP1, a structure of type TSMTP which contains an integer data member. Upon the user entering the dot operator after SMTP1, the system displays a list of valid data members for SMTP1, that is, the data members which are assignment compatible for the integer assignment. Now, the user can simply select a valid member to be entered in the code. [0015]
  • Similarly, the user can bring up a list of arguments when typing a procedure, function, or method call and needs to add an argument. Consider, for instance, a scenario where the user has begun entry of a SendFile method call. The SendFile method itself is defined elsewhere in the code as follows. [0016]
  • procedure SendFile (Filename: string); [0017]
  • Upon the user entering the opening parenthesis, the system automatically displays parameter information for the call. In this manner, the user can view the required arguments for a method as he or she enters a method, function, or procedure call.[0018]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1A is a block diagram of a computer system in which the present invention may be embodied. [0019]
  • FIG. 1B is a block diagram of a software system provided for directing the operation of the computer system of FIG. 1A. [0020]
  • FIG. 2 is a block diagram of a visual development system of the present invention which includes a compiler, a linker, and an interface. [0021]
  • FIG. 3 is a bitmap screen shot illustrating a preferred interface of an application development environment in which the present invention is embodied. [0022]
  • FIG. 4 is a bitmap screen shot illustrating an Environment Options dialog box, for configuring operation of “Code Insight” features of the system. [0023]
  • FIGS. [0024] 5A-E are bitmap screen shots illustrating a “Code Completion” user interface methodology of the present invention.
  • FIG. 5F is a bitmap screen shot illustrating a “Code Parameters” user interface methodology of the present invention. [0025]
  • DETAILED DESCRIPTION OF A PREFERRED EMBODIMENT
  • The following description will focus on a preferred embodiment of the present invention (and certain alternatives) embodied in a visual development environment running on an Intel 80×86-compatible computer operating under an event-driven operating system, such as the Microsoft® Windows NT or 9x environment. The present invention, however, is not limited to any particular application or any particular environment. Instead, those skilled in the art will find that the system and methods of the present invention may be advantageously applied to a variety of platforms and environments, whether command-line or GUI based, including MS-DOS, Macintosh, UNIX, NextStep, and the like. Therefore, the description of the exemplary embodiments which follows is for purposes of illustration and not limitation. [0026]
  • General Architecture [0027]
  • A. System Hardware [0028]
  • The present invention may be embodied on a computer system such as the [0029] system 100 of FIG. 1A, which includes a central processor 101, a main memory 102, an input/output controller 103, a keyboard 104, a pointing device 105 (e.g., mouse, track ball, pen device, or the like), a display device 106, and a mass storage 107 (e.g., removable disk, floppy disk, fixed disk, optical disk (including CD-ROM), and the like). Additional input/output devices, such as a printing device 108, may be provided with the system 100 as desired. As shown, the various components of the system 100 communicate through a system bus 110 or similar architecture. In a preferred embodiment, the system 100 includes an IBM-compatible personal computer, available from a variety of vendors (including IBM of Armonk, N.Y.).
  • B. System Software [0030]
  • Illustrated in FIG. 1B, a [0031] computer software system 150 is provided for directing the operation of the computer system 100. Software system 150, which is stored in system memory 102 and/or on disk storage 107, includes a kernel or operating system (OS) 160 and a windows shell or interface 180. One or more application programs, such as application programs 170 or windows application programs 190, may be “loaded” (i.e., transferred from storage 107 into memory 102) for execution by the system 100. OS 160 and shell 180, as well as application software 170, 190, include an interface for receiving user commands and data and displaying results and other useful information. Software system 150 also includes a visual development system 200 of the present invention for developing system and application programs. As shown, the development system 200 includes components which interface with the system 100 through windows shell 180, as well as components which interface directly through OS 160.
  • In a preferred embodiment, [0032] operating system 160 includes MS-DOS and shell 180 includes Microsoft® Windows, both of which are available from Microsoft Corporation of Redmond, Wash. Alternatively, components 160 and 180 can be provided by Microsoft Windows 9x/Windows NT. Those skilled in the art will appreciate that the system may be implemented in other platforms, including Macintosh, UNIX, and the like. Application software 170, 190 can be any one of a variety of software applications, such as word processing, database, spreadsheet, text editors, and the like, including those created by the development system 200, which is now described in greater detail.
  • C. Development System [0033]
  • Shown in further detail in FIG. 2, the [0034] visual development system 200 of the present invention includes a compiler 220, a linker 250, an interface 210, and (optional) debugger 270. Through the interface, the developer user “paints” forms 202 with objects and supplies source listings 201 to the compiler 220. Interface 210 includes both command-line driven 213 and Integrated Development Environment (IDE) 211 interfaces, the former accepting user commands through command-line parameters, the latter providing menu equivalents thereof. From the source code or listings 201, forms 202, and headers/includes files 230, the compiler 220 “compiles” or generates object module(s) or “units” 203. In turn, linker 250 “links” or combines the units 203 with runtime libraries 260 (e.g., standard runtime library functions) to generate program(s) 204, which may be executed by a target processor (e.g., processor 101 of FIG. 1A). The runtime libraries 260 include previously-compiled standard routines, such as graphics, I/O routines, startup code, math libraries and the like.
  • A description of the general operation of [0035] development system 200 is provided in the manuals accompanying Delphi™: Users Guide (Part No. HDA1330WW21770), and Developer's Guide (Part No. HDA1330WW21772). Further description can be found in Object Pascal Language Guide (Part No. HDA1330WW21771) and Visual Component Library Reference, Volumes 1 and 2 (Part Nos. HDA1330WW21773, HDA1330WW21774). The disclosures of each of the foregoing (which are available directly from Borland International of Scotts Valley, Calif.) are hereby incorporated by reference. Description of the use of “method pointers” in the system, for implementing event handling, can be found in the commonly-owned, co-pending application entitled Development Systems with Methods for Type-Safe Delegation of Object Events to Event Handlers of Other Objects, U.S. patent application Ser. No. 08/594,928, filed Jan. 31, 1996, the disclosure of which is hereby incorporated by reference.
  • Operation (i.e., “compilation”) by a compiler, such as [0036] compiler 220, is generally driven by its two main components: a front end and a back end. The “front end” of the compiler parses the source program and builds a parse tree—a well known tree data structure representing parsed source code. The “back end” traverses the tree and generates code (if necessary) for each node of the tree, in a post-order fashion. For an introduction to the general construction and operation of compilers, see Fischer et al., Crafting a Compiler with C, Benjamin/Cummings Publishing Company, Inc., 1991, the disclosure of which is hereby incorporated by reference. Further description of the back end of the compiler is provided in commonly-owned U.S. Pat. No. 5,481,708, issued Jan. 2, 1996. Description of a linker, such as Borland's TurboLinker, is provided in commonly-owned U.S. Pat. No. 5,408,665, issued Apr. 18, 1995. The disclosures of each of the foregoing patents are hereby incorporated by reference.
  • D. General Development Interface [0037]
  • The present invention is embodied in Delphi™, a component-based, rapid application development (RAD) environment available from Borland International of Scotts Valley, Calif. FIG. 3 illustrates an [0038] application development environment 360, which is provided by Delphi. Many of the traditional requirements of programming, particularly for Windows applications, are handled for the programmer automatically by Delphi.
  • As shown, the [0039] programming environment 360 comprises a main window 361, a form 371, a code editor window 381, and an object manager or “inspector” window 391. The main window 361 itself comprises main menu 362, tool bar buttons 363, and component palette 364. Main menu 362 lists user-selectable commands, in a conventional manner. For instance, the main menu invokes File, Edit, View submenus, and the like. Each submenu lists particular choices which the user can select. Working in conjunction with the main menu, toolbar 363 provides the user with shortcuts to the most common commands from the main menu. The toolbar is configurable by the user for including icons for most of the menu commands.
  • Forms, such as [0040] form 371, are the focal point of nearly every application which one develops in the environment. In typical operation, the user employs the form like a canvas, placing and arranging “components” on it to design the parts of one's user interface. The components themselves are the basic building blocks of applications developed within the environment. Available components appear on the component palette 364, which is displayed as part of the main window 361. The form can be thought of as a component that contains other components. One form serves as the main form for the application; its components interact with other forms and their components to create the interface for an application under development. In this manner, the main form serves as the main interface for an application, while other forms typically serve as dialog boxes, data entry screens, and the like.
  • During “design” mode operation of the system, the user can change the properties of the form, including resizing the form and moving it anywhere on screen. The form itself includes standard features such as a control menu, minimize and maximize buttons, title bar, and resizeable borders. The user can change these features, as well as other “properties” of the form, by using the [0041] object inspector window 391 to edit the form during design time. Thus, properties define a component's appearance and behavior.
  • Components are the elements which a user employs to build his or her applications. They include all of the visible parts of an application, such as dialog boxes and buttons, as well as those which are not visible while the application is running (e.g., system timers). In the [0042] programming environment 360, components are grouped functionally on different pages of the component palette 364. Each functional group is identified by a tab member, which includes a label indicating the particular nature of the group. For example, components that represent the Microsoft Windows common dialog boxes are grouped on the “Dialogs” page of the palette. The palette can incorporate user-created custom controls, which the user installs onto the palette. Additionally, the user can install third-party components.
  • The [0043] object inspector window 391 enables the user to easily customize the way a component appears and behaves in the application under development. The inspector 391 comprises an object selector field 392, a properties page 393, and an events page 394. The object selector 392 shows the name and type of the currently selected object, such as “Form1,” as shown. The properties page 391 lists the attributes of a component placed on a form (or the form itself) which can be customized. The events page, on the other hand, lists “event handlers” for a particular component. Event handlers are specialized procedures which may include user-provided program code.
  • [0044] Code editor 381 is a full-featured editor that provides access to all the code in a given application project. In addition to its basic editing functionality, the code editor 381 provides color syntax highlighting, for assisting the user with entering syntactically-correct code. When a project is first opened, the system automatically generates a page in the code editor for a default unit of source code; in the Object Pascal preferred embodiment, the default unit is named Unit1.
  • The following description will focus on those features of the [0045] development system 200 which are helpful for understanding methods of the present invention for implementing code completion in a visual development environment.
  • Methods for Assisting a User with Input of Source Code [0046]
  • A. User Interface Operation [0047]
  • The IDE provides “Code Insight” features to the code editor for displaying context sensitive pop-up windows within a source code file. By default these features are enabled. To disable/re-enable and configure the features, the user invokes (selects Tools|Environment) an Environment [0048] Options dialog box 400, as shown in FIG. 4.
  • As shown, Code Insight provides several features, which generally function as follows. [0049]
  • Feature Use and Functionality [0050]
    Code Enter a class name followed by a period in a code file.
    Completion The list of properties, methods and events appropriate
    to the class will be displayed. The user can then select
    the item to be entered in the code. Enter an assignment
    statement and press <ctrl> <spacebar >. A list of
    arguments that are valid for the variable is displayed.
    Select an argument to be entered in the code.
    Code View the syntax of a method as the user enters it into
    Parameters the code.
    Tooltip When the compiler is stopped during debug, the user
    Expression can view the value of a variable by pointing to it with
    Evaluation the cursor.
    Code Set the duration of the pause before a Code Insight
    Completion dialog box is displayed.
    Delay
    Code Available templates are listed by name with a short
    Templates description. Click a template name to display the code
    that will be entered in the file when that template is
    selected. Code displayed in the code window can be
    edited.
    Templates The Templates box includes a name and short
    description for each template.
    Code The code box displays the code that will be inserted
    into a file when the template is selected. The code
    displayed can be edited.
  • Of particular interest herein are the Code Completion and Code Parameter features. [0051]
  • Code Completion is implemented at the user interface level by displaying a Code Completion dialog box after the user enters a record or class name followed by a period. For a class, the dialog lists the properties, methods and events appropriate to the class. For a record or structure, the dialog lists the data members of the record. As shown in FIG. 5A, for instance, at [0052] 501, the user has begun entry of MainForm, a class of type TMainForm. Upon the user's input of the dot operator, the system automatically displays list dialog 503 next to the current cursor position. Dialog 503 lists the properties, methods and events appropriate to the class. To complete entry of the expression, the user need only select an item from the dialog list, whereupon the system automatically enters the selected item in the code.
  • In a like manner, FIG. 5B illustrates Code Completion for a rectangle structure, TRect. Here, the user has declared a variable, myRect, of type TRect. The TRect type defines a rectangle as follows. [0053]
    TRect = record
      case Integer of
       0: (Left, Top, Right, Bottom: Integer);
       1: (TopLeft, BottomRight: TPoint);
    end;
  • where TPoint is itself a record defined as follows. [0054]
    TPoint =record
      X: Longint;
      Y: Longint;
    end;
  • In FIG. 5B, upon the user's input of the dot operator, the system automatically displays [0055] list dialog 513 next to the current cursor position 515. Dialog 513 lists the data members appropriate to the record (structure). Again, the user need only select an item from the dialog list to complete entry of the expression, whereupon the system automatically enters the selected item in the code.
  • Code Completion also operates during input of assignment statements. As illustrated in FIG. 5C, when the user enters an assignment statement for integer variable J and presses a hot key (e.g., <ctrl><space_bar>) at [0056] 525, a list of arguments 523 valid for the variable is displayed. Here, the user can simply select an argument to be entered in the code. As shown in FIGS. 5D-E, the user can select a type which itself is not appropriate (e.g., record type) but nevertheless includes a nested data member having a type which is valid. In FIG. 5D, the user selects type variable SMTP1, a structure of type TSMTP, at 531. Upon the user entering the dot operator after SMTP1, the system displays a list of the data members for SMTP1, as shown at 541 in FIG. 5E. Now, the user can simply select a valid argument to be entered in the code.
  • In a like manner, the user can bring up a list of arguments when typing a procedure, function, or method call and needs to add an argument. In FIG. 5F, for instance, the user has begun entry of a SendFile method call. The SendFile method itself is defined elsewhere in the code as follows. [0057]
  • procedure SendFile (Filename: string); [0058]
  • Upon the user entering the opening parenthesis, the system automatically displays parameter information for the call. The syntax for the argument(s) to the method is displayed, as shown at [0059] 551 in FIG. 5F. In this manner, the user can view the required arguments for a method as he or she enters a method, function, or procedure call.
  • B. Overview of Internal Operation [0060]
  • During basic operation, the Integrated Development Environment or IDE invokes the compiler for determining an appropriate context for the source code, based on where the screen cursor is currently positioned within the code. The compiler, in response, compiles the source code up to the current point (of the user's cursor) and then returns a result back to the IDE which describes the current context within the source code. The IDE receives two core pieces of information. If the user has positioned the cursor within the parameter list of a function call, the IDE will receive information from the compiler reporting the name of the function together with the name and the types of the function's formal parameters. With this information, the IDE can display a pop-up menu providing an argument list for the current function, thus eliminating the need to invoke a help system for looking up the function. [0061]
  • The second type of information which the IDE receives relates to symbols or identifiers. If a symbol or identifier would be valid at the current cursor position, the compiler will identify the condition and prepare a list of the valid identifier, together with other valid identifiers, for the cursor position. The IDE, upon receiving this information, can display the list to the user. The user, in turn, selects the desired symbol from the list, for instance using incremental searching technique. [0062]
  • As an example of this feature, consider for instance a variable name followed by the dot operator (e.g., MyRecord.). Here, a member name is expected (e.g., MyRecord.Foo). Accordingly, the compiler will compute and report the members of the structure (of the variable) which meet any conditions or constraints of the code at the cursor position. If an integer type is expected, for instance, the compiler here would only report integer members. The determination of an appropriate type is based on legal constructs which can be created at the then-current cursor position. In an expression comprising a floating-point assignment, both floating-point and integer data types are valid. Accordingly, both floating-point and integer data members would be displayed for user selection. [0063]
  • The approach also takes into account nested members. Continuing with the example of an integer data type, one of the data members might be a rectangle structure (e.g., a structure of type RECT) which, in turn, comprises integer data members (i.e., nested data members). In this situation, the system displays the rectangle (nested structure) member since there is a legal way to employ integer data members of that structure. For this example, the user will ultimately need to type an additional dot (i.e., dot operator) to complete selection of the final data member. [0064]
  • C. Core Internal Methods [0065]
  • The core functionality is provided as follows. A first method, CompilerKibitz, is invoked by the IDE to trigger compilation. In invoking the method, the IDE passes in the filename (i.e., source code filename), together with the current line number and column position where the cursor is located. In an exemplary embodiment, the method may be constructed as follows (using the C programming language). [0066]
    void EXPORT CompiierKibitz(CompOptions *options,
    UnitNameFileNamePair *unitpileNamePairs,
    const char *stopSrc, int stopLine, int stopCol,
    char makeFlag, KibitzResult *resu1t)
    {
      // ...
      /* Parse source up to stopSrc, stopLine and stopCol and report the
       result. source and stopSrc will be the same except for
       include files. */
      /*
       Two main pieces of information:
    - Are we currently in a call to a user-defined or standard procedure,
     function, or method? If so, what's the name of the procedure and the
     parameter list. What are the positions of the actual parameters so far?
     (This information is recorded directly in the result record in part;
     however, the IDE has to call back for more information.)
    - If a symbol was expected at the cursor position, what is the list of
     symbols that would make sense at this point? For this information,
     a GetValidSymbols method or function is invoked.
     */
     // ...
    }
  • As shown, the method is invoked with seven parameters. The first parameter, a pointer-to compiler options (CompOptions), is a structure which specifies a “source to compile”; this might be different than the source which the IDE desires the compiler to stop. The file can be specified in a conventional manner, such as by filename (text string). The second parameter is a pointer-to unit/file name pairs. This, in essence, is a table of unit name/file name associations. This is passed to the compiler since the IDE might have some knowledge about where particular files are located (on disk) for corresponding “units” which are included in the user's project. In a Borland Delphi™ program, for instance, a “uses” statement sets forth particular Pascal “units” which are employed. Since the IDE stores directory information for various files (e.g., library files), the IDE can pass such information on to the compiler via the second parameter. [0067]
  • The next three parameters specify the user's source position. The stopSrc parameter is a (pointer to) character string specifying the “stop source”—that is, the current source file where the user has stopped (i.e., stopped data entry long enough to invoke the code completion methodology of the present invention). The stopLine parameter is an integer data member storing the particular line number where the user stopped in the source code. Similarly, stopCol is an integer data member specifying the particular column in the source code where the user stopped. [0068]
  • Finally, the makeFlag parameter serves as a flag indicating that the compiler should “make” the program (i.e., compiling all dependent source files for ensuring that the currently-compiled unit or project is up-to-date). This is set to “true” when the IDE has detected that other files have been added, thus requiring a “make.” If, on the other hand, other files have not been added, the flag is set to false and only the current source file is compiled. The last parameter is a pointer to a “Kibitz” result structure, KibitzResult. After completion of the method execution, the result structure still does not contain a list of valid symbols. Instead, the IDE invokes yet another method to fill out this particular information in the result structure. [0069]
  • To obtain the actual list of valid symbols, the IDE invokes a GetValidSymbols method. The method includes the following prototype. [0070]
    int EXPORT GetValidSymbols(const KibitzResult *k, Symbol **result,
    GF_Flags *flags, It maxCnt)
    {
    /* Find symbols valid in this context. Find up to maxCnt, and report
       how many were found. Write them into result, if result <> 0. */
    }
  • As shown, the method is invoked by passing in (by reference) the KibitzResult structure, as the method's first parameter. Together with the result structure, a vector of symbols is passed in as the second parameter and a vector of flags is passed in as the third parameter. Finally, a maximum count is specified in the fourth parameter, for indicating an upper limit on the number of symbols which should be returned (i.e., based on how many the IDE can realistically handle). During system operation, the IDE invokes the GetValidSymbols method twice. On the first invocation of the method, the IDE simply specifies NULL for the two vectors whereupon the method returns a count for the number of valid symbols. Based on this first call, the IDE will allocate sufficient memory and then invoke the GetValidSymbols method a second time, passing in appropriate pointers to the allocated vectors which are to store the symbol results. [0071]
  • D. KibitzResult Data Structure [0072]
  • The result data structure, KibitzResult, may be defined as follows. [0073]
    typedef struct
    {
      KibitzKind kind;
      Unit *unit;
      int scopeCnt;
      Symbol *scopeList [MAXSCOPES/*scopeCnt*/];
      Symbol *proc; // valid for KK_ARGUMENT and
    KK_STD_ARG
      Symbol *formalArg; // valid for KK_ARGUMENT
      int formalInx; // valid for KK_STD_ARG, 1-based
      unsigned validTypes; // valid for KK_TYPE,
    KK_STO_ARG
      Type *validType; // valid for KK_EXPR,
    KK_CONST_EXPR
      Token validToken; // valid for KK_TOKEN
      TokenClass validTokens; // valid for KK_TOKENS
      KibitzPos pos; // position of kibitz point
      char partialIden[64]; // may have found a partial identifier
      // KK ARGUMENT: where the parms were; [0] <=> ‘(’ | ‘[’ pos
      LineCol paramFos[MAXPARAMS+1];
    } KibitzResult;
  • As shown, the data structure is a record storing context information. Of the various data members of the record, the most important is KibitzKind, an numerated type indicating the “kind” of source code situations the system is currently in. The KibitzKind data type is itself defined as follows. [0074]
    typedef enum
    {
      KK_NONE,   // Not something we support
      KK_FIELD,   // A field of a record/object/class
      KK_ARGUMENT,   // An actual argument to a user-
      declared
      // function or procedure
      KK_STD_ARG, // An actual argument to a standard
      function/procedure
      KK_TYPE,   // A type
      KK_EXPR, // An expression
      KK_STMT,   // A stint
      KK_CONST_EXPR,   // A constant expression
      KK_TOKEN,   // A token
      KK_TOKEN_CLASS,//   A set of tokens
      KK_PROC_DECL,   // A procedure, function, method,
      constructor,
      // or destructor declaration
    KK_ERROR,   // Error case where we don't have
      enough info
      KibitzKinds,
    }  KibitzKind;
  • Two simple types are KK_NONE and KK_ERROR. KK_NONE indicates that the cursor is currently positioned at a location where code completion is not supported, such as positions within a user's comment. KK_ERROR, on the other hand, indicates an error condition; this occurs when the user's program contains so many errors that the system cannot correctly determine appropriate code completion. The KK_FIELD data type indicates a field of a record (structure), object, or class. For instance, if the user types Form1, a field member of Form1 is expected. KK_ARGUMENT indicates that the system expects an actual argument to a user-declared function or procedure. Here, further restrictions can be imposed. If the argument is a var argument, then the argument must be a variable. If, on the other hand, the argument is a value, then an expression is acceptable. [0075]
  • KK_STD_ARG indicates that an actual argument to a compiler-defined, standard function/procedure is expected. Since such functions or procedures have special requirements, the system treats them separately. KK_TYPE indicates that the system expects a “type,” such as within a declaration statement. KK_EXPR indicates that an expression is expected. KK_STMT indicates that a statement is expected—that is, the system expects any valid identifier which can start a statement. Here, both a variable or procedure would be acceptable, for instance. KK_CONST_EXPR indicates that a constant expression is expected. This is typically employed for declarations, such as for string declarations. A type expression can be applied here, such as for indicating that an integer expression is required. KK_TOKEN and KK_TOKEN_CLASS indicate that the compiler is expecting a token or a particular type or class of token, respectively. In Borland Delphi™ (using Object Pascal), for instance, when an “if” token followed by a boolean expression is encountered, the compiler then expects a “then” token. KK_PROC_DECL indicates a procedure (function, method, or the like) declaration. In such a case, the system can display a list of all such procedures, functions, or methods which were forward declared. [0076]
  • Returning to the description of the KibitzResult structure, the second data member is unit. The unit data member points to a data structure (internal to the compiler) which represents the unit, as compiled by the compiler. This is followed by a scope count, scopeCnt, and a scope list, scopeList, for representing the available scopes at this particular point in the source code. For instance, when the user starts a statement within a procedure, all of the local symbols of the procedure represent one scope. If the procedure is in fact a class method, then all of the fields of “self” (i.e., of the “self” hidden parameter) would represent another scope. The symbols of the unit would represent still yet another scope. Still further, there are symbols of other units which the current unit employs giving rise to yet another scope. The scope count and scope list keep track of which of these scopes are available at a given point in the source (where the cursor is positioned). This information is ultimately used by the GetValidSymbols method which “walks” the scope list for determining the valid symbols for the current source position under exam. [0077]
  • The next data member, proc, is a pointer to a procedure symbol which is employed when the system is processing a call. The formalArg data member is a symbol pointer which points to the formal argument which the cursor is currently positioned at. For a function having three arguments, for example, the cursor could be positioned at the second argument. The next data member or field, formalInx, is an integer data member providing an index into the formal arguments. The validTypes data member is an internal encoding of the compiler which keeps track of which types will be valid at this point (in the source code). In the cases where the system expects an expression, such as an assignment into a variable, the pointer to validType references the valid type for the variable. [0078]
  • The next two data members, validToken and validTokens, keep track of the expected tokens and token class. A token class represents a scenario where several tokens can be valid. The next data member, pos, represents the position where the user's cursor is positioned in the source code. The pos data member is implemented as a record or structure of type KibitzPos which may be implemented as follows. [0079]
    typedef struct
    {
      short fileIndex;
      short lineNo; // up to here idential to SourcePos
      short columnNo; // 1-based
    } KibitzPos;
  • As shown, the KibitzPos structure specifies a file (via an index), a line number, and a column number. [0080]
  • The next data member of KibitzResult is partialIden, which is employed for instances where the system has found a partial identifier. Here, the IDE will employ the information to perform an incremental search of available identifiers for attempting to find a match. As its final data member, the KibitzResult structure includes a parameter position array, paramPos. This indicates the source position of the actual parameter for a function call. [0081]
  • E. UnitNameFileNamePair Data Structure [0082]
  • The UnitNameFileNamePair data structure may be constructed as follows. [0083]
    typedef struct
    {
      uchar *unitName;
      char *unitFileName;
    } UnitNameFileNamePair;
  • This data structure is employed to keep track of unit names (e.g., simple Pascal names in Borland Delphi™) and filenames (i.e., qualified by file directory and drive). The compiler employs this data structure for determining a filename (i.e., the name of a file on disk) which corresponds to a unit name encountered in the source code. [0084]
  • The system defines the following flags which are used when a list of identifiers are reported back from the compiler to the IDE, for keeping track of whether a particular identifier itself is acceptable or whether the identifier itself only has a field which would be acceptable. [0085]
    typedef  enum
    {
    GF_NORMAL = 0x00, // Normal case
    GF_SCOPE = 0x01, // Symbol was included because it
    has a scope
    GF_METATOKEN = 0x02, // Symbol is metatoken
    (e.g. ‘identifier’)
    } GF_Flags;
  • This information is employed by the IDE to make a “visual” distinction between the two cases. Consider, for instance, an assignment statement involving an integer variable, as follows. [0086]
    var
    I, j : Integer;
    r : TRect;
    begin
    I :=  // complete this statement
  • In the snippet above, I is an integer variable and, thus, the statement can be completed by assigning the integer j as follows. [0087]
  • I: =j; [0088]
  • Alternatively, the statement can be completed by assigning an integer member of r (which itself is a variable of type TRect). To indicate these two choices, the IDE displays a list showing j normally and showing r with an ellipsis appended to it. This informs the user that r is acceptable but that the user has to still complete the entry with a dot (for accessing a field of r). In this case, the GF_SCOPE would be set for r, indicating that it is acceptable but only because it has a field which is acceptable. [0089]
  • F. Token-Based Processing [0090]
  • The basic internal operation of the system is as follows. As an initial task, the system lexical analyzer has to take the source position that the IDE passed to it and transform it into a special token. In general compiler operation, the function of the lexical analyzer is to take source text and transform it into a stream of tokens. Consider the following code snippet. [0091]
  • if I=|0 then [0092]
  • (where | represents cursor position) [0093]
  • In operation, the lexical analyzer converts the expression into a sequence of tokens, for instance as follows. [0094]
    if I = | 0 then
    (*
    Tokens:
    TK_IF
    TK_IDENT
    TK_EQUAL
    TK_KIBITZ
    *)
  • Here, “if” is represented by the TK_IF token, I is represented by the TK_IDENT (i.e., identifier) token, and so forth and so on. In accordance with the present invention, the scanner reports a special token, TK_KIBITZ, for marking the current cursor position. In this manner, the system is easily able to identify the cursor position in the stream of tokens. [0095]
  • Exemplary method steps for performing this operation are as follows. [0096]
    /*
    Lexical analyser (scanner) delivers special token (TK_KTBITZ)
    at cursor position. The following method checks against stop line
    once per line, then sets special marker character in the line
    buffer.
    */
    void Scan(void)
    {
    switch (GetNextInputChar())
    {
    case '\n':
    scannerState.lineNum++;
    if ( scannerState.lineNum == stopLine
    && strcmp(scannerState.fileName,
    stopSrc) == 0)
    {
    /* set special character to mark stop
    position */ lineBuffer[stopCol] < 0;
    }
    break;
    case 0:
    if (scannerState.column == stopCol)
    {
    token.tok = TK_KIBITZ;
    // insert special token
    break;
    }
    /* . . . */
  • As shown, the implementation comprises a “switch” statement over the next input character (i.e., from the source code stream). Two special cases are of interest. The first case of interest is a line feed character. Upon reaching such an input character, the system at this case arm checks whether the current line number and filename correspond to that specified for the “stop” source (i.e., the source file where the user's cursor is positioned). As shown above, the line number is examined first so that the system can perform an integer comparison first, before a more expensive string comparison is undertaken. In the event that the line number and source filename indicate that the current input character corresponds to the cursor position, the system proceeds to mark the current line (maintained in a line buffer) with a special character, such as zero (i.e., NULL). [0097]
  • After the line is marked, the system “switches” on subsequent input characters until it encounters the value of zero (i.e., the special character inserted above to mark the stop position). The system at this point confirms that this is the position of interest by comparing the current column (in the source stream) with the column from the IDE. If the current column is equal to the column where the system wishes to stop, then the system inserts the special token—TK_KIBITZ—that tells the parser to stop at this point. This method step of the scanner illustrates the transformation from a stop source, a stop line, and a stop column to a special token which instructs the parser where to stop. [0098]
  • The parser in turn compiles the source normally, including the declaration, until it encounters the special token. During this compilation, however, the parser will skip compilation of function bodies unless a particular function body contains the special token. For code completion, in accordance with the present invention, the code contained within function bodies (apart from a current function which the user cursor might be positioned within) is not relevant. Since function bodies are skipped, no code is generated for those function bodies and the background compilation for code completion, therefore, occurs quickly. [0099]
  • During processing, the parser maintains a stack of “kibitz” contexts. When the parser encounters a TK_KIBITZ token, it returns the context information back to the IDE. This is illustrated, for instance, by the following snippet. [0100]
    variable := FooFunction( a, b,|
    {circumflex over (ee KK_EXPR, type of variable)}
    {circumflex over (ee KK_ARGUMENT, FooFunction)}
    {circumflex over (ee Argument 3, formal parameter)}
  • An exemplary method for skipping the body of functions, using the kibitz token, may be constructed as follows. [0101]
    /*
    Parser parses declarations fully, tries to skip function bodies,
    suppresses code generation. Routine to skip keeps track of nesting of
    structured statements, returns TRUE if the function body was skipped,
    FALSE otherwise.
    */
    static  int  SkipBody(void)
    int  nestLevel;
    long  startPos;
    startPos = ScannerPos();
    nestLevel = 0;
    while  (1)
    {
    switch (token.tok)
    {
    case  TK_CASE:
    case  TK_TRY:
    case  TK_ASM:
    case  TK_INITIALIZATION:
    case  TK_BEGIN:  nestLevel++; break;
    case  TK_END:   nestLevel−−; break;
    case  TK_EOF:   nestLevel = −1; break;
    case  TK_KIBITZ:
    ScannerSeek(startPos);
    Scan ();
    return  FALSE;
    {
    if (nestLevel < 0)
    break;
    Scan ();
    {
    return  TRUE;
    {
  • The SkipBody method is invoked when the parser detects the beginning of a function body. The method operates as follows. At the outset, the method remembers the current position, as storing it to startPos. Next, the method initializes a local variable, nestLevel, which serves to keep track of the nesting of structured statements. This is followed by a “while” loop which switches on token. In operation, the loop reads a token and then switches to a particular case arm based on token type. If the token type marks the beginning of a structured statement, the nestLevel countered is incremented. Conversely, if this token marks the end of a structured statement, nestLevel is decremented. If the method encounters the special “kibitz” token, it returns to the beginning of the function by invoking ScannerSeek. Thereafter, the method returns “false” as the method has not been skipped. After completing execution of the switch statement, the method can determine whether it has found the final end of the function. [0102]
  • In summary, the basic approach is to go through the function as fast as possible (i.e., look through the tokens of the function as fast as possible), keeping track of nesting. If the end is encountered, the method can return true. If, on the other hand, a special “kibitz” token is encountered, the method repositions the parser (scanner) to the beginning of the function and returns “false.” In such a case, the parser will resume parsing forward as more detail about the function is required, since it is the function where the user's cursor is positioned. [0103]
  • G. Scopes [0104]
  • While parsing, the compiler keeps track of accessible scopes. For instance, when entering a particular statement, the parser enters a scope, and at the end of the statement the parser exits the scope. Scopes that are accessible include “with” scopes (i.e., Pascal with statements), local symbols of any current procedures the parser is within, the symbols of the current unit (i.e., symbols global to the unit), and symbols of any units employed by the current unit (i.e., imported symbols). [0105]
  • In order to handle method function calls directly, the parser maintains a stack of contexts which it is in. Just as the computer system stack must maintain a separate copy of local variables for each function invocation, the parser mirrors the approach so that it can keep track of the appropriate context. During parsing of a function call, for instance, when the parser encounters the left paren (i.e., opening parenthesis), the parser “pushes” onto its stack information indicating it is now parsing within the context of a function argument. When the parser has parsed the right paren (i.e., closing parenthesis), the parser “pops” the previously-pushed stack entry, for indicating that it is no longer within the context of function argument. If the function call occurred in an assignment statement, for instance, the context information would indicate at this point that the parser is popping back into the context of an expression. In the instance of nested function calls (e.g., recursion), the stack would contain entries for different argument contexts. [0106]
  • When in the context of an argument list for either a user-declared or standard function, the IDE employs ancillary or helper functions, to get information pertaining to the function and parameter symbols. Exemplary helper functions include the following (shown in function prototype form). [0107]
    /* In the case of KK_ARGUMENT or KK_STD_ARG, we are in a call to a
    user-declared or standard function, respectively. The IDE uses the
    information in the result record and the following compiler entry
    points to build a parameter list to show to the user:
    */
    int EXPORT GetSymbols (Symbol *root, SQ_Flags flags,
    Symbol **symList);
    /* used to get the parameters of a procedure/function/method */
    GSF_Flags EXPORT GetSymbolFlags(Symbol *sym);
    /* used to get information about parameter and function symbols ~/
    void EXPORT GetSymbolText(Symbol *sym, String text, ST_Flags flags);
    /* used to get names of symbols */
    Symbol *EXPORT GetResultType(Symbol *sym);
    /* used to get the result type of a function */
  • The GetSymbols method is employed to get the parameters (symbols) of a called procedure, function, or method. The root parameter is the routine being called; this is obtained from the result record. The SQ_Flags parameter is employed to indicate whether the GetSymbols routine should return parameter information. The symList parameter is a pointer to a result vector, which is employed for returning the parameters. The GetSymbolFlags method is employed for getting additional information about parameter and function symbols, such as whether a parameter is a var or const parameter. The routine can also be invoked on the procedure or function symbol itself for determining whether the symbol is a procedure, function, or method. The GetSymbolText method is employed to get the actual text for a symbol, such as the actual name of a parameter. The routine can also be used (with a particular flag setting) to get the name of the type of symbol. This information is used by the IDE to construct the parameter list for display to users. The GetResultType routine is employed to get the result type of a function (i.e., the symbol that represents the result type of a function). After obtaining this symbol, the IDE in turn can invoke GetSymbolText for getting the text or name for the symbol. [0108]
  • H. Determining Valid Symbols [0109]
  • As previously described, the GetValidSymbols method is employed to get a list of valid symbols. As previously described, the IDE will usually invoke the method twice; first, to get a count of valid symbols, and second to actually get the result (of symbols). In all cases except KK_NONE and KK_ERROR, the IDE can request a list of valid symbols via GetValidSymbols. As the IDE has no way of knowing how much space needs to be allocated for the result, the usual procedure is to call GetValidSymbols with a result and flags parameter of 0 in which case only the count of valid symbols will be reported. After allocating big enough buffers, the system can pass the information to a second call with otherwise identical parameters. Internally, GetValidSymbols typically invokes logic steps that traverse or walk all accessible scopes, applying to each symbol found in a “validation” function that checks whether the symbol would be accessible. Next, the routine invokes additional logic steps for examining each symbol for determining whether it is valid in the current context. If the symbol would be acceptable, it is reported to the IDE; if not, on the other hand, it is skipped. [0110]
  • An exemplary validation function for the context KK_CONST_EXPR (i.e., constant expression), for instance, may be constructed as follows (simplified for clarity of description). [0111]
    static int ValidConstExpr(const KibitzResuit *k, Symbol *actualArg)
    {
    Type  *argType;
    if  (actualArg->kind != SY_CONST)
    return  FALSE;
    return  IsAssCompat(k->validType, actualArg->type);
    {
  • As shown, the function first checks whether the symbol is a constant; if not, the symbol is immediately rejected. If the symbol is a constant, the function then determines whether it is assignment compatible with the type which is expected. The function returns “true” if the symbol is assignment compatible; otherwise, the function returns “false.”[0112]
  • Routines are provided for walking different kinds of scopes. A routine that traverses the list of local symbols for a unit, for instance, may be embodied as follows. [0113]
    static  int  WalkUnitLocals(Symbol *sym, const KibitzResult *k,
    Symbol **result, GF_Flags*flags, int maxCnt,
    ValidSymbolProc *v)
    {
    Type  *t;
    int   cnt;
    cnt = 0;
    for   ( ; sym; sym = sym->next)
    {
    if (cnt >=maxCnt) // stop if we reached the
    maximum count
    return cnt;
    if (sym->namer[0] < ‘A’) // skip invisible,
    compiler-generated
    continue; // symbols
    if (sym->decLevel != 0) // skip local procedures
    continue;
    if (v(k, sym, 0)) // is this symbol acceptable?
    {
    if (result)
    result[cnt] = sym; // yes: report it back
    if   (flags)
    flags[cnt] = GF_NORMAL;
    cnt++;
    }
    else if  (SymbolHasScope(sym, 0, k, v)) // does it have an
    { // acceptable field
    if (result)
    result[cnt] = sym; // yes: report it
    if  (flags)
    flags[cnt] = GF_SCOPE; // and flag it as such
    cnt++;
    {
    {
    return cnt;
    {
  • The method is invoked with the following parameters: a list of symbols (i.e., local symbols of the unit), a result record, a result vector, a flags parameter, a maximum count, and a pointer to a validation procedure. In operation, the method traverses the symbol list, keeping track of the count of acceptable symbols. At the “for” loop, the method determines whether it already has a sufficient number of symbols; if so, the method is done and may return. Otherwise, the method enters the “for” loop. [0114]
  • Within the “for” loop, the method skips compiler-generated names; these will have names which are not legal for the underlying computer language (e.g., Pascal). Next, the method skips objects which are not at the global declaration level, such as local functions. If the symbol passes these tests, the method applies a validation function to it. If the validation function returns “true,” then the symbol is flagged as a normal symbol. Even if the symbol is not accepted by the validation function, it might nevertheless have a field which is acceptable (e.g., a member field of a structure). If the symbol (or a field of a symbol) is acceptable, it is added to the result array; corresponding flags for the symbol are set in the flags array. As an optimization, the IDE performs a CompilerKibitz call in the background at certain times, so used units, source files, and the like get loaded into the compiler or the operating system's disk cache. [0115]
  • I. Avoiding Infinite Cycles [0116]
  • A particular difficulty is encountered when determining whether a structure has an acceptable field. If precautions are not taken, the system might be trapped in a “cycle.” Consider, for instance, a TForm data structure. A TForm structure often includes components which are themselves of type TForm. Accordingly, extra care is required to avoid infinite incursion when traversing or walking a field list of a structure. [0117]
  • To prevent this problem, the system adopts the following approach. For each type examined, the system keeps track of the “state” of the type—that is, what the system knows about the type. In an exemplary embodiment, four states are defined as follows. [0118]
    // states a type can be in - all types start out as TS_UNKNOWN
    typedef  enum
    {
    TS_UNKNOWN, // don't know whether this type is acceptable
    TS_FALSE, // know this type is not acceptable
    TS_TRUE, // know this type is acceptable
    TS_ACTIVE, // working to find out whether this type is
    acceptable
    } TypeState;
  • The first state, TS_UNKNOWN, indicates that the system does not know whether the type is acceptable. The second state, TS_FALSE, indicates that the system knows that the type is not acceptable. As an example of use, an assignment statement which assigns a floating point variable to an integer variable will not be acceptable and, thus, would be identified as TS_FALSE. TS_TRUE, the third state, indicates that the type is acceptable. Finally, TS_ACTIVE indicates a state where the system is working to determine whether the type is acceptable. [0119]
  • A method, SymbolHasScope, for determining whether a symbol has an acceptable type for a given context may be constructed as follows. [0120]
    // find out whether a symbol with acceptable type can be reached
    // from type
    static int SymbolHasScope(Type *type, const KibitzResult *k,
    ValidSymbolProc *v)
    {
    Type *type;
    switch (type−>g.form)
    {
    case TF_CLASSREF: // only these types have scopes at all
    case TF_INSTANCE:
    case TF_RECORD:
    case TF_OBJECT:
    switch  (GetTypeState(type))
    {
    case TS_TRUE:  return  TRUE; // know the answer is TRUE
    case TS_FALSE:  return  FALSE; // know the answer is FALSE
    case TS_ACTIVE:  return  FALSE; // cut off recursion here
    case TS_UNKNOWN: // need to do some work here
    SetTypeState(type, TS_ACTIVE);
    if (WalkFieldScope(type, k, v)) // any acceptable fields?
    {
    SetTypeState(type, TS_TRUE); // yes: remember
    return  TRUE; // answer is TRUE
    }
    else
    {
    SetTypeState(type, TS_FALSE); // no: remember
    return FALSE; // anser is FALSE
    }
    }
    default:
    return FALSE; // type doesn't have scope
    }
    }
  • As shown, the method is implemented as a large case or “switch” statement which serves to determine whether the type has any scope at all (i.e., has fields). If it does have a scope, the method proceeds to retrieve the state of the type. This state is tested by a nested “switch” statement. If the state is known to be true (TS_TRUE) or false (TS_FALSE), the method can return “true” or “false,” respectively. If, on the other hand, the state is “active” (TS_ACTIVE), the method returns “false,” for presenting incursion or reentry. [0121]
  • If the type is unknown, the method proceeds to determine the type as follows. First, if type state is set to “active” (TS_ACTIVE), for indicating that the system is in the process of determining the state. Next, the method traverses or walks the list of symbols for this scope, by invoking a WalkFieldScope helper routine. This call will determine whether the structure has a field which is accepted by the validation function. If it is acceptable, WalkFieldScope will return “true,” whereupon the state of the type can be set to “true” (TS_TRUE). Otherwise, the state is set to “false” (TS_FALSE). Also, if the type does not have a scope, the SymbolHasScope method returns “false.”[0122]
  • As an optimization to avoid having to initialize all types to TS_UNKNOWN before calling the above routine, an additional table and an auxiliary field in the type structure is used to cache type results as follows. [0123]
    typedef struct
    {
    TypeState typeState; // state of the type
    Type *type; // pointer back to type
    } TypeEntry;
    static TypeEntry *typeTab;
    static ulong typeCnt;
    static ulong maxCnt;
  • Here, the system can index into the table for determining whether the type has already been processed before. [0124]
  • While the invention is described in some detail with specific reference to a single-preferred embodiment and certain alternatives, there is no intent to limit the invention to that particular embodiment or those specific alternatives. Thus, the true scope of the present invention is not limited to any one of the foregoing exemplary embodiments but is instead defined by the appended claims. [0125]

Claims (20)

What is claimed is:
1. In a development system, a method for assisting a user with inputting source code for a computer program, the method comprising:
detecting a need for assisting the user with input for a source code module under development;
determining a current cursor position representing a location in the source code module where the user is currently providing input;
determining input items which are suitable for input in the source code module at the current cursor position;
displaying to the user a list of said suitable input items; and
in response to selection by the user of a particular item from the list, automatically completing input at the current cursor position
2. The method of claim 1, wherein said source code is compiled by a compiler into a program which executes on a target microprocessor.
3. The method of claim 1, wherein said detecting step includes:
receiving a request from the user.
4. The method of claim 1, wherein said detecting step includes:
determining instances in the source code module where the system can automatically provide input.
5. The method of claim 4, wherein said detecting step includes:
determining in the source code module use of a dot operator.
6. The method of claim 4, wherein said detecting step includes:
determining in the source code module use of a class variable which references a class member or method.
7. The method of claim 4, wherein said detecting step includes:
determining in the source code module use of a structure variable which references a nested data member.
8. The method of claim 1, wherein said current cursor position in the source code module appears within an assignment statement, and wherein said list of suitable input items comprise a list of items which are assignment compatible.
9. The method of claim 1, wherein said list of suitable input items comprises a list of variables defined within the source code module which can appropriately be inputted at the current cursor position.
10. The method of claim 1, wherein said current cursor position comprises a line number and a column position for a particular source code file.
11. The method of claim 1, wherein said step of determining input items which are suitable for input in the source code module includes:
determining which variables are within scope for the current cursor position; and
eliminating as a suitable input item any item that is not within scope for the current cursor position.
12. The method of claim 11, wherein said step of determining input items which are suitable for input in the source code module at the current cursor position includes:
compiling the source code module up to the current cursor position.
13. The method of claim 11, wherein said step of compiling the source code module up to the current cursor position includes:
skipping compilation of any method defined in the source code unless the cursor is currently positioned within the method.
14. The method of claim 1, wherein said list of suitable input items includes items which are suitable by virtue of having a nested member which is suitable.
15. The method of claim 1, wherein said step of determining input items which are suitable for input in the source code module includes:
determining a type of input expected at the current cursor position; and
determining variables within scope at the current cursor position which have a type compatible with the type of input expected at the current cursor position.
16. A development system comprising:
a computer having a processor and a memory;
an integrated development interface including a code editor for inputting source code into a source code module being created;
a compiler for compiling one or more source code modules into a computer program;
means, responsive to the integrated development interface and the compiler, for assisting a user with input for a source code module under development, said means comprising:
means for determining a current context for source code being inputted,
means for determining appropriate input for said determined current context, and
means for displaying to the user said determined appropriate input.
17. The system of claim 16, wherein said means for assisting includes:
means for receiving a request from the user for assistance.
18. The system of claim 16, wherein said means for assisting includes:
means for detecting a position in the source code module where the system can provide assistance.
19. The system of claim 16, wherein said current context comprises an assignment expression and wherein appropriate input comprises an item which is assignment compatible for the expression.
20. The system of claim 19, wherein said appropriate input comprises a variable having a data type which is assignment compatible for the expression.
US09/934,942 1997-10-02 2001-08-22 Development system with methods for assisting a user with inputting source code Abandoned US20020016953A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US09/934,942 US20020016953A1 (en) 1997-10-02 2001-08-22 Development system with methods for assisting a user with inputting source code

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/942,782 US6314559B1 (en) 1997-10-02 1997-10-02 Development system with methods for assisting a user with inputting source code
US09/934,942 US20020016953A1 (en) 1997-10-02 2001-08-22 Development system with methods for assisting a user with inputting source code

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US08/942,782 Continuation US6314559B1 (en) 1997-10-02 1997-10-02 Development system with methods for assisting a user with inputting source code

Publications (1)

Publication Number Publication Date
US20020016953A1 true US20020016953A1 (en) 2002-02-07

Family

ID=25478594

Family Applications (2)

Application Number Title Priority Date Filing Date
US08/942,782 Expired - Lifetime US6314559B1 (en) 1997-10-02 1997-10-02 Development system with methods for assisting a user with inputting source code
US09/934,942 Abandoned US20020016953A1 (en) 1997-10-02 2001-08-22 Development system with methods for assisting a user with inputting source code

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US08/942,782 Expired - Lifetime US6314559B1 (en) 1997-10-02 1997-10-02 Development system with methods for assisting a user with inputting source code

Country Status (1)

Country Link
US (2) US6314559B1 (en)

Cited By (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030023965A1 (en) * 2000-11-14 2003-01-30 Pascal Robilliard Support tool for software parameterization
US20030188301A1 (en) * 2002-03-28 2003-10-02 International Business Machines Corporation Code coverage with an integrated development environment
US20040117762A1 (en) * 2000-05-30 2004-06-17 Fumio Negoro Processing method using synchronization structure of information processor
US20040261064A1 (en) * 2003-06-20 2004-12-23 Goldstein Theodore C. Speculative compilation
US20050076002A1 (en) * 2003-10-06 2005-04-07 Patrick Williams Parameter assistant for automatically specifying parameter values for a software program
US20050154724A1 (en) * 2000-07-20 2005-07-14 Microsoft Corporation Method and apparatus for identifying programming object attributes
US20060053106A1 (en) * 2004-08-31 2006-03-09 International Business Machines Corporation Use of generated SQL for evaluation of decision point rules in a workflow system
US20080052662A1 (en) * 2006-08-24 2008-02-28 Robert Marc Zeidman Software For Filtering The Results Of A Software Source Code Comparison
US20080059948A1 (en) * 2003-12-09 2008-03-06 International Business Machines Corporation User configureable language independent code assist method, system, article of manufacture, and computer program product
US20080092117A1 (en) * 2003-08-13 2008-04-17 Vampo Cosimo Editor with Commands for Automatically Disabling and Enabling Program Code Portions
US20080270989A1 (en) * 2007-04-27 2008-10-30 Azadeh Ahadian Detecting and displaying errors in database statements within integrated development environment tool
US20080270983A1 (en) * 2007-04-27 2008-10-30 Azadeh Ahadian Database connectivity and database model integration within integrated development environment tool
US20080270980A1 (en) * 2007-04-27 2008-10-30 Azadeh Ahadian Rapid application development for database-aware applications
US20080320441A1 (en) * 2007-06-23 2008-12-25 Azadeh Ahadian Extensible rapid application development for disparate data sources
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US20080320444A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Late bound programmatic assistance
US20090138851A1 (en) * 2007-11-27 2009-05-28 International Business Machines Corporation Automated defect classification
US7562344B1 (en) 2008-04-29 2009-07-14 International Business Machines Corporation Method, system, and computer program product for providing real-time developer feedback in an integrated development environment
US20090313597A1 (en) * 2008-06-16 2009-12-17 Microsoft Corporation Tabular completion lists
US20100269094A1 (en) * 2007-11-13 2010-10-21 Roman Levenshteyn Technique for automatically generating software in a software development environment
US20120167042A1 (en) * 2010-12-28 2012-06-28 Microsoft Corporation Contextually intelligent code editing
US20130055199A1 (en) * 2011-08-30 2013-02-28 Evgeny Kryukov Application platform for designing and executing applications
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US20130263086A1 (en) * 2012-03-27 2013-10-03 Microsoft Corporation Extensible Mechanism for Providing Suggestions in a Source Code Editor
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US8694978B1 (en) * 2011-03-25 2014-04-08 Google Inc. Function side-effect modeling by prototyping
US8719766B1 (en) * 2006-10-16 2014-05-06 The Math Works, Inc. System and method for identifying and adding files to a project manifest
US20140201711A1 (en) * 2013-01-15 2014-07-17 International Business Machines Corporation Logging and profiling content space data and coverage metric self-reporting
US20140237445A1 (en) * 2013-02-21 2014-08-21 International Business Machines Corporation System and method for an object instance acquirer
US20140304679A1 (en) * 2007-04-10 2014-10-09 Adobe Systems Incorporated Software development tool that provides context-based data schema code hinting
US20140359572A1 (en) * 2013-06-04 2014-12-04 Microsoft Corporation System and method for providing code completion features for code modules
US9063809B2 (en) 2013-01-15 2015-06-23 International Business Machines Corporation Content space environment representation
US9075544B2 (en) 2013-01-15 2015-07-07 International Business Machines Corporation Integration and user story generation and requirements management
US9081645B2 (en) 2013-01-15 2015-07-14 International Business Machines Corporation Software product licensing based on a content space
US9087155B2 (en) 2013-01-15 2015-07-21 International Business Machines Corporation Automated data collection, computation and reporting of content space coverage metrics for software products
US9111040B2 (en) 2013-01-15 2015-08-18 International Business Machines Corporation Integration of a software content space with test planning and test case generation
US9141379B2 (en) 2013-01-15 2015-09-22 International Business Machines Corporation Automated code coverage measurement and tracking per user story and requirement
US9182945B2 (en) 2011-03-24 2015-11-10 International Business Machines Corporation Automatic generation of user stories for software products via a product content space
US9218161B2 (en) 2013-01-15 2015-12-22 International Business Machines Corporation Embedding a software content space for run-time implementation
US20160026439A1 (en) * 2014-07-23 2016-01-28 Apple Inc. Interactive Code Editing
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US9396342B2 (en) 2013-01-15 2016-07-19 International Business Machines Corporation Role based authorization based on product content space
US9430194B1 (en) * 2015-10-30 2016-08-30 International Business Machines Corporation GUI-driven symbol management and code generator
US9489418B2 (en) 2007-04-27 2016-11-08 International Business Machines Corporation Processing database queries embedded in application source code from within integrated development environment tool
US9563406B1 (en) * 2013-05-15 2017-02-07 The Mathworks, Inc. Graphical user interface replacement of function signatures
US9659053B2 (en) 2013-01-15 2017-05-23 International Business Machines Corporation Graphical user interface streamlining implementing a content space
US10691420B1 (en) * 2016-04-18 2020-06-23 The Mathworks, Inc. Dynamic function argument completion
CN111324348A (en) * 2018-12-17 2020-06-23 北京华航无线电测量研究所 Man-machine interaction interface implementation method of ground control platform of guide equipment
US11954023B2 (en) 2022-07-20 2024-04-09 Microsoft Technology Licensing, Llc Garbage collection prefetching state machine

Families Citing this family (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026233A (en) * 1997-05-27 2000-02-15 Microsoft Corporation Method and apparatus for presenting and selecting options to modify a programming language statement
US6665688B1 (en) * 1998-12-23 2003-12-16 Cray Inc. Method and system for automatically regenerating data on-demand
US6965990B2 (en) * 2001-10-23 2005-11-15 International Business Machines Corporation Method and apparatus for providing programming assistance
DE60232637D1 (en) * 2002-01-02 2009-07-30 Sap Ag System and method for editing text elements with hierarchical references
US20030131337A1 (en) * 2002-01-07 2003-07-10 Perumainar Asok K. Educational method and tool for isolating and teaching programming language concepts
US6922827B2 (en) * 2002-02-22 2005-07-26 Bea Systems, Inc. Iterative software development environment with prioritized build rules
US7370360B2 (en) * 2002-05-13 2008-05-06 International Business Machines Corporation Computer immune system and method for detecting unwanted code in a P-code or partially compiled native-code program executing within a virtual machine
US20030233585A1 (en) * 2002-06-17 2003-12-18 Microsoft Corporation System and method for reducing errors during software development
US20040031017A1 (en) * 2002-08-12 2004-02-12 Shankar Vaidyanathan System and method for context-sensitive help in a design environment
US20040153995A1 (en) * 2003-02-03 2004-08-05 Jean-Pierre Polonovski Software development tool
US7237226B2 (en) * 2003-05-09 2007-06-26 Intentional Software Corporation Method and system for storing pending changes to data
US7051279B2 (en) * 2003-07-08 2006-05-23 Intentional Software Corporation Method and system for providing multiple levels of help information for a computer program
US7296264B2 (en) * 2003-07-18 2007-11-13 Bea Systems, Inc. System and method for performing code completion in an integrated development environment
US7210138B2 (en) * 2003-07-18 2007-04-24 Bea Systems, Inc. System and method for performing error recovery in an integrated development environment
CA2445427A1 (en) * 2003-10-17 2005-04-17 Ibm Canada Limited - Ibm Canada Limitee A method and system for editing column oriented programming language statements
US7607099B2 (en) 2003-11-03 2009-10-20 Intentional Software Corporation Method and system for reversible design tree transformations
US7313784B2 (en) * 2003-12-09 2007-12-25 International Business Machines Corporation Language independent code assist user preferences configuration method, system, article of manufacture, and computer program product
US7562343B2 (en) * 2003-12-09 2009-07-14 International Business Machines Corporation User configurable language independent code assist engine method, system, article of manufacture, and computer program product
US8037102B2 (en) 2004-02-09 2011-10-11 Robert T. and Virginia T. Jenkins Manipulating sets of hierarchical data
US9646107B2 (en) 2004-05-28 2017-05-09 Robert T. and Virginia T. Jenkins as Trustee of the Jenkins Family Trust Method and/or system for simplifying tree expressions such as for query reduction
US7316001B2 (en) * 2004-06-05 2008-01-01 Graphlogic Inc. Object process graph system
US7620632B2 (en) 2004-06-30 2009-11-17 Skyler Technology, Inc. Method and/or system for performing tree matching
US7493335B2 (en) * 2004-07-02 2009-02-17 Graphlogic Inc. Object process graph relational database interface
US7360209B2 (en) * 2004-07-16 2008-04-15 Graphlogic Inc. Object process graph application controller-viewer
US8042095B2 (en) * 2004-08-13 2011-10-18 National Instruments Corporation Application development environment with features for increasing the ease and efficiency of viewing function help text
CN100359466C (en) * 2004-08-27 2008-01-02 华为技术有限公司 Tool command language integration development system
US20060047653A1 (en) * 2004-08-30 2006-03-02 Microsoft Corporation Systems and methods for navigating to multiple destination types through a single search interface in a development environment
JP2008512794A (en) * 2004-09-10 2008-04-24 グラフロジック インコーポレイテッド Object processing graph application development system
US8051408B1 (en) * 2004-09-13 2011-11-01 The Mathworks, Inc. Method of providing interactive usage descriptions based on source code analysis
US20060090154A1 (en) * 2004-10-07 2006-04-27 International Business Machines Corp. System and method for contributing remote object content to an integrated development environment type-ahead
US7475391B2 (en) * 2004-10-07 2009-01-06 International Business Machines Corporation System and method for revealing remote object status in an integrated development environment
US7801923B2 (en) 2004-10-29 2010-09-21 Robert T. and Virginia T. Jenkins as Trustees of the Jenkins Family Trust Method and/or system for tagging trees
US7627591B2 (en) 2004-10-29 2009-12-01 Skyler Technology, Inc. Method and/or system for manipulating tree expressions
KR100687241B1 (en) * 2004-10-29 2007-02-27 히타치 오므론 터미널 솔루션즈 가부시키가이샤 A display input system, the display control method
US7636727B2 (en) 2004-12-06 2009-12-22 Skyler Technology, Inc. Enumeration of trees from finite number of nodes
US7630995B2 (en) 2004-11-30 2009-12-08 Skyler Technology, Inc. Method and/or system for transmitting and/or receiving data
US8316059B1 (en) 2004-12-30 2012-11-20 Robert T. and Virginia T. Jenkins Enumeration of rooted partial subtrees
US8615530B1 (en) 2005-01-31 2013-12-24 Robert T. and Virginia T. Jenkins as Trustees for the Jenkins Family Trust Method and/or system for tree transformation
US7681177B2 (en) * 2005-02-28 2010-03-16 Skyler Technology, Inc. Method and/or system for transforming between trees and strings
US8356040B2 (en) 2005-03-31 2013-01-15 Robert T. and Virginia T. Jenkins Method and/or system for transforming between trees and arrays
US7899821B1 (en) 2005-04-29 2011-03-01 Karl Schiffmann Manipulation and/or analysis of hierarchical data
US20070130547A1 (en) * 2005-12-01 2007-06-07 Navisense, Llc Method and system for touchless user interface control
WO2007068527A1 (en) * 2005-12-15 2007-06-21 International Business Machines Corporation Method and system for assisting a software developer in creating source code for a computer program
US20070180049A1 (en) * 2006-01-31 2007-08-02 Microsoft Corporation Code hyperlinks
US8578282B2 (en) * 2006-03-15 2013-11-05 Navisense Visual toolkit for a virtual user interface
US20080127055A1 (en) * 2006-09-07 2008-05-29 Microsoft Corporation Application proxy
US7908580B2 (en) * 2006-09-07 2011-03-15 Microsoft Corporation Connecting an integrated development environment with an application instance
US8850388B2 (en) * 2006-09-07 2014-09-30 Microsoft Corporation Controlling application features
US7530079B2 (en) * 2006-09-07 2009-05-05 Microsoft Corporation Managing application customization
US7949949B2 (en) * 2006-11-20 2011-05-24 Intentional Software Corporation Domain transformation languages
US8079023B2 (en) * 2007-03-22 2011-12-13 Microsoft Corporation Typed intermediate language support for existing compilers
US8307335B2 (en) 2007-04-30 2012-11-06 International Business Machines Corporation Determination of a set of candidate code insertions for insertion in program code
US8887075B2 (en) * 2007-05-07 2014-11-11 Blackberry Limited System and method for device skinning
US20090328000A1 (en) * 2007-05-07 2009-12-31 Nextair Corporation System, apparatus and method for programming a computing device
US20090030902A1 (en) * 2007-07-24 2009-01-29 Microsoft Corporation Schematized data intelligent assistance for development environments
US8307334B2 (en) * 2007-09-17 2012-11-06 International Business Machines Corporation Method for assisting a user in the process of creating software code
US20100024030A1 (en) * 2008-07-23 2010-01-28 Microsoft Corporation Restartable transformation automaton
US8479156B2 (en) * 2009-06-18 2013-07-02 National Instruments Corporation Providing target specific information for textual code at edit time
US8499290B2 (en) * 2010-06-15 2013-07-30 Microsoft Corporation Creating text functions from a spreadsheet
US8869097B2 (en) * 2011-03-23 2014-10-21 Infosys Limited Online integrated development environment with code assist
US9009664B2 (en) 2011-03-31 2015-04-14 Infosys Limited Structural search of source code
US9348894B2 (en) 2011-03-31 2016-05-24 Infosys Limited Facet support, clustering for code query results
US8959479B2 (en) * 2011-05-06 2015-02-17 International Business Machines Corporation Presenting a custom view in an integrated development environment based on a variable selection
US9038014B2 (en) * 2011-12-15 2015-05-19 Microsoft Technology Licensing, Llc Intelligently recommending schemas based on user input
CA2773721C (en) * 2012-04-05 2019-03-05 Ibm Canada Limited - Ibm Canada Limitee Code validation using content assist
US9595205B2 (en) * 2012-12-18 2017-03-14 Neuron Fuel, Inc. Systems and methods for goal-based programming instruction
US9244658B2 (en) * 2013-06-04 2016-01-26 Microsoft Technology Licensing, Llc Multi-step auto-completion model for software development environments
US9032363B2 (en) * 2013-08-19 2015-05-12 Red Hat, Inc. Providing a user interface library for building web-based applications
US9760369B2 (en) 2013-12-13 2017-09-12 Infosys Limited Assessing modularity of a program written in object oriented language
US10333696B2 (en) 2015-01-12 2019-06-25 X-Prime, Inc. Systems and methods for implementing an efficient, scalable homomorphic transformation of encrypted data with minimal data expansion and improved processing efficiency
US10437565B2 (en) * 2016-08-31 2019-10-08 International Business Machines Corporation Dynamic code suggestion
US10761812B2 (en) * 2016-11-21 2020-09-01 Sap Se Visual code editor for visually developing features in applications
US10572275B2 (en) * 2017-06-15 2020-02-25 Microsoft Technology Licensing, Llc Compatible dictionary layout
CN113811849A (en) * 2019-05-10 2021-12-17 Ai游戏公司 System and method for computer-aided computer programming
US11972222B2 (en) * 2020-10-23 2024-04-30 Kognitos, Inc. Method, system, and computer program product for natural language programming of a new function or skill
US11875137B2 (en) * 2020-12-07 2024-01-16 Texas Instruments Incorporated Method and apparatus for adding new inline prompts to a program development environment

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026233A (en) * 1997-05-27 2000-02-15 Microsoft Corporation Method and apparatus for presenting and selecting options to modify a programming language statement

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4617643A (en) 1982-10-29 1986-10-14 Mattel, Inc. Syntax error correction method and apparatus
EP0525258A1 (en) * 1991-07-29 1993-02-03 International Business Machines Corporation Generation of rules-based computer programs
US5649204A (en) * 1991-08-22 1997-07-15 Rec Software, Inc. Method and apparatus for consolidating software module linkage information used for starting a multi-module program
US5339433A (en) * 1992-11-19 1994-08-16 Borland International, Inc. Symbol browsing in an object-oriented development system
US5408665A (en) * 1993-04-30 1995-04-18 Borland International, Inc. System and methods for linking compiled code with extended dictionary support
US5485618A (en) 1993-12-15 1996-01-16 Borland International, Inc. Methods and interface for building command expressions in a computer system
US5579520A (en) * 1994-05-13 1996-11-26 Borland International, Inc. System and methods for optimizing compiled code according to code object participation in program activities
US5603021A (en) 1994-09-02 1997-02-11 Borland International, Inc. Methods for composing formulas in an electronic spreadsheet system
US5748963A (en) * 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding
US5754737A (en) * 1995-06-07 1998-05-19 Microsoft Corporation System for supporting interactive text correction and user guidance features
US5778402A (en) * 1995-06-07 1998-07-07 Microsoft Corporation Method and system for auto-formatting a document using an event-based rule engine to format a document as the user types
US5813019A (en) * 1995-07-06 1998-09-22 Sun Microsystems, Inc. Token-based computer program editor with program comment management
US5724589A (en) * 1995-10-13 1998-03-03 Borland International, Inc. Development system with a property-method-event programming model for developing context-free reusable software components
US5787431A (en) * 1996-12-16 1998-07-28 Borland International, Inc. Database development system with methods for java-string reference lookups of column names

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026233A (en) * 1997-05-27 2000-02-15 Microsoft Corporation Method and apparatus for presenting and selecting options to modify a programming language statement

Cited By (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040117762A1 (en) * 2000-05-30 2004-06-17 Fumio Negoro Processing method using synchronization structure of information processor
US7584169B2 (en) 2000-07-20 2009-09-01 Microsoft Corporation Method and apparatus for identifying programming object attributes
US7451159B2 (en) * 2000-07-20 2008-11-11 Micosoft Corporation Method and apparatus for identifying programming object attributes
US20050154724A1 (en) * 2000-07-20 2005-07-14 Microsoft Corporation Method and apparatus for identifying programming object attributes
US20050165767A1 (en) * 2000-07-20 2005-07-28 Microsoft Corporation Method and apparatus for identifying programming object attributes
US20030023965A1 (en) * 2000-11-14 2003-01-30 Pascal Robilliard Support tool for software parameterization
US7587714B2 (en) * 2000-11-14 2009-09-08 Bull S.A. Support tool for software parameterization
US20030188301A1 (en) * 2002-03-28 2003-10-02 International Business Machines Corporation Code coverage with an integrated development environment
US7089535B2 (en) * 2002-03-28 2006-08-08 International Business Machines Corporation Code coverage with an integrated development environment
US7877738B2 (en) * 2003-06-20 2011-01-25 Apple Inc. Speculative compilation
US20040261064A1 (en) * 2003-06-20 2004-12-23 Goldstein Theodore C. Speculative compilation
US8255872B2 (en) * 2003-08-13 2012-08-28 International Business Machines Corporation Editor with commands for automatically disabling and enabling program code portions
US20080092117A1 (en) * 2003-08-13 2008-04-17 Vampo Cosimo Editor with Commands for Automatically Disabling and Enabling Program Code Portions
US8898631B2 (en) 2003-08-13 2014-11-25 International Business Machines Corporation Editor with commands for automatically disabling and enabling program code portions
US20050076002A1 (en) * 2003-10-06 2005-04-07 Patrick Williams Parameter assistant for automatically specifying parameter values for a software program
US8392879B2 (en) * 2003-10-06 2013-03-05 National Instruments Corporation Parameter assistant for automatically specifying parameter values for a software program
US20080098352A1 (en) * 2003-12-09 2008-04-24 International Business Machines Corporation User configureable language independent code assist method, system, article of manufacture, and computer program product
US20080059948A1 (en) * 2003-12-09 2008-03-06 International Business Machines Corporation User configureable language independent code assist method, system, article of manufacture, and computer program product
US8185866B2 (en) * 2003-12-09 2012-05-22 International Business Machines Corporation User configurable language independent code assist method, system, article of manufacture, and computer program product
US8091068B2 (en) 2003-12-09 2012-01-03 International Business Machines Corporation User configurable language independent code assist method, system, article of manufacture, and computer program product
US9767146B2 (en) 2004-08-31 2017-09-19 International Business Machines Corporation Use of generated SQL for evaluation of decision point rules in a workflow system
US20060053106A1 (en) * 2004-08-31 2006-03-09 International Business Machines Corporation Use of generated SQL for evaluation of decision point rules in a workflow system
US8732732B2 (en) 2005-09-06 2014-05-20 Microsoft Corporation Type inference and type-directed late binding
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US8495586B2 (en) * 2006-08-24 2013-07-23 Software Analysis and Forensic Engineering Software for filtering the results of a software source code comparison
US20080052662A1 (en) * 2006-08-24 2008-02-28 Robert Marc Zeidman Software For Filtering The Results Of A Software Source Code Comparison
US8719766B1 (en) * 2006-10-16 2014-05-06 The Math Works, Inc. System and method for identifying and adding files to a project manifest
US9311059B2 (en) * 2007-04-10 2016-04-12 Adobe Systems Incorporated Software development tool that provides context-based data schema code hinting
US20140304679A1 (en) * 2007-04-10 2014-10-09 Adobe Systems Incorporated Software development tool that provides context-based data schema code hinting
US20080270989A1 (en) * 2007-04-27 2008-10-30 Azadeh Ahadian Detecting and displaying errors in database statements within integrated development environment tool
US9047337B2 (en) 2007-04-27 2015-06-02 International Business Machines Corporation Database connectivity and database model integration within integrated development environment tool
US20080270983A1 (en) * 2007-04-27 2008-10-30 Azadeh Ahadian Database connectivity and database model integration within integrated development environment tool
US20080270980A1 (en) * 2007-04-27 2008-10-30 Azadeh Ahadian Rapid application development for database-aware applications
US8566793B2 (en) 2007-04-27 2013-10-22 International Business Machines Corporation Detecting and displaying errors in database statements within integrated development environment tool
US8392880B2 (en) 2007-04-27 2013-03-05 International Business Machines Corporation Rapid application development for database-aware applications
US9489418B2 (en) 2007-04-27 2016-11-08 International Business Machines Corporation Processing database queries embedded in application source code from within integrated development environment tool
US8321836B2 (en) 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance
WO2009002683A3 (en) * 2007-06-21 2009-02-26 Microsoft Corp Late bound programmatic assistance
US20080320444A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Late bound programmatic assistance
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US8375351B2 (en) * 2007-06-23 2013-02-12 International Business Machines Corporation Extensible rapid application development for disparate data sources
US20080320441A1 (en) * 2007-06-23 2008-12-25 Azadeh Ahadian Extensible rapid application development for disparate data sources
US20100269094A1 (en) * 2007-11-13 2010-10-21 Roman Levenshteyn Technique for automatically generating software in a software development environment
US20120222007A1 (en) * 2007-11-27 2012-08-30 International Business Machines Corporation Automated defect classification
US8549465B2 (en) * 2007-11-27 2013-10-01 International Business Machines Corporation Automated defect classification for program code
US8468497B2 (en) * 2007-11-27 2013-06-18 International Business Machines Corporation Automated defect classification
US20090138851A1 (en) * 2007-11-27 2009-05-28 International Business Machines Corporation Automated defect classification
US7562344B1 (en) 2008-04-29 2009-07-14 International Business Machines Corporation Method, system, and computer program product for providing real-time developer feedback in an integrated development environment
US8375356B2 (en) 2008-06-16 2013-02-12 Microsoft Corporation Tabular completion lists
US20090313597A1 (en) * 2008-06-16 2009-12-17 Microsoft Corporation Tabular completion lists
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US20120167042A1 (en) * 2010-12-28 2012-06-28 Microsoft Corporation Contextually intelligent code editing
US9239708B2 (en) * 2010-12-28 2016-01-19 Microsoft Technology Licensing, Llc Contextually intelligent code editing
US9182945B2 (en) 2011-03-24 2015-11-10 International Business Machines Corporation Automatic generation of user stories for software products via a product content space
US8694978B1 (en) * 2011-03-25 2014-04-08 Google Inc. Function side-effect modeling by prototyping
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US20130055199A1 (en) * 2011-08-30 2013-02-28 Evgeny Kryukov Application platform for designing and executing applications
US12073196B2 (en) 2011-08-30 2024-08-27 Embarcadero Technologies, Inc. Application platform for designing and executing applications
US9703533B2 (en) * 2011-08-30 2017-07-11 Embarcadero Technologies, Inc. Application platform for designing and executing applications
US11422775B2 (en) 2011-08-30 2022-08-23 Embarcadero Technologies, Inc. Application platform for designing and executing applications
US9170782B2 (en) * 2012-03-27 2015-10-27 Microsoft Technology Licensing, Llc Extensible mechanism for providing suggestions in a source code editor
US20130263086A1 (en) * 2012-03-27 2013-10-03 Microsoft Corporation Extensible Mechanism for Providing Suggestions in a Source Code Editor
US9111040B2 (en) 2013-01-15 2015-08-18 International Business Machines Corporation Integration of a software content space with test planning and test case generation
US9513902B2 (en) 2013-01-15 2016-12-06 International Business Machines Corporation Automated code coverage measurement and tracking per user story and requirement
US9141379B2 (en) 2013-01-15 2015-09-22 International Business Machines Corporation Automated code coverage measurement and tracking per user story and requirement
US9087155B2 (en) 2013-01-15 2015-07-21 International Business Machines Corporation Automated data collection, computation and reporting of content space coverage metrics for software products
US9218161B2 (en) 2013-01-15 2015-12-22 International Business Machines Corporation Embedding a software content space for run-time implementation
US20140201711A1 (en) * 2013-01-15 2014-07-17 International Business Machines Corporation Logging and profiling content space data and coverage metric self-reporting
US9081645B2 (en) 2013-01-15 2015-07-14 International Business Machines Corporation Software product licensing based on a content space
US9659053B2 (en) 2013-01-15 2017-05-23 International Business Machines Corporation Graphical user interface streamlining implementing a content space
US9612828B2 (en) 2013-01-15 2017-04-04 International Business Machines Corporation Logging and profiling content space data and coverage metric self-reporting
US9075544B2 (en) 2013-01-15 2015-07-07 International Business Machines Corporation Integration and user story generation and requirements management
US9256518B2 (en) 2013-01-15 2016-02-09 International Business Machines Corporation Automated data collection, computation and reporting of content space coverage metrics for software products
US9256423B2 (en) 2013-01-15 2016-02-09 International Business Machines Corporation Software product licensing based on a content space
US9069647B2 (en) * 2013-01-15 2015-06-30 International Business Machines Corporation Logging and profiling content space data and coverage metric self-reporting
US9396342B2 (en) 2013-01-15 2016-07-19 International Business Machines Corporation Role based authorization based on product content space
US9569343B2 (en) 2013-01-15 2017-02-14 International Business Machines Corporation Integration of a software content space with test planning and test case generation
US9170796B2 (en) 2013-01-15 2015-10-27 International Business Machines Corporation Content space environment representation
US9063809B2 (en) 2013-01-15 2015-06-23 International Business Machines Corporation Content space environment representation
US9218165B2 (en) * 2013-02-21 2015-12-22 International Business Machines Corporation System and method for an object instance acquirer
US9244657B2 (en) * 2013-02-21 2016-01-26 International Business Machines Corporation System and method for an object instance acquirer
US20140237449A1 (en) * 2013-02-21 2014-08-21 International Business Machines Corporation System and method for an object instance acquirer
US20140237445A1 (en) * 2013-02-21 2014-08-21 International Business Machines Corporation System and method for an object instance acquirer
US9563406B1 (en) * 2013-05-15 2017-02-07 The Mathworks, Inc. Graphical user interface replacement of function signatures
US10437574B2 (en) 2013-06-04 2019-10-08 Microsoft Technology Licensing, Llc System and method for providing code completion features for code modules
US20140359572A1 (en) * 2013-06-04 2014-12-04 Microsoft Corporation System and method for providing code completion features for code modules
US9471286B2 (en) * 2013-06-04 2016-10-18 Microsoft Technology Licensing, Llc System and method for providing code completion features for code modules
US20160026439A1 (en) * 2014-07-23 2016-01-28 Apple Inc. Interactive Code Editing
US11188308B2 (en) * 2014-07-23 2021-11-30 Apple Inc. Interactive code editing
US9921812B2 (en) 2015-10-30 2018-03-20 International Business Machines Corporation GUI-driven symbol management and code generator
US9971572B2 (en) 2015-10-30 2018-05-15 International Business Machines Corporation GUI-driven symbol management and code generator
US9851955B2 (en) 2015-10-30 2017-12-26 International Business Machines Corporation GUI-driven symbol management and code generator
US9430194B1 (en) * 2015-10-30 2016-08-30 International Business Machines Corporation GUI-driven symbol management and code generator
US10691420B1 (en) * 2016-04-18 2020-06-23 The Mathworks, Inc. Dynamic function argument completion
CN111324348A (en) * 2018-12-17 2020-06-23 北京华航无线电测量研究所 Man-machine interaction interface implementation method of ground control platform of guide equipment
US11954023B2 (en) 2022-07-20 2024-04-09 Microsoft Technology Licensing, Llc Garbage collection prefetching state machine

Also Published As

Publication number Publication date
US6314559B1 (en) 2001-11-06

Similar Documents

Publication Publication Date Title
US6314559B1 (en) Development system with methods for assisting a user with inputting source code
US6002867A (en) Development system with methods providing visual form inheritance
US6185728B1 (en) Development system with methods for type-safe delegation of object events to event handlers of other objects
US6968536B2 (en) Frame component container
US5680622A (en) System and methods for quickly detecting shareability of symbol and type information in header files
US6237135B1 (en) Development system with visual design tools for creating and maintaining Java Beans components
US5978585A (en) Development system with improved methods for recompiling dependent code modules
US5758160A (en) Method and apparatus for building a software program using dependencies derived from software component interfaces
US6233726B1 (en) Development system with reference card and parameter wizard methodologies for facilitating creation of software programs
US5761510A (en) Method for error identification in a program interface
US5446900A (en) Method and apparatus for statement level debugging of a computer program
US6397378B1 (en) Test executive system and method including distributed type storage and conflict resolution
US7127707B1 (en) Intellisense in project upgrade
US7152221B2 (en) External resource files for application development and management
US6067641A (en) Demand-based generation of symbolic information
US6473707B1 (en) Test executive system and method including automatic result collection
US8423969B2 (en) Inheritance breakpoints for use in debugging object-oriented computer programs
US6282699B1 (en) Code node for a graphical programming system which invokes execution of textual code
US6401220B1 (en) Test executive system and method including step types for improved configurability
US6931627B2 (en) System and method for combinatorial test generation in a compatibility testing environment
Sharp Microsoft Visual C# step by step
US20110271258A1 (en) Software Development Tool
US20110271250A1 (en) Software Development Tool
US6345387B1 (en) Coherent object system architecture
US20060212847A1 (en) Type checker for a typed intermediate representation of object-oriented languages

Legal Events

Date Code Title Description
STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION