diff --git a/src/gr/uom/java/ast/decomposition/cfg/mapping/DivideAndConquerMatcher.java b/src/gr/uom/java/ast/decomposition/cfg/mapping/DivideAndConquerMatcher.java index 744e687c..91594ae9 100644 --- a/src/gr/uom/java/ast/decomposition/cfg/mapping/DivideAndConquerMatcher.java +++ b/src/gr/uom/java/ast/decomposition/cfg/mapping/DivideAndConquerMatcher.java @@ -1615,7 +1615,7 @@ private List getMaximumStates(List currentStates) { for(MappingState currentState : currentStates) { if(currentState.getSize() > max) { max = currentState.getSize(); - maximumStates.clear(); + clear(maximumStates, max); maximumStates.add(currentState); } else if(currentState.getSize() == max) { @@ -1643,4 +1643,15 @@ else if(currentState.getDistinctDifferenceCount() == minimum) { } return maximumStatesWithMinimumDifferences; } + + private void clear(List maximumStates, int max) { + List keepStates = new ArrayList(); + for(MappingState state : maximumStates) { + if(state.getSize() == max-1) { + keepStates.add(state); + } + } + maximumStates.clear(); + maximumStates.addAll(keepStates); + } } diff --git a/src/gr/uom/java/ast/decomposition/cfg/mapping/MappingState.java b/src/gr/uom/java/ast/decomposition/cfg/mapping/MappingState.java index dd437e9b..92010d16 100644 --- a/src/gr/uom/java/ast/decomposition/cfg/mapping/MappingState.java +++ b/src/gr/uom/java/ast/decomposition/cfg/mapping/MappingState.java @@ -185,7 +185,7 @@ public List getMaximumCommonSubGraphs() { for(MappingState state : leaves) { if(state.getSize() > max) { max = state.getSize(); - maximumStates.clear(); + clear(maximumStates, max); maximumStates.add(state); } else if(state.getSize() == max) { @@ -196,6 +196,17 @@ else if(state.getSize() == max) { return maximumStates; } + private void clear(List maximumStates, int max) { + List keepStates = new ArrayList(); + for(MappingState state : maximumStates) { + if(state.getSize() == max-1) { + keepStates.add(state); + } + } + maximumStates.clear(); + maximumStates.addAll(keepStates); + } + private boolean containsSameState(List states, MappingState state) { for(MappingState oldState : states) { if(oldState.sameNodeMappings(state)) diff --git a/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractClassRefactoring.java b/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractClassRefactoring.java index 3ae59d59..fcfceb32 100644 --- a/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractClassRefactoring.java +++ b/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractClassRefactoring.java @@ -59,6 +59,7 @@ import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.MethodInvocation; import org.eclipse.jdt.core.dom.Modifier; +import org.eclipse.jdt.core.dom.Name; import org.eclipse.jdt.core.dom.PackageDeclaration; import org.eclipse.jdt.core.dom.PostfixExpression; import org.eclipse.jdt.core.dom.PrefixExpression; @@ -97,6 +98,9 @@ @SuppressWarnings("restriction") public class ExtractClassRefactoring extends Refactoring { + private static final String GETTER_PREFIX = "get"; + private static final String SETTER_PREFIX = "set"; + private static final String ACCESSOR_SUFFIX = "2"; private IFile sourceFile; private CompilationUnit sourceCompilationUnit; private TypeDeclaration sourceTypeDeclaration; @@ -185,6 +189,32 @@ public Set getJavaElementsToOpenInEditor() { return javaElementsToOpenInEditor; } + private String appendAccessorMethodSuffix(String accessorMethodName) { + boolean sourceTypeContainsMethodWithAccessorNameThatIsNotPureAccessor = false; + for(MethodDeclaration methodDeclaration : extractedMethods) { + if(methodDeclaration.getName().getIdentifier().equals(accessorMethodName)) { + if(accessorMethodName.startsWith(GETTER_PREFIX)) { + SimpleName simpleName = MethodDeclarationUtility.isGetter(methodDeclaration); + if(simpleName == null) { + sourceTypeContainsMethodWithAccessorNameThatIsNotPureAccessor = true; + break; + } + } + else if(accessorMethodName.startsWith(SETTER_PREFIX)) { + SimpleName simpleName = MethodDeclarationUtility.isSetter(methodDeclaration); + if(simpleName == null) { + sourceTypeContainsMethodWithAccessorNameThatIsNotPureAccessor = true; + break; + } + } + } + } + if(sourceTypeContainsMethodWithAccessorNameThatIsNotPureAccessor) { + accessorMethodName += ACCESSOR_SUFFIX; + } + return accessorMethodName; + } + public void apply() { for(MethodDeclaration method : extractedMethods) { int modifiers = method.getModifiers(); @@ -252,7 +282,7 @@ private void handleInitializationOfExtractedFieldsWithThisExpressionInTheirIniti ListRewrite constructorBodyRewrite = sourceRewriter.getListRewrite(methodDeclaration.getBody(), Block.STATEMENTS_PROPERTY); AST contextAST = sourceTypeDeclaration.getAST(); MethodInvocation setterMethodInvocation = contextAST.newMethodInvocation(); - sourceRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName("set" + modifiedFieldName), null); + sourceRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName(SETTER_PREFIX + modifiedFieldName), null); ListRewrite setterMethodInvocationArgumentsRewrite = sourceRewriter.getListRewrite(setterMethodInvocation, MethodInvocation.ARGUMENTS_PROPERTY); setterMethodInvocationArgumentsRewrite.insertLast(fieldFragment.getInitializer(), null); if((fieldFragment.resolveBinding().getModifiers() & Modifier.STATIC) != 0) { @@ -1018,7 +1048,7 @@ private void createSetterMethodInSourceClass(IVariableBinding variableBinding) { ListRewrite methodDeclarationModifiersRewrite = sourceRewriter.getListRewrite(newMethodDeclaration, MethodDeclaration.MODIFIERS2_PROPERTY); methodDeclarationModifiersRewrite.insertLast(contextAST.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD), null); String methodName = fragment.getName().getIdentifier(); - methodName = "set" + methodName.substring(0,1).toUpperCase() + methodName.substring(1,methodName.length()); + methodName = SETTER_PREFIX + methodName.substring(0,1).toUpperCase() + methodName.substring(1,methodName.length()); sourceRewriter.set(newMethodDeclaration, MethodDeclaration.NAME_PROPERTY, contextAST.newSimpleName(methodName), null); ListRewrite methodDeclarationParametersRewrite = sourceRewriter.getListRewrite(newMethodDeclaration, MethodDeclaration.PARAMETERS_PROPERTY); SingleVariableDeclaration parameter = contextAST.newSingleVariableDeclaration(); @@ -1066,7 +1096,7 @@ private void createGetterMethodInSourceClass(IVariableBinding variableBinding) { ListRewrite methodDeclarationModifiersRewrite = sourceRewriter.getListRewrite(newMethodDeclaration, MethodDeclaration.MODIFIERS2_PROPERTY); methodDeclarationModifiersRewrite.insertLast(contextAST.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD), null); String methodName = fragment.getName().getIdentifier(); - methodName = "get" + methodName.substring(0,1).toUpperCase() + methodName.substring(1,methodName.length()); + methodName = GETTER_PREFIX + methodName.substring(0,1).toUpperCase() + methodName.substring(1,methodName.length()); sourceRewriter.set(newMethodDeclaration, MethodDeclaration.NAME_PROPERTY, contextAST.newSimpleName(methodName), null); Block methodDeclarationBody = contextAST.newBlock(); ListRewrite methodDeclarationBodyStatementsRewrite = sourceRewriter.getListRewrite(methodDeclarationBody, Block.STATEMENTS_PROPERTY); @@ -1159,7 +1189,7 @@ else if(oldLeftHandSide instanceof FieldAccess) { } String originalFieldName = variableBinding.getName(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); - targetRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName("set" + modifiedFieldName), null); + targetRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName(SETTER_PREFIX + modifiedFieldName), null); } ListRewrite setterMethodInvocationArgumentsRewrite = targetRewriter.getListRewrite(setterMethodInvocation, MethodInvocation.ARGUMENTS_PROPERTY); if(!newAssignment.getOperator().equals(Assignment.Operator.ASSIGN)) { @@ -1175,7 +1205,7 @@ else if(oldLeftHandSide instanceof FieldAccess) { } String originalFieldName = variableBinding.getName(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); - targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName("get" + modifiedFieldName), null); + targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName(GETTER_PREFIX + modifiedFieldName), null); } targetRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, ast.newSimpleName(modifiedSourceTypeName), null); InfixExpression infixExpression = ast.newInfixExpression(); @@ -1358,7 +1388,7 @@ else if(oldOperand instanceof FieldAccess) { } String originalFieldName = variableBinding.getName(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); - targetRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName("set" + modifiedFieldName), null); + targetRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName(SETTER_PREFIX + modifiedFieldName), null); } ListRewrite setterMethodInvocationArgumentsRewrite = targetRewriter.getListRewrite(setterMethodInvocation, MethodInvocation.ARGUMENTS_PROPERTY); IMethodBinding getterMethodBinding = findGetterMethodInSourceClass(variableBinding); @@ -1373,7 +1403,7 @@ else if(oldOperand instanceof FieldAccess) { } String originalFieldName = variableBinding.getName(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); - targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName("get" + modifiedFieldName), null); + targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName(GETTER_PREFIX + modifiedFieldName), null); } targetRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, ast.newSimpleName(modifiedSourceTypeName), null); InfixExpression infixExpression = ast.newInfixExpression(); @@ -1491,7 +1521,7 @@ else if(oldOperand instanceof FieldAccess) { } String originalFieldName = variableBinding.getName(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); - targetRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName("set" + modifiedFieldName), null); + targetRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName(SETTER_PREFIX + modifiedFieldName), null); } ListRewrite setterMethodInvocationArgumentsRewrite = targetRewriter.getListRewrite(setterMethodInvocation, MethodInvocation.ARGUMENTS_PROPERTY); IMethodBinding getterMethodBinding = findGetterMethodInSourceClass(variableBinding); @@ -1506,7 +1536,7 @@ else if(oldOperand instanceof FieldAccess) { } String originalFieldName = variableBinding.getName(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); - targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName("get" + modifiedFieldName), null); + targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName(GETTER_PREFIX + modifiedFieldName), null); } targetRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, ast.newSimpleName(modifiedSourceTypeName), null); InfixExpression infixExpression = ast.newInfixExpression(); @@ -2014,7 +2044,7 @@ private SingleVariableDeclaration handleAccessedFieldHavingSetterMethod(MethodDe } String originalFieldName = accessedVariableBinding.getName(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); - targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName("get" + modifiedFieldName), null); + targetRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, ast.newSimpleName(GETTER_PREFIX + modifiedFieldName), null); } if(newAccessedVariable.getParent() instanceof FieldAccess) { FieldAccess newFieldAccess = (FieldAccess)newAccessedVariable.getParent(); @@ -2359,7 +2389,9 @@ private MethodDeclaration createSetterMethodDeclaration(VariableDeclaration fiel String originalFieldName = fieldFragment.getName().getIdentifier(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); MethodDeclaration setterMethodDeclaration = extractedClassAST.newMethodDeclaration(); - extractedClassRewriter.set(setterMethodDeclaration, MethodDeclaration.NAME_PROPERTY, extractedClassAST.newSimpleName("set" + modifiedFieldName), null); + String setterMethodName = SETTER_PREFIX + modifiedFieldName; + setterMethodName = appendAccessorMethodSuffix(setterMethodName); + extractedClassRewriter.set(setterMethodDeclaration, MethodDeclaration.NAME_PROPERTY, extractedClassAST.newSimpleName(setterMethodName), null); PrimitiveType type = extractedClassAST.newPrimitiveType(PrimitiveType.VOID); extractedClassRewriter.set(setterMethodDeclaration, MethodDeclaration.RETURN_TYPE2_PROPERTY, type, null); ListRewrite setterMethodModifiersRewrite = extractedClassRewriter.getListRewrite(setterMethodDeclaration, MethodDeclaration.MODIFIERS2_PROPERTY); @@ -2399,7 +2431,9 @@ private MethodDeclaration createGetterMethodDeclaration(VariableDeclaration fiel String originalFieldName = fieldFragment.getName().getIdentifier(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); MethodDeclaration getterMethodDeclaration = extractedClassAST.newMethodDeclaration(); - extractedClassRewriter.set(getterMethodDeclaration, MethodDeclaration.NAME_PROPERTY, extractedClassAST.newSimpleName("get" + modifiedFieldName), null); + String getterMethodName = GETTER_PREFIX + modifiedFieldName; + getterMethodName = appendAccessorMethodSuffix(getterMethodName); + extractedClassRewriter.set(getterMethodDeclaration, MethodDeclaration.NAME_PROPERTY, extractedClassAST.newSimpleName(getterMethodName), null); FieldDeclaration originalFieldDeclaration = (FieldDeclaration)fieldFragment.getParent(); extractedClassRewriter.set(getterMethodDeclaration, MethodDeclaration.RETURN_TYPE2_PROPERTY, originalFieldDeclaration.getType(), null); ListRewrite getterMethodModifiersRewrite = extractedClassRewriter.getListRewrite(getterMethodDeclaration, MethodDeclaration.MODIFIERS2_PROPERTY); @@ -2657,6 +2691,10 @@ else if(leftHandSide instanceof FieldAccess) { FieldAccess fieldAccess = (FieldAccess)leftHandSide; assignedVariable = fieldAccess.getName(); } + else if(leftHandSide instanceof QualifiedName) { + QualifiedName qualifiedName = (QualifiedName)leftHandSide; + assignedVariable = qualifiedName.getName(); + } Expression rightHandSide = assignment.getRightHandSide(); List accessedVariables = expressionExtractor.getVariableInstructions(rightHandSide); List arrayAccesses = expressionExtractor.getArrayAccesses(leftHandSide); @@ -2686,13 +2724,15 @@ else if(leftHandSide instanceof FieldAccess) { } else { MethodInvocation setterMethodInvocation = contextAST.newMethodInvocation(); - sourceRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName("set" + modifiedFieldName), null); + String setterMethodName = SETTER_PREFIX + modifiedFieldName; + setterMethodName = appendAccessorMethodSuffix(setterMethodName); + sourceRewriter.set(setterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName(setterMethodName), null); ListRewrite setterMethodInvocationArgumentsRewrite = sourceRewriter.getListRewrite(setterMethodInvocation, MethodInvocation.ARGUMENTS_PROPERTY); if(!assignment.getOperator().equals(Assignment.Operator.ASSIGN)) { accessedFields.add(fieldFragment); InfixExpression infixExpression = contextAST.newInfixExpression(); MethodInvocation getterMethodInvocation = contextAST.newMethodInvocation(); - sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName("get" + modifiedFieldName), null); + sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName(GETTER_PREFIX + modifiedFieldName), null); if((assignedVariableBinding.getModifiers() & Modifier.STATIC) != 0) { sourceRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, contextAST.newSimpleName(extractedTypeName), null); } @@ -2739,7 +2779,12 @@ else if(assignment.getOperator().equals(Assignment.Operator.RIGHT_SHIFT_UNSIGNED else { setterMethodInvocationArgumentsRewrite.insertLast(assignment.getRightHandSide(), null); } - if((assignedVariableBinding.getModifiers() & Modifier.STATIC) != 0) { + if(leftHandSide instanceof QualifiedName) { + Name qualifier = contextAST.newName(((QualifiedName)leftHandSide).getQualifier().getFullyQualifiedName()); + QualifiedName qualifiedName = contextAST.newQualifiedName(qualifier, contextAST.newSimpleName(modifiedExtractedTypeName)); + sourceRewriter.set(setterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, qualifiedName, null); + } + else if((assignedVariableBinding.getModifiers() & Modifier.STATIC) != 0) { sourceRewriter.set(setterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, contextAST.newSimpleName(extractedTypeName), null); } else { @@ -2769,7 +2814,7 @@ else if(arrayExpression instanceof FieldAccess) { IVariableBinding arrayVariableBinding = (IVariableBinding)arrayBinding; if(arrayVariableBinding.isField() && fieldFragment.resolveBinding().isEqualTo(arrayVariableBinding)) { MethodInvocation getterMethodInvocation = contextAST.newMethodInvocation(); - sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName("get" + modifiedFieldName), null); + sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName(GETTER_PREFIX + modifiedFieldName), null); if((arrayVariableBinding.getModifiers() & Modifier.STATIC) != 0) { sourceRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, contextAST.newSimpleName(extractedTypeName), null); } @@ -2790,7 +2835,7 @@ else if(arrayExpression instanceof FieldAccess) { IVariableBinding accessedVariableBinding = (IVariableBinding)rightHandBinding; if(accessedVariableBinding.isField() && fieldFragment.resolveBinding().isEqualTo(accessedVariableBinding)) { MethodInvocation getterMethodInvocation = contextAST.newMethodInvocation(); - sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName("get" + modifiedFieldName), null); + sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName(GETTER_PREFIX + modifiedFieldName), null); if((accessedVariableBinding.getModifiers() & Modifier.STATIC) != 0) { sourceRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, contextAST.newSimpleName(extractedTypeName), null); } @@ -2848,6 +2893,8 @@ private void modifyExtractedFieldAccessesInSourceClass(Set for(VariableDeclaration fieldFragment : fieldFragments) { String originalFieldName = fieldFragment.getName().getIdentifier(); String modifiedFieldName = originalFieldName.substring(0,1).toUpperCase() + originalFieldName.substring(1,originalFieldName.length()); + String getterMethodName = GETTER_PREFIX + modifiedFieldName; + getterMethodName = appendAccessorMethodSuffix(getterMethodName); for(Expression expression : accessedVariables) { SimpleName accessedVariable = (SimpleName)expression; IBinding binding = accessedVariable.resolveBinding(); @@ -2856,7 +2903,7 @@ private void modifyExtractedFieldAccessesInSourceClass(Set if(accessedVariableBinding.isField() && fieldFragment.resolveBinding().isEqualTo(accessedVariableBinding)) { if(!isAssignmentChild(expression)) { MethodInvocation getterMethodInvocation = contextAST.newMethodInvocation(); - sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName("get" + modifiedFieldName), null); + sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName(getterMethodName), null); if((accessedVariableBinding.getModifiers() & Modifier.STATIC) != 0) { sourceRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, contextAST.newSimpleName(extractedTypeName), null); } @@ -2888,7 +2935,7 @@ else if(arrayExpression instanceof FieldAccess) { if(arrayVariableBinding.isField() && fieldFragment.resolveBinding().isEqualTo(arrayVariableBinding)) { if(!isAssignmentChild(expression)) { MethodInvocation getterMethodInvocation = contextAST.newMethodInvocation(); - sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName("get" + modifiedFieldName), null); + sourceRewriter.set(getterMethodInvocation, MethodInvocation.NAME_PROPERTY, contextAST.newSimpleName(getterMethodName), null); if((arrayVariableBinding.getModifiers() & Modifier.STATIC) != 0) { sourceRewriter.set(getterMethodInvocation, MethodInvocation.EXPRESSION_PROPERTY, contextAST.newSimpleName(extractedTypeName), null); } diff --git a/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractCloneRefactoring.java b/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractCloneRefactoring.java index 2ef49f4e..a396522d 100644 --- a/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractCloneRefactoring.java +++ b/src/gr/uom/java/jdeodorant/refactoring/manipulators/ExtractCloneRefactoring.java @@ -4655,7 +4655,7 @@ else if(remainingNodesMovableAfter.contains(remainingNode)) { else { ITypeBinding returnTypeBinding = mapper.getReturnTypeBinding(); Statement methodInvocationStatement = null; - if(returnTypeBinding != null) { + if(returnTypeBinding != null && !returnTypeBinding.getQualifiedName().equals("void")) { ReturnStatement returnStatement = ast.newReturnStatement(); if(returnTypeBinding.isEqualTo(methodDeclaration.getReturnType2().resolveBinding())) { methodBodyRewriter.set(returnStatement, ReturnStatement.EXPRESSION_PROPERTY, methodInvocation, null);