Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="output" path="bin"/>
</classpath>
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,5 @@ hs_err_pid*
.idea_modules/

target/
out/
out/
/bin/
17 changes: 17 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Refactoring</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
15 changes: 12 additions & 3 deletions src/com/directi/training/codesmells/smelly/pieces/Bishop.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
package com.directi.training.codesmells.smelly.pieces;

import com.directi.training.codesmells.smelly.Color;
import com.directi.training.codesmells.refactored.Color;
import com.directi.training.codesmells.refactored.chess.MoveUtil;
import com.directi.training.codesmells.refactored.Position;

public abstract class Bishop extends Piece
//Fixed Collapsing Hierarchy (another instance of lazy-class)
public class Bishop extends Piece
{

public Bishop(Color color)
{
super(color, 'b');
super(color);
}

@Override
public boolean isValidMove(Position from, Position to)
{
return MoveUtil.isDiagonalMove(from, to);
}

@Override
Expand Down
11 changes: 9 additions & 2 deletions src/com/directi/training/codesmells/smelly/pieces/King.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
package com.directi.training.codesmells.smelly.pieces;

import com.directi.training.codesmells.smelly.Color;
import com.directi.training.codesmells.refactored.Color;
import com.directi.training.codesmells.refactored.Position;

public class King extends Piece
{
public King(Color color)
{
super(color, 'K');
super(color);
}

@Override
public boolean isValidMove(Position from, Position to)
{
return (Math.abs(from.getRow() - to.getRow()) == 1) && (Math.abs(from.getColumn() - to.getColumn()) == 1);
}

@Override
Expand Down
15 changes: 12 additions & 3 deletions src/com/directi/training/codesmells/smelly/pieces/Knight.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
package com.directi.training.codesmells.smelly.pieces;

import com.directi.training.codesmells.smelly.Color;
import com.directi.training.codesmells.refactored.Color;
import com.directi.training.codesmells.refactored.Position;

public abstract class Knight extends Piece
//Fixed Collapsing Hierarchy (another instance of lazy-class)
public class Knight extends Piece
{
public Knight(Color color)
{
super(color, 'k');
super(color);
}

public boolean isValidMove(Position from, Position to)
{
int columnDiff = Math.abs(to.getColumn() - from.getColumn());
int rowDiff = Math.abs(to.getRow() - from.getRow());
return (columnDiff == 2 && rowDiff == 1) || (columnDiff == 1 && rowDiff == 2);
}

@Override
Expand Down
11 changes: 0 additions & 11 deletions src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java

This file was deleted.

11 changes: 0 additions & 11 deletions src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java

This file was deleted.

11 changes: 0 additions & 11 deletions src/com/directi/training/codesmells/smelly/pieces/LeftRook.java

This file was deleted.

10 changes: 5 additions & 5 deletions src/com/directi/training/codesmells/smelly/pieces/Pawn.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.directi.training.codesmells.smelly.pieces;

import com.directi.training.codesmells.smelly.Color;
import com.directi.training.codesmells.smelly.Position;
import com.directi.training.codesmells.refactored.Color;
import com.directi.training.codesmells.refactored.Position;

public class Pawn extends Piece
{
public Pawn(Color color)
{
super(color, 'p');
super(color);
}

@Override
Expand Down Expand Up @@ -56,10 +56,10 @@ private boolean isTakingAllowedNumberOfSidewaysSteps(Position from,
int columnsDiff = to.getColumn() - from.getColumn();
if (columnsDiff == -1)
return (opponentPieceAtForwardLeft && getColor() == Color.WHITE)
|| (opponentPieceAtForwardRight && getColor() == Color.BLACK);
|| (opponentPieceAtForwardRight && getColor() == Color.BLACK);
if (columnsDiff == 1) {
return (opponentPieceAtForwardRight && getColor() == Color.WHITE)
|| (opponentPieceAtForwardLeft && getColor() == Color.BLACK);
|| (opponentPieceAtForwardLeft && getColor() == Color.BLACK);
}
return columnsDiff == 0;
}
Expand Down
32 changes: 6 additions & 26 deletions src/com/directi/training/codesmells/smelly/pieces/Piece.java
Original file line number Diff line number Diff line change
@@ -1,42 +1,22 @@
package com.directi.training.codesmells.smelly.pieces;

import com.directi.training.codesmells.smelly.Color;
import com.directi.training.codesmells.smelly.Position;
import com.directi.training.codesmells.refactored.Color;
import com.directi.training.codesmells.refactored.Position;

public abstract class Piece
{
public Color _color;
public char _type;
private Color _color; //Fixed Indecent Exposure Code Smell by making field private

public Piece(Color color, char type)
public Piece(Color color)
{
_color = color;
_type = type;
}

public Color getColor()
{
return _color;
}

public boolean isValidMove(Position from, Position to)
{
switch (_type) {
case 'b':
return Math.abs(from.getRow() - to.getRow()) == Math.abs(from.getColumn() - to.getColumn());
case 'r':
return from.getRow() == to.getRow() || from.getColumn() == to.getColumn();
case 'k':
int columnDiff = Math.abs(to.getColumn() - from.getColumn());
int rowDiff = Math.abs(to.getRow() - from.getRow());
return (columnDiff == 2 && rowDiff == 1) || (columnDiff == 1 && rowDiff == 2);
case 'q':
return Math.abs(from.getRow() - to.getRow()) == Math.abs(from.getColumn() - to.getColumn())
|| from.getRow() == to.getRow() || from.getColumn() == to.getColumn();
case 'K':
return (Math.abs(from.getRow() - to.getRow()) == 1) && (Math.abs(from.getColumn() - to.getColumn()) == 1);
default:
return false;
}
}
//Fixed Switch-case code smell through polymorphism. Note that type field has also been removed.
public abstract boolean isValidMove(Position from, Position to);
}
11 changes: 9 additions & 2 deletions src/com/directi/training/codesmells/smelly/pieces/Queen.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
package com.directi.training.codesmells.smelly.pieces;

import com.directi.training.codesmells.smelly.Color;
import com.directi.training.codesmells.refactored.Color;
import com.directi.training.codesmells.refactored.chess.MoveUtil;
import com.directi.training.codesmells.refactored.Position;

public class Queen extends Piece
{
public Queen(Color color)
{
super(color, 'q');
super(color);
}

public boolean isValidMove(Position from, Position to)
{
return MoveUtil.isStraightLineMove(from, to);
}

@Override
Expand Down
11 changes: 0 additions & 11 deletions src/com/directi/training/codesmells/smelly/pieces/RightBishop.java

This file was deleted.

11 changes: 0 additions & 11 deletions src/com/directi/training/codesmells/smelly/pieces/RightKnight.java

This file was deleted.

11 changes: 0 additions & 11 deletions src/com/directi/training/codesmells/smelly/pieces/RightRook.java

This file was deleted.

14 changes: 11 additions & 3 deletions src/com/directi/training/codesmells/smelly/pieces/Rook.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
package com.directi.training.codesmells.smelly.pieces;

import com.directi.training.codesmells.smelly.Color;
import com.directi.training.codesmells.refactored.Color;
import com.directi.training.codesmells.refactored.chess.MoveUtil;
import com.directi.training.codesmells.refactored.Position;

public abstract class Rook extends Piece
//Fixed Collapsing Hierarchy (another instance of lazy-class)
public class Rook extends Piece
{
public Rook(Color color)
{
super(color, 'r');
super(color);
}

public boolean isValidMove(Position from, Position to)
{
return MoveUtil.isHorizontalOrVerticalMove(from, to);
}

@Override
Expand Down