ChangeLog |
30/08/2014 - revision 732 (functionality added + bug fixes):- Several fixes in Extract Clone Refactoring. 20/07/2014 - revision 701 (functionality added + bug fixes):The first stable version of the Clone Visualization and Refactoring feature is released. 06/04/2014 - revision 633 (functionality added):- Added support for Synchronized and Labeled statements in Extract Clone refactoring. 29/03/2014 - revision 631 (functionality added):- Fixed the matching of method invocations with method declarations having varargs parameters. 22/02/2014 - revision 618 (Bug fix):Fixed the matching of InfixExpressions. Fixed a bug in the highlighting of differences for SimpleTypes. 21/12/2013 - revision 610 (Bug fix):Improved the matching of method invocations with method declarations to address the cases where 'type parameter names' are replaced with actual types in the method calls. 14/12/2013 - revision 608 (Bug fixes, functionality added):- Improved the user interface of Extract Clone Refactoring, so that it presents multiple refactoring opportunities from a pair of methods in the same Wizard page (using a combo for allowing the user to select among the different refactoring opportunities). 13/10/2013 - revision 591 (Bug fixes):- Fixed the handling of additional methods moved along with source method in Move Method Refactoring. 06/10/2013 - revision 587 (functionality added):- New Clone Visualization and Refactoring (Beta) support. 02/09/2013 - revision 578 (functionality added):New Code Smell Package Explorer for Feature Envy and God Class. 02/07/2013 - revision 525 (functionality added):Code Smell Visualizations have been enhanced with auto scrollbar adjustment, zoom support (from the View menu options or by scrolling the mouse wheel). 21/06/2013 - revision 514 (Bug fix):The binding returned from SimpleName expressions should be always checked for NullPointer. Many thanks to Wei Wu (École Polytechnique de Montréal) for reporting the problem. 13/06/2013 - revision 512 (General functionality added):New Code Smell Visualizations for Feature Envy and God Class. 28/02/2013 - revision 448 (Bug fix):Fixed a bug in the construction of control flow graphs. Many thanks to Danny Verloop (TU Delft) for reporting the problem. 06/11/2012 - revision 403 (JLS 4 support):Updated JDeodorant to support Union Types introduced in Java 7. Union types are mainly used in the new Multicatch feature: try { 04/11/2012 - revision 402 (JLS 4 support):Updated JDeodorant to support JLS 4. This affected the construction of Control Flow and Program Dependence graphs, since the new try-with-resources statements may declare resources (i.e., objects that must be closed after the program is finished with them) in Java 7.
26/10/2012 - revision 400 (Long Method bug fix):Alias analysis could cause in some cases an infinite recursion. The new implementation of alias analysis improves significantly the performance. 09/10/2012 - revision 399 (Bug fix):The exclusion of classes containing method with @Test annotations from the analysis may cause NullPointer exceptions (such a case was found in JUnit). As a result, test methods are not excluded from the analysis. 28/02/2012 - revision 396 (General functionality added):Created a Standalone version of JDeodorant for the detection of refactoring opportunities from Eclipse applications. 26/02/2012 - revision 395 (Type Checking bad smell):The results of Type Checking bad smell are now reported in a tree view and are grouped per inheritance hierarchy or named constants. 21/11/2011 - revision 394 (Feature Envy & God Class bad smell):Fixed the problem of inherited static fields being accessed by a method to be moved. After the move the inherited static fields should be statically accessed using the name of the class in which they are declared. 16/11/2011 - revision 393 (Feature Envy bad smell):Added a new precondition for Move Method refactoring. The variable (parameter or field of target class type) through which the moved method will be invoked must not be assigned within the body of the candidate method to be moved. 16/11/2011 - revision 393 (Type Checking bad smell):Fixed a bug in the application of Replace Conditional with Polymorphism refactoring. The context class must be public when the type-checking branches access fields/methods of the context class and the subclasses belong to a different package with respect to the context class. 21/10/2011 - revision 392 (Type Checking bad smell):Fixed a bug in the application of Replace Conditional with Polymorphism refactoring where the cast expression (casting the supertype to the corresponding subtype) should be replaced with "this" expression. For example, the following case 04/09/2011 - revision 391 (General functionality added):Fixed the unnecessary importing of nested types in all implemented refactorings. 22/04/2011 - revision 389 (God Class bad smell):- Added the feature of concept identification. The extractable concepts are labeled with the most frequent term(s) resulting from tokenizing and stemming the names of the extracted members. The concepts/clusters which are created incrementally (i.e., resulting from another cluster by adding only a single class member) are excluded from being suggested.
17/04/2011 - revision 387 (God Class bad smell):Improved the application of Extract Class refactoring in order to properly initialize extracted fields having "this" expressions in their initializer. 11/04/2011 - revision 386 (Long Method bad smell):The results of Long Method bad smell are now reported in a tree view (the results are grouped per variable). The rename button has been removed and the renaming feature has been embedded in the refactoring wizard as a user input page. 10/04/2011 - revision 385 (God Class bad smell):Improved the application of Extract Class refactoring in order to properly handle extracted members being static. 04/04/2011 - revision 384 (God Class bad smell):- Added a feature in Extract Class refactoring that handles properly the initialization of final fields in the extracted class when they are initialized inside constructors. 31/03/2011 - revision 383 (God Class bad smell):The clustering algorithm was improved so that it no longer requires distance thresholds. Now, it reports the clusters formed at the merging points. 15/03/2011 - revision 382 (User interface improvements):- Added a user option in the input pages of the Move Method and Extract Class refactorings allowing to keep delegates to the public moved methods. 12/03/2011 - revision 380 (God Class bad smell):- Extract Class Refactoring has been implemented from scratch and several bugs have been fixed. 09/01/2011 - revision 377 (Long Method bad smell):The try/catch blocks and throw statements are handled according to the approach proposed by Allen & Horwitz (2003). 31/12/2010 - revision 376 (Long Method bad smell):Added a rule for the preservation of output dependences. 25/12/2010 - revision 375 (Long Method bad smell):The unlabeled break and continue statements within the body of loops and the break statements within the body of switch statements are handled according to the augmented program dependence graph (APDG) approach proposed by Ball & Horwitz (1993), Kumar & Horwitz (2002). 02/12/2010 - revision 374 (Type Checking bad smell):- The variables which are declared within expressions are properly handled. 25/11/2010 - revision 373 (General functionality added):Added support for the detection of friend classes according to the Law of Demeter. 08/11/2010 - revision 372 (General functionality added):- Added functionality allowing the user to rate each identified refactoring opportunity with a rating ranging from 0 to 5 stars. The provided ratings will help the JDeodorant team to improve the ranking mechanism that sorts the identified refactoring opportunities. 27/08/2010 - revision 370 (Long Method bad smell):If the declaration statement of variable criterion is nested in a deeper level compared to the insertion point of the extracted method invocation, then the extracted method should be declared with a void return type. 18/08/2010 - revision 368 (General functionality added):Added support for code smell evolution analysis throughout successive versions of a given Java project. 12/07/2010 - revision 365 (Long Method bad smell):Throw statements being control dependent on slice statements are properly handled. 11/07/2010 - revision 364 (God Class bad smell):The tool supports the identification of Extract Class refactoring opportunities for the decomposition of "God" classes. 04/07/2010 - revision 359 (Long Method bad smell):Program analysis has been extended to handle super method invocations. 01/07/2010 - revision 354 (Long Method bad smell):The slice profile of a method is composed of complete computation and object state slices instead of traditional slices. 01/07/2010 - revision 353 (Long Method bad smell):-The case where an argument is passed as parameter to an abstract invoked method is properly analyzed. 26/06/2010 - revision 350 (Long Method bad smell):The performance of program analysis has been improved by indexing the structure of analyzed inheritance hierarchies. 21/06/2010 - revision 346 (Long Method bad smell):The slice profile of a method includes only the local variables whose scope is the block corresponding to the method body. 20/06/2010 - revision 345 (Long Method bad smell):An additional slice extraction threshold has been added which is related with the maximum traversal depth of the call graphs corresponding to invoked methods from libraries. 17/06/2010 - revision 344 (Long Method bad smell):The variables which are not defined within the body of the examined method are automatically excluded from its slice profile. 15/06/2010 - revision 343 (Long Method bad smell):A calculator for slice-based cohesion metrics has been added.
11/06/2010 - revision 342 (Long Method bad smell):An additional slice extraction threshold has been added which is related with the size of the methods being examined. 05/06/2010 - revision 340 (Long Method bad smell):The implementation of program analysis has been improved in terms of design and performance. 26/05/2010 - revision 338 (Feature Envy bad smell):In the application of Move Method refactoring, the javadoc @param tags are properly updated. 25/05/2010 - revision 337 (Long Method bad smell):Two Annotation markers have been added in order to highlight the slice statements that will be duplicated in red color and the slice statements that will be removed from the original method in green color.
In the case the Annotation markers do not appear (this may happen if you have already installed a previous version of JDeodorant plug-in), simply remove gr.uom.java.jdeodorant_1.0.0.jar from Eclipse plugins directory, start Eclipse (after removing JDeodorant plug-in from plugins directory), and finally re-extract JDeodorant plug-in in Eclipse plugins directory. 23/05/2010 - revision 336 (Type Checking bad smell):The prefix expressions having a field as operand and +, -, !, ~ as operator are properly handled. 22/05/2010 - revision 334 (Type Checking bad smell):In the application of Replace Type Code with State/Strategy and Replace Conditional with Polymorphism refactorings, the required import declarations are now added using class ImportRewrite. Moreover, the changes to already existing classes are represented with CompilationUnitChange objects. 20/05/2010 - revision 333 (Feature Envy bad smell):-Move Method Refactoring preconditions have been updated: -Move Method Refactoring mechanics have been updated: 19/05/2010 - revision 332 (Long Method bad smell):The resulting slice extraction refactoring opportunities are grouped based on common variables used as slicing criteria and sorted in ascending order according to their average duplication ratio. 06/05/2010 - revision 331 (Type Checking bad smell):Type Check Elimination preconditions have been updated: 06/05/2010 - revision 330 (Feature Envy bad smell):Move Method Refactoring preconditions have been updated: 05/05/2010 - revision 329 (Feature Envy bad smell):In the application of Move Method refactoring, the original method should be turned into a method that delegates to the moved one, in the case where a subclass invokes the method to be moved by means of a super method invocation. Many thanks to Marios Fokaefs for pointing out this issue. 02/05/2010 - revision 328 (Feature Envy bad smell):In the application of Move Method refactoring, the required import declarations to target class are now added using class ImportRewrite. Moreover, the changes to source and target class are represented with CompilationUnitChange objects. 22/04/2010 - revision 327 (Feature Envy bad smell):Fixed a problem in the application of Move Method refactoring that appeared when the method to be moved accessed through a reference to the target class a field belonging to the superclass of the target class. In this case the reference from which the superclass field was accessed was not removed from the body of the moved method. The problem was found based on a code example provided by Philipp Marcus. 17/04/2010 - revision 326 (Long Method bad smell):Fixed a bug in the the application of Extract Method refactoring which is related with the way that the name of the extracted method was obtained. 11/04/2010 - revision 325 (Long Method bad smell):The CompilationUnits corresponding to analyzed library classes are no longer permanently stored in memory. All references to MethodDeclarations and VariableDeclarations have been replaced with references to the keys of their bindings. A separate caching mechanism is employed that keeps a constant number of CompilationUnits corresponding to library IClassFiles in a queue. The size of the queue can be configured through JDeodorant Preference Page. 05/04/2010 - revision 324 (General functionality added):Added functionality that enables the comparison of a class instance creation with the signature of a constructor. 29/03/2010 - revision 322 (Long Method bad smell):An anti-dependence exists from statement p to statement q due to variable x, when there is a control flow path starting from statement p that uses the value of x and ending to statement q that modifies the value of x, regardless of any intermediate statements that may use the value of variable x. 28/03/2010 - revision 321 (Long Method bad smell):Break and continue statements inside loops are properly handled. 27/03/2010 - revision 320 (Long Method bad smell):An additional rule has been added regarding slice extraction: 27/03/2010 - revision 319 (General functionality added):The size of the CompilationUnit cache can be set by the user in the Preference Page of JDeodorant. 16/03/2010 - revision 318 (Long Method bad smell):Try/catch blocks are properly copied to the extracted method and removed from the original method if necessary. 11/03/2010 - revision 316 (Major functionality change):When the identification of code smells is performed on the same project, then only the compilation units that have been changed or added are parsed. 09/03/2010 - revision 315 (Long Method bad smell):Fixed the handling of blocks that exist within the body of a switch statement in the construction of control flow graph. 08/03/2010 - revision 314 (General functionality added):- The identification of Feature Envy and Type Checking code smells can now be performed on a whole Java Project, a Package Fragment Root of a project, a Package Fragment of a project, a Compilation Unit, and a Type (along with its nested types) by selecting the appropriate element on the Package Explorer. This feature has been requested/suggested by Prakash Badlani. 07/03/2010 - revision 313 (Long Method bad smell):The analysis of external (library) method invocations also includes the methods which are invoked through parameters that ate passed as arguments in method invocations inside the body of the method under examination. 06/03/2010 - revision 311 (Long Method bad smell):- The computation of indispensable nodes and passed parameters for the union of static slices has been improved. 04/03/2010 - revision 309 (Long Method bad smell):In a polymorphic method call, the subtypes belonging to an inheritance depth level which is deeper than first level and whose superclass is an abstract type are also included in the examination for concrete implementations of the polymorphic method. 03/03/2010 - revision 308 (Long Method bad smell):- Alias Analysis can be enabled/disabled in the Preference Page of JDeodorant. 03/03/2010 - revision 307 (General functionality added):The results of the identification process can be saved in a tab delimited text file by clicking on "Save Results" button. This feature has been requested/suggested by Prakash Badlani. 02/03/2010 - revision 305 (Long Method bad smell):The extraction of object references which are fields, parameters, or local variables whose declaration statement does not belong to slice nodes has been fixed. 02/03/2010 - revision 305 (Type Checking bad smell):A progress bar has been added for the identification process of Type Checking code smells. 17/02/2010 - revision 304 (Long Method bad smell):The identification of Long Method code smells can now be performed on a whole Java Project, a Package Fragment Root of a project, a Package Fragment of a project, a Compilation Unit, a Type (along with its nested types), and a Method of a Type by selecting the appropriate element on the Package Explorer.
15/02/2010 - revision 301 (Long Method bad smell):Switch statement is fully supported in the construction of control flow and program dependence graphs. 13/02/2010 - revision 300 (Long Method bad smell):- Added support for Alias Analysis. An alias relationship exists between two references if they refer to the same object in memory during program execution. For example, in the following code fragment 09/02/2010 - revision 297 (Feature Envy bad smell):The access modifier of the source class is set to public, when source class type is passed as parameter to the moved method and source class belongs to a different package compared to target class. 05/02/2010 - revision 295 (Type Checking bad smell):Before the application of Replace Type Code with State/Strategy refactoring, a dialog was added that gives the option to the user to rename the default class names which were automatically generated for the Abstract State/Strategy based on the name of the variable holding the state, and for the Concrete States/Strategies based on the names of the corresponding named constants.
23/01/2010 - revision 293 (General bug fix):Fixed a serious bug which caused an exception in the identification process after the application, undo, or redo of a refactoring. This bug was introduced after revision 287 on September 13th 2009 and it is very important to update to the latest build of JDeodorant. 29/12/2009 - revision 289 (Long Method bad smell):An additional behavior preservation rule has been added: The statements which are duplicated in both the remaining and the extracted method should not contain any class instance creation or array creation. 13/09/2009 - revision 287 (Major functionality change):AST nodes corresponding to Java elements of the project under examination are no longer permanently stored in memory. Instead, a caching mechanism is employed that enables the recovery and processing of AST information using temporary memory storage. This revision is compatible with Eclipse 3.5 Galileo. 21/04/2009 - revision 283 (Long Method bad smell):A Preference page that can be used to reduce the number of reported Slice Extraction refactoring suggestions by adjusting various threshold values has been added. The thresholds are related the size of the slice and the degree of statement duplication caused by each suggestion. Many thanks to Eric Bouwers for suggesting this feature. 05/03/2009 - revision 281:Fixed a bug associated with the import declaration of types which are right operands in instanceof expressions (bug reported by Theodore Chaikalis). 27/02/2009 - revision 280 (Long Method bad smell):Fixed the problem of leaving empty "if/else" or "if/else if" structures after the extraction of slice unions. 20/02/2009 - revision 279 (Long Method bad smell):- Fixed a bug concerning the handling of self-associations which caused an infinite loop when a method invoked itself through a self-association field. 25/01/2009 - revision 278 (Long Method bad smell):- The fields which are accessed by the slice statements are not passed as parameters to the extracted method. 22/01/2009 - revision 276 (Long Method bad smell):The data dependency and anti-dependency edges which are carried by a loop node that does not belong to the block-based region are excluded from backward slicing traversal, even if both source and destination nodes belong to the block-based region. 18/01/2009 - revision 275 (Long Method bad smell):The source code of invoked methods belonging to external library/API classes is analyzed in order to improve the precision of extracted slices. To enable the analysis of methods belonging to Java library classes you should attach the Java API source code by following this guide. 28/12/2008 - revision 274 (Long Method bad smell):The slice extraction refactoring opportunities are sorted in ascending order according to the ratio of duplicated statements to extracted statements. 27/12/2008 - revision 273 (Long Method bad smell):The preview of changes in slice extraction refactoring has been improved by employing a tree-like representation of changes as shown below.
21/12/2008 - revision 272 (Long Method bad smell):After four months of constant research and development, the tool supports the automatic identification of slice extraction refactoring opportunities for the decomposition of complex methods. 10/08/2008 - revision 232 (Type Checking bad smell):If the field holding the current state is explicitly initialized with the value of a named constant, then it is initialized with an instance creation of the subclass corresponding to the specific named constant after the application of Replace Type Code with State/Strategy refactoring. If the field holding the current state is implicitly initialized (i.e. its field declaration does not have an initializer), then it is initialized with an instance creation of the subclass corresponding to the named constant which has the zero value after the application of Replace Type Code with State/Strategy refactoring. 08/08/2008 - revision 231 (Type Checking bad smell):The assignments of fields having +=, -=, *=, /=, %=, &=, |=, ^=, = and >>>>= as operator are properly handled. The prefix and postfix expressions having a field as operand and ++, -- as operator are properly handled. 03/08/2008 - revision 229 (Feature Envy bad smell):The classes that directly or indirectly extend "junit.framework.TestCase" (JUnit 3.x) or contain at least one method annotated with @Test annotation (JUnit 4.x) are automatically excluded from the analysis. 02/08/2008 - revision 228 (Feature Envy bad smell):When the user selects a specific package to be analyzed, its subpackages are also included in the analysis. 21/07/2008 - revision 227 (Feature Envy bad smell):The calculation of the Entity Placement metric for the suggested Move Method refactorings has been optimized, by recalculating only the minimum required number of distances. 17/07/2008 - revision 226 (Type Checking bad smell):The handling of accessed static fields inside the type-checking code fragment has been improved (bug fixing). 16/07/2008 - revision 224 (Major functionality change):All implemented refactorings now extend class "org.eclipse.ltk.core.refactoring.Refactoring" in order to provide undo/redo support in the refactoring history of Eclipse. Moreover, a refactoring wizard has been added that enables the preview of the changes before the application of each refactoring. 06/07/2008 - revision 222 (Feature Envy bad smell):The tooltip indicating a dependency between two refactoring suggestions has been enhanced. It contains a link that selects the row of the suggestion corresponding to the dependency when it is clicked by the user.
29/06/2008 - revision 221 (Type Checking bad smell):If fields from the superclass of Context are accessed/assigned inside the type-checking branches, their accesses/assignments are replaced with the corresponding getter/setter method invocations through the Context parameter reference. 27/06/2008 - revision 219 (Type Checking bad smell):- The plug-in has been tested for compatibility with Eclipse 3.4 (Ganymede). 26/06/2008 - revision 218 (Type Checking bad smell):The methodology has been updated to handle if statement expressions that consist of sub-expressions combined with conditional OR operators (||). All sub-expressions should perform type-checking on the same variable holding the current state. In this case an intermediate class is created between the abstract class and the leaf concrete classes corresponding to the named constants that participate in the type-checks. The common behavior (then clause of the if statement) is placed in the overriding method of the intermediate class, while the leaf concrete classes simply inherit the intermediate class without overriding the polymorphic method. 16/06/2008 - revision 216 (Type Checking bad smell):Type Check Elimination preconditions have been updated: 13/06/2008 - revision 213 (Type Checking bad smell):The sorting mechanism of the refactoring suggestions has been improved so that the suggestions belonging to the same group appear consecutively. 11/06/2008 - revision 212 (Type Checking bad smell):The type-check elimination opportunities are sorted according to their impact on the design of the system under study using the following criteria:
10/06/2008 - revision 211 (Type Checking bad smell):A bug was fixed in the application of Replace Conditional with Polymorphism refactoring. 04/06/2008 - revision 208 (Feature Envy bad smell):A Progress Monitor has been added to the identification of Feature Envy bad smells. The user can also cancel the process of identification. 16/05/2008 - revision 207 (Type Checking bad smell):The type-checking code fragments from all system classes are examined in order to identify common static fields representing relevant states. In this way, all the related states are transformed into a single inheritance hierarchy which is employed by all the corresponding type-checking code fragments. 29/04/2008 - revision 201 (Type Checking bad smell):- Enumerated types are now supported. 23/04/2008 - revision 200 (Type Checking bad smell):The identification of the returned variable corresponding to a type-checking code fragment has been improved. 15/04/2008 - revision 198 (Feature Envy bad smell):The identification of Feature Envy bad smells can also be performed on specific packages of a project. 31/03/2008 - revision 195 (Feature Envy bad smell):Recursive/self method invocations inside the body of the method to be moved are now properly handled. 24/03/2008 - revision 194 (Feature Envy bad smell):The amount of memory required for the pre-evaluation of the effect of each refactoring suggestion on design quality has been substantially reduced. 24/03/2008 - revision 194 (Type Checking bad smell):- Runtime Type Identification by comparing the runtime class of an object (using getClass() method) with a Type Literal (Type.class) is supported. 16/03/2008 - revision 187 (Type Checking bad smell):- The user has the ability to change the default name of the abstract method. 12/03/2008 - revision 181 (Type Checking bad smell):- Instanceof expressions are taken into account for the identification of Replace Conditional with Polymorphism refactoring opportunities. 27/02/2008 - revision 177 (Feature Envy bad smell):Move Method Refactoring preconditions have been updated: 25/02/2008 - revision 174 (Feature Envy bad smell):Bug fixed in the application of Move Method Refactoring: 23/02/2008 - revision 171 (Feature Envy bad smell):Bug fixed in the application of Move Method Refactoring: 14/02/2008 - revision 166 (Feature Envy bad smell):Move Method Refactoring preconditions have been updated: 10/02/2008 - revision 164 (Feature Envy bad smell):- The selected method to be moved is automatically renamed if another method of the target class has identical signature. 06/02/2008 - revision 161 (Feature Envy bad smell):- Static method invocations are excluded from entity sets. 02/02/2008 - revision 160 (Feature Envy bad smell):When the user double-clicks on a candidate "Move Method" or "Extract and Move Method" refactoring, a tooltip appears (by hovering over the highlighted method or method fragment) indicating the total number of methods/fields that the highlighted method or method fragment uses for each accessed class. 20/01/2008 - revision 157 (Feature Envy bad smell):A method is considered as delegate, if it contains only one statement of the following format: 14/01/2008 - revision 156 (Feature Envy bad smell):- The classes that extend "junit.framework.TestCase" are automatically excluded from the analysis. 06/01/2008 - revision 154 (Feature Envy bad smell):Local variable declarations are not only sought within VariableDeclarationStatements, 30/12/2007 - revision 152 (Feature Envy bad smell):The calculation of the Entity Placement metric for each candidate refactoring has been optimized. 25/12/2007 - revision 150 (Type Checking bad smell):Complex if statement infix expressions (with conditional operators &&, ||) are properly handled. |