Xrefactory s.r.o.









Xrefactory C++: [ Main | XEmacs screenshots | Download | Order | HTML | Change Log ]
Xrefactory Java: [ Main | Emacs screenshots | jEdit screenshots | Download | Order | HTML | Change Log ]



Xrefactory Evolution





  Version 1.4 -> 1.5


  • New refactorings for Java language:

    • Move static field
    • Move static method
    • Turn virtual method to static
    • Turn static method to virtual
    • Move field
    • Encapsulate field
    • Pull up field
    • Push down field
    • Pull up method
    • Push down method
    • Rename (move) package

    Refactorings are equipped by security checks. If a refactoring is done without warning messages it is safe and behavior preserving. Note that 'Move method' refactoring can be done by turning the method static, moving it and finally turning it back virtual.

  • Fully qualified type name completions for Java. If completing a simple type name which is not imported, a fully qualified name is proposed in completions. For example completion of 'LinkedLi' proposes 'java.util.LinkedList' string.

  • Several new special context completions for Java. A completion after package declaration completes this package name (directory with cut sourcepath). A completion in the class declaration completes this file name. A completion (of an empty string) on a method definition place will propose whole definitions of inherited methods including profiles.

  • Improvements in (X)Emacs IDE interface. A possibility to define several alternatives for run command allows to define divers initial input arguments for your program run.

  • A 'build' function allows compilation followed (in case of success) by execution of your program.

  • Configuration file can refer to environment variables as well as to define its own variables.

  • Possibility to customize Xrefactory (X)Emacs options via 'customize package.

  • A simple e-lisp function 'xref-find-file-on-mouse' is bind to Shift-button2 mouse event. It opens a file pointed by mouse cursor. It may be useful if after a run of your program you receive a stack dump. It helps you to move directly to your source file (and line) referred from the stack dump.

  • A new option -exactpositionresolve is available for C programmers. This option controls how symbols which are local to a compilation unit, but usually used in several files, are linked together. This concerns symbols like macros, structures and their records, etc. Such symbols have no link names passed to linker (like global functions have). If the -exactpositionresolve option is present then such symbols are considered to be the same only if their definitions come from the same header file and if they are defined at the same position in the file (in other words if this is a single definition in the source code). Otherwise two symbols are considered to be same iff they have the same name. This is a very powerful feature because it allows perfect resolution of browsed symbols and allows to safely rename one of symbols if a name clash occurs.


  Version 1.3 -> 1.4

  • "Xref-Speller" has been renamed to "Xrefactory".

  • Class Tree. It is now possible for Java users to show curent inheritance hierarchy in separate window or in separate frame.

  • Automatic update of completion database. Intellisense code completion database is updated after any modification of a source file. In particular it means that it is no longer necessary to recompile or update tag file in order that changes appear in completions.

  • Refactoring's Undo. It is now possible to undo a suite of refactorings. The undo is built upon existing Emacs undo mechanism, but it is able to switch buffers at beginnings of refactorings.

  • Several improvements in project management.

  • A safety check detects name clashes introduced by renaming.

  • Many new browsing functions are available. For example:

    • Local motion in source. Using those functions you can simply move to the previous (next) reference of a symbol without need to push its references onto the reference stack.

    • Repushing of lastly poped references.

    • Pushing through class tree. This allows more fine selection of references to browse also for class fields, not only for mehods as it was previously. This may be very usefull for "push down field" refactorings.

  • Possibility to kill running xref process. If something is going wrong you can kill the extern process during creation or update of tag file. You can also kill the xref-server process if you feel that it is running into an inconsistent state (the next browsing action will restart it).



  Version 1.2 -> 1.3

  • Filters can be applied on showed reference list. There are 4 filter levels for now. Their meaning depends on the type of the browsed symbol. If the browsed symbol is a variable the filter levels are following.
    • Level 3: only definition and declarations are shown.
    • Level 2: as level 3 plus l-value usages.
    • Level 1: as level 2 plus usages when address of the variable is got.
    • Level 0: all references.
    If the browsed symbol is a type then the filter levels are:
    • Level 3: Only definitions and declarations are shown;
    • Level 2: as level 3 plus usages in the EXTENDS and IMPLEMENTS clauses (meaningfull only for Java);
    • Level 1: as level 2 plus all usages in the top level scope (global vars and function definitions);
    • Level 0: all references are shown.


  • When pushing references of an ambiguous symbol an additional dialog is offered to resolve the symbol manually. This can happened either for symbols inside a macro body or for Java virtual methods. In the case of Java the 'Push references' action do not show the dialog if there is only one 'usage appropriate' reference. Others pushing actions show the dialog each time when there is an ambiguity. A 'usage appropriate' reference is the method definition if you start browsing on a method invocation.

  • Filters are applied also on the symbol resolution dialogs. If the dialog for manual symbol resolution is shown, you can filter the listed symbols by following filters (remember that the list is generated relative to the symbol you have chosen to browse and that this dialog occurs practically only in resolution of Java virtual methods):
    • Level 0: Only references of methods having the same profile as the selected one and beeing from a class related to the class of the selected one.
    • Level 1: All symbols having the same profile.
    • Level 0: All symbols of the same name.


  • New environment variable JDKCLASSPATH is used for setting '.jar' archives implicitly used by the JDK tools. For example, jdk1.2 do not require that the file 'rt.jar' is listed in the CLASSPATH variable, however this file is used by compiler and interpreter. In order to permit Xrefactory using those implicit archives, you have to list them in the JDKCLASSPATH variable. The format of the JDKCLASSPATH value is the same as of the CLASSPATH variable. For example on most linux/unix systems using jdk1.2.2 from Sun you should set this variable on the "/usr/local/jdk1.2.2/jre/lib/rt.jar" value.
    Note: You do not need to set JDKCLASSPATH if using JDK from Sun Microsystems, only if using JDK from some other provider not having the same distribution structure.

  • A new option -jdkclasspath is available to override the JDKCLASSPATH variable from command line (see also the previous point).

  • New options are available for generated HTML files. Options '-htmlcutpath=', '-htmllinkcolor=' and '-htmlnounderline' control respectively pathes to be cutted when generating file hierarchy under -htmlroot, set the color of generated links and avoid links to be underlined.

  • Xref now handles situations when C pre-processor macro is using the ## gluing construction and you browse a symbol which is glued to some other.

  • Under Emacs when you call a browsing function with cursor at the begining of the buffer, then references on this buffer are pushed rather than the references of the first symbol of the buffer. If you wish to browse all the places when the current file is included, just go to the begining of the file and call any reference pushing function.


  Version 1.1 -> 1.2

  • Full integration with built-in C pre-processor is implemented. The include-included relation is stored in cross references and can be browsed when positioning the cursor on the '#include' keyword.

  • The semantics of '-update' option is changed. From now it will reload not only modified files, but also (recursively) all files including those files. A new option '-fastupdate' implements the old fashioned update (re-parsing only modified files).

  • The code completion function as well as symbol resolution now works when writing a macro body in a header file (meaning also when the macro is not invoked in this header file).

  • A possibility of multiple passes through the sources is implemented. The '-pass' markers (used in a '.xrefrc' file) allow that the same source file can be processed for different initial macro settings and that all the references are collected in a single TAG file. More info in the 'xrefrc' manual page.

  • Two new options controlling generated HTML are implemented. The '-htmllinenums' causes that lines will be numbered and the '-htmlnocolors' causes that keywords will not be highlighted. The last one can considerably decrease the size of generated HTML files.

  • A possibility to set "dynamically" input source files is implemented. If your .xrefrc file contains a shell command enclosed in `` apostrophes, the command will be executed and its standard output will be interpreted as names of files to process. Usually you will use this with the 'find' unix comand.

  • Ordering of references according to l-value and r-value usages is no more performed in on-line browsing. From now (as it was before the version 1.0), the definition goes first, than go declarations and finally all other usages ordered by their positions. If you are interested in browsing only l-value usages, you should list all references and check the 'usage character' (the first char of the line).

  Version 1.0 -> 1.1

  • A symbol retrieval function is available under Emacs/XEmacs editors. It permits to search a symbol name in the whole TAG file.

  • It is now possible to compress generated HTML files. Two options '-htmlzip=' and '-htmlsuffix=' can be used to set respectively the zipping command and the suffix of zipped files.

  Version v.93 -> 1.0

  • Automatic extraction of a region into a new function/macro is now possible under Emacs/XEmacs. The new function/macro is created from the selected region by adding an automatically generated header. When creating the header, Xrefactory takes into account full static analyse of local variable life-times.

  • Xrefactory distinguishes between l-value (for example: x=5; &x;) and r-value references (for example: f(x)) of a variable. References in listings are ordered by descending "importance": the definition goes first, then go declarations, l-value usages and finaly r-value usages.

  • The completion list is sensitive on mouse clicks under Emacs/XEmacs. Middle button click permits you to inspect the definition place of the symbol, right button selects the symbol for completion.

  • The completion and reference lists are now colored under Emacs/XEmacs. Coloring can be switched off by editing the emacs/xrefin.el configuration and key-binding file.

  • The '.xrefrc' file can now contain names of source files (or directories with the '-r' option). This information is used by the new Emacs/XEmacs macro 'xref-create-refs' (invocable from menu bar as 'Create Xref Tags File'). This macro re-creates the cross-reference file from scratch.

  • Xrefactory now understands the YACC-file format (suffix '.y'). It understands both grammar and C semantic action parts.

  • In HTML output it is possible to generate horizontal bars separating function definitions. Bars generation is triggered by the option '-htmlfunseparate'.

  • The '-brief' option is default from now. You can switch it off with the '-nobrief' option.

  Version v.92 -> v.93

  • Argument manipulation macros are available in Emacs/XEmacs. They provide global source manipulations such as adding, deleting and exchanging arguments of a function or a cpp-macro.

  • Searching of an identifier in context sensitive completions is available under Emacs/XEmacs. This permits to find for example all functions usable in the current context with name containing given string or to find all applicable methods (direct or inherited) containing given string.

  • New option '-r' is available. If a directory name is given to xref as argument and the '-r' option is present then xref searches recursively all files and subdirectories of that directory. It process all files having the '.c' and '.java' suffixes (note that '.h' are useless as they are processed when included from '.c').

  • For Java users the option '-classpath <CLASSPATH>' is now available. When present it overrides the value of the CLASSPATH environement variable.
  Version v.91 -> v.92
  • Browsing of corresponding #if((n)def)-#elif-#else-#fi directives is now possible. When positionning the cursor on an #elif, #else or #fi directive you can move directly to the corresponding #if((n)def) directive.

  • Xref is now capable to generate HTML files from your source files. When invoked with the '-html' option it converts source files into HTML format. Output files are stored in file hierarchy under the directory specified by the '-htmlroot=<dir>' option. The '-htmltab=<number>' option can be used to set tabulator value in output files.

  • 'xrefinstall' script can be used to install Xref into system directories of the computer.

  Version 0.9 -> v.91

  • New option '-refnum=<number>' is available. It causes that the reference file is splitted into the <number> smaller files. If the <number> is greater than 1 then the file specified by the '-refs <file>' option is interpreted as directory name, where reference files will be stored.

    When Xref searches references of a given symbol, only one of reference files is read. In consequence '-refnum' option makes browsing much faster for large projects. It is recomennded to specify the <number> proportionally to the size of your project (aproximately one cross reference file per 5 000 lines of code). The default value is '-refnum=1'.

    NOTE: If you change the 'refnum' constant you have to re-CREATE your cross reference files.

  • The possibility to list all references of given symbol is now available under Emacs/XEmacs. The list is created in a separate window, each line contains the reference in the form <file>:<line number>:<content of the line>. Selecting such a line will move you directly to this reference in the source code window. The new macro can be invoked from the Emacs/XEmacs menu bar, or by the 'M-x xref-listCxrefs' command.

  Version 0.8 -> 0.9

  • Personal '.xrefrc' file placed in user's HOME directory is the preferred way of passing options to Xref.

  • The 'Grey+' and 'Grey-' keys are released under Emacs/XEmacs. You should use 'F4' and 'F3' keys instead. If you wish to continue using original keys you have to edit 'xrefin.gel' file in your editor subdirectory of Xref distribution and then run 'sh init' script.

  Version 0.7 -> 0.8

  • Xref now can read the 'classes.zip' Java archive file. However it is still unable to read compressed archives. If you are using some, you will need to zip them with no compression.

  Version 0.6 -> 0.7

  • Semantics of the '-update' command line option changed! Now, the 'xref -update file1 ...' command do not only updates references for the explicitly mentioned files 'file1 ...', but also for all modified files mentioned in the cross reference file. For example, the command 'xref -update' will first read the cross references file, then it reparse modified files. In practice it means that you can update cross reference file by just typing the 'xref -update' command.

    NOTE: You have to CREATE the cross reference file with the version 0.7 (and later) in order to make the '-update' option works properly!

    NOTE2: Only references of really modified files are updated. It means that the 'include-included' relation is not taken into accounts.

  • If no input file is given xref provide no action! This is different to previous versions, where the standard input was scanned as being an input file.

  • The directory structure for source distribution changed! This concerns only users, using the 'xref-any' source distribution. From now, the xref source distribution is placed in the 'xref-any' directory, not in the 'xref' directory. The 'xref' directory is then created automatically and it contains only the distribution for the given platform (no sources). If you are updating the source distribution from older revision, please modify your path setting to this new configuration (it means change the path '.../xref/xref' to '.../xref').

  • New setup utility!

  Version 0.5 -> 0.6

  • Under Emacs/XEmacs you can now use the 'safe renaming' macro. It can be invoked from the Emacs/XEmacs menu bar, or by the 'M-x xref-rename' command.

  • Three special 'program commentary' lexems '/*&', '&*/' and '//&' are recognized by Xref and are ignored (meaning they do not cause putting parts of program into commentary during cross-referencing). For example, in the code:
    void fun(int i) {
    //& printf( "entering fun(%d)n" , i );
    ...
    /*& printf( "leaving fun(%d)n" , i ); &*/
    }
    
    the occurrences of the variable 'i' in the 'printf' calls will be included into cross-references (and so renamed, ...), even when they are commented for standard compiler.