diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..ea04328
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
index b33f9ee..47dcc6c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -47,4 +47,5 @@ hs_err_pid*
.idea_modules/
target/
-out/
\ No newline at end of file
+out/
+/bin/
diff --git a/.project b/.project
new file mode 100644
index 0000000..f439d0a
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ Refactoring
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/src/com/directi/training/codesmells/smelly/pieces/Bishop.java b/src/com/directi/training/codesmells/smelly/pieces/Bishop.java
index 481b16f..5d47fdd 100644
--- a/src/com/directi/training/codesmells/smelly/pieces/Bishop.java
+++ b/src/com/directi/training/codesmells/smelly/pieces/Bishop.java
@@ -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
diff --git a/src/com/directi/training/codesmells/smelly/pieces/King.java b/src/com/directi/training/codesmells/smelly/pieces/King.java
index 5392eb8..623c66d 100644
--- a/src/com/directi/training/codesmells/smelly/pieces/King.java
+++ b/src/com/directi/training/codesmells/smelly/pieces/King.java
@@ -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
diff --git a/src/com/directi/training/codesmells/smelly/pieces/Knight.java b/src/com/directi/training/codesmells/smelly/pieces/Knight.java
index 1c58599..309ed73 100644
--- a/src/com/directi/training/codesmells/smelly/pieces/Knight.java
+++ b/src/com/directi/training/codesmells/smelly/pieces/Knight.java
@@ -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
diff --git a/src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java b/src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java
deleted file mode 100644
index 144fd3b..0000000
--- a/src/com/directi/training/codesmells/smelly/pieces/LeftBishop.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.directi.training.codesmells.smelly.pieces;
-
-import com.directi.training.codesmells.smelly.Color;
-
-public class LeftBishop extends Bishop
-{
- public LeftBishop(Color color)
- {
- super(color);
- }
-}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java b/src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java
deleted file mode 100644
index 81c6e4a..0000000
--- a/src/com/directi/training/codesmells/smelly/pieces/LeftKnight.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.directi.training.codesmells.smelly.pieces;
-
-import com.directi.training.codesmells.smelly.Color;
-
-public class LeftKnight extends Knight
-{
- public LeftKnight(Color color)
- {
- super(color);
- }
-}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/LeftRook.java b/src/com/directi/training/codesmells/smelly/pieces/LeftRook.java
deleted file mode 100644
index d28ac72..0000000
--- a/src/com/directi/training/codesmells/smelly/pieces/LeftRook.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.directi.training.codesmells.smelly.pieces;
-
-import com.directi.training.codesmells.smelly.Color;
-
-public class LeftRook extends Rook
-{
- public LeftRook(Color color)
- {
- super(color);
- }
-}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/Pawn.java b/src/com/directi/training/codesmells/smelly/pieces/Pawn.java
index bdcdb0e..51c15f8 100644
--- a/src/com/directi/training/codesmells/smelly/pieces/Pawn.java
+++ b/src/com/directi/training/codesmells/smelly/pieces/Pawn.java
@@ -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
@@ -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;
}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/Piece.java b/src/com/directi/training/codesmells/smelly/pieces/Piece.java
index 8a78e31..cc1b994 100644
--- a/src/com/directi/training/codesmells/smelly/pieces/Piece.java
+++ b/src/com/directi/training/codesmells/smelly/pieces/Piece.java
@@ -1,17 +1,15 @@
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()
@@ -19,24 +17,6 @@ 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);
}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/Queen.java b/src/com/directi/training/codesmells/smelly/pieces/Queen.java
index fafc410..4f0a5a9 100644
--- a/src/com/directi/training/codesmells/smelly/pieces/Queen.java
+++ b/src/com/directi/training/codesmells/smelly/pieces/Queen.java
@@ -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
diff --git a/src/com/directi/training/codesmells/smelly/pieces/RightBishop.java b/src/com/directi/training/codesmells/smelly/pieces/RightBishop.java
deleted file mode 100644
index 5e1b3c8..0000000
--- a/src/com/directi/training/codesmells/smelly/pieces/RightBishop.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.directi.training.codesmells.smelly.pieces;
-
-import com.directi.training.codesmells.smelly.Color;
-
-public class RightBishop extends Bishop
-{
- public RightBishop(Color color)
- {
- super(color);
- }
-}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/RightKnight.java b/src/com/directi/training/codesmells/smelly/pieces/RightKnight.java
deleted file mode 100644
index 27e67d8..0000000
--- a/src/com/directi/training/codesmells/smelly/pieces/RightKnight.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.directi.training.codesmells.smelly.pieces;
-
-import com.directi.training.codesmells.smelly.Color;
-
-public class RightKnight extends Knight
-{
- public RightKnight(Color color)
- {
- super(color);
- }
-}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/RightRook.java b/src/com/directi/training/codesmells/smelly/pieces/RightRook.java
deleted file mode 100644
index 07dae0b..0000000
--- a/src/com/directi/training/codesmells/smelly/pieces/RightRook.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.directi.training.codesmells.smelly.pieces;
-
-import com.directi.training.codesmells.smelly.Color;
-
-public class RightRook extends Rook
-{
- public RightRook(Color color)
- {
- super(color);
- }
-}
diff --git a/src/com/directi/training/codesmells/smelly/pieces/Rook.java b/src/com/directi/training/codesmells/smelly/pieces/Rook.java
index 1058cf3..79180d0 100644
--- a/src/com/directi/training/codesmells/smelly/pieces/Rook.java
+++ b/src/com/directi/training/codesmells/smelly/pieces/Rook.java
@@ -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