Java 11 migration: patterns (remaining b-c) (#1081)
* Moves business-delegate pattern to java 11 * Moves bytecode pattern to java 11 * Moves caching pattern to java 11 * Moves callback pattern to java 11 * Moves chain pattern to java 11 * Moves circuit-breaker pattern to java 11 * Moves collection-pipeline pattern to java 11 * Moves command pattern to java 11 * Moves commander pattern to java 11 * Moves composite pattern to java 11 * Corrects test cases
This commit is contained in:
		
				
					committed by
					
						
						Ilkka Seppälä
					
				
			
			
				
	
			
			
			
						parent
						
							6ef840f3cf
						
					
				
				
					commit
					33ea7335b1
				
			@@ -24,7 +24,6 @@
 | 
			
		||||
package com.iluwatar.bytecode;
 | 
			
		||||
 | 
			
		||||
import com.iluwatar.bytecode.util.InstructionConverterUtil;
 | 
			
		||||
import java.util.Stack;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
 | 
			
		||||
@@ -51,12 +50,12 @@ public class App {
 | 
			
		||||
   */
 | 
			
		||||
  public static void main(String[] args) {
 | 
			
		||||
 | 
			
		||||
    Wizard wizard = new Wizard();
 | 
			
		||||
    var wizard = new Wizard();
 | 
			
		||||
    wizard.setHealth(45);
 | 
			
		||||
    wizard.setAgility(7);
 | 
			
		||||
    wizard.setWisdom(11);
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.getWizards()[0] = wizard;
 | 
			
		||||
 | 
			
		||||
    interpretInstruction("LITERAL 0", vm);
 | 
			
		||||
@@ -74,9 +73,8 @@ public class App {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static void interpretInstruction(String instruction, VirtualMachine vm) {
 | 
			
		||||
    InstructionConverterUtil converter = new InstructionConverterUtil();
 | 
			
		||||
    vm.execute(converter.convertToByteCode(instruction));
 | 
			
		||||
    Stack<Integer> stack = vm.getStack();
 | 
			
		||||
    vm.execute(InstructionConverterUtil.convertToByteCode(instruction));
 | 
			
		||||
    var stack = vm.getStack();
 | 
			
		||||
    LOGGER.info(instruction + String.format("%" + (12 - instruction.length()) + "s", "") + stack);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ public enum Instruction {
 | 
			
		||||
  ADD(10),
 | 
			
		||||
  DIVIDE(11);
 | 
			
		||||
 | 
			
		||||
  private int value;
 | 
			
		||||
  private final int value;
 | 
			
		||||
 | 
			
		||||
  Instruction(int value) {
 | 
			
		||||
    this.value = value;
 | 
			
		||||
@@ -57,7 +57,7 @@ public enum Instruction {
 | 
			
		||||
   * @return representation of the instruction
 | 
			
		||||
   */
 | 
			
		||||
  public static Instruction getInstruction(int value) {
 | 
			
		||||
    for (int i = 0; i < Instruction.values().length; i++) {
 | 
			
		||||
    for (var i = 0; i < Instruction.values().length; i++) {
 | 
			
		||||
      if (Instruction.values()[i].getIntValue() == value) {
 | 
			
		||||
        return Instruction.values()[i];
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import java.util.Stack;
 | 
			
		||||
 */
 | 
			
		||||
public class VirtualMachine {
 | 
			
		||||
 | 
			
		||||
  private Stack<Integer> stack = new Stack();
 | 
			
		||||
  private Stack<Integer> stack = new Stack<>();
 | 
			
		||||
 | 
			
		||||
  private Wizard[] wizards = new Wizard[2];
 | 
			
		||||
 | 
			
		||||
@@ -38,7 +38,7 @@ public class VirtualMachine {
 | 
			
		||||
   * Constructor.
 | 
			
		||||
   */
 | 
			
		||||
  public VirtualMachine() {
 | 
			
		||||
    for (int i = 0; i < wizards.length; i++) {
 | 
			
		||||
    for (var i = 0; i < wizards.length; i++) {
 | 
			
		||||
      wizards[i] = new Wizard();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -49,10 +49,8 @@ public class VirtualMachine {
 | 
			
		||||
   * @param bytecode to execute
 | 
			
		||||
   */
 | 
			
		||||
  public void execute(int[] bytecode) {
 | 
			
		||||
    for (int i = 0; i < bytecode.length; i++) {
 | 
			
		||||
    for (var i = 0; i < bytecode.length; i++) {
 | 
			
		||||
      Instruction instruction = Instruction.getInstruction(bytecode[i]);
 | 
			
		||||
      int wizard;
 | 
			
		||||
      int amount;
 | 
			
		||||
      switch (instruction) {
 | 
			
		||||
        case LITERAL:
 | 
			
		||||
          // Read the next byte from the bytecode.
 | 
			
		||||
@@ -60,8 +58,8 @@ public class VirtualMachine {
 | 
			
		||||
          stack.push(value);
 | 
			
		||||
          break;
 | 
			
		||||
        case SET_AGILITY:
 | 
			
		||||
          amount = stack.pop();
 | 
			
		||||
          wizard = stack.pop();
 | 
			
		||||
          var amount = stack.pop();
 | 
			
		||||
          var wizard = stack.pop();
 | 
			
		||||
          setAgility(wizard, amount);
 | 
			
		||||
          break;
 | 
			
		||||
        case SET_WISDOM:
 | 
			
		||||
@@ -87,8 +85,8 @@ public class VirtualMachine {
 | 
			
		||||
          stack.push(getWisdom(wizard));
 | 
			
		||||
          break;
 | 
			
		||||
        case ADD:
 | 
			
		||||
          int a = stack.pop();
 | 
			
		||||
          int b = stack.pop();
 | 
			
		||||
          var a = stack.pop();
 | 
			
		||||
          var b = stack.pop();
 | 
			
		||||
          stack.push(a + b);
 | 
			
		||||
          break;
 | 
			
		||||
        case DIVIDE:
 | 
			
		||||
 
 | 
			
		||||
@@ -40,15 +40,15 @@ public class InstructionConverterUtil {
 | 
			
		||||
      return new int[0];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    String[] splitedInstructions = instructions.trim().split(" ");
 | 
			
		||||
    int[] bytecode = new int[splitedInstructions.length];
 | 
			
		||||
    for (int i = 0; i < splitedInstructions.length; i++) {
 | 
			
		||||
    var splitedInstructions = instructions.trim().split(" ");
 | 
			
		||||
    var bytecode = new int[splitedInstructions.length];
 | 
			
		||||
    for (var i = 0; i < splitedInstructions.length; i++) {
 | 
			
		||||
      if (isValidInstruction(splitedInstructions[i])) {
 | 
			
		||||
        bytecode[i] = Instruction.valueOf(splitedInstructions[i]).getIntValue();
 | 
			
		||||
      } else if (isValidInt(splitedInstructions[i])) {
 | 
			
		||||
        bytecode[i] = Integer.valueOf(splitedInstructions[i]);
 | 
			
		||||
        bytecode[i] = Integer.parseInt(splitedInstructions[i]);
 | 
			
		||||
      } else {
 | 
			
		||||
        String errorMessage = "Invalid instruction or number: " + splitedInstructions[i];
 | 
			
		||||
        var errorMessage = "Invalid instruction or number: " + splitedInstructions[i];
 | 
			
		||||
        throw new IllegalArgumentException(errorMessage);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,6 @@ public class AppTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void test() {
 | 
			
		||||
    String[] args = {};
 | 
			
		||||
    App.main(args);
 | 
			
		||||
    App.main(new String[]{});
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -36,11 +36,11 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testLiteral() {
 | 
			
		||||
    int[] bytecode = new int[2];
 | 
			
		||||
    var bytecode = new int[2];
 | 
			
		||||
    bytecode[0] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[1] = 10;
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.execute(bytecode);
 | 
			
		||||
 | 
			
		||||
    assertEquals(1, vm.getStack().size());
 | 
			
		||||
@@ -49,15 +49,15 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testSetHealth() {
 | 
			
		||||
    int wizardNumber = 0;
 | 
			
		||||
    int[] bytecode = new int[5];
 | 
			
		||||
    var wizardNumber = 0;
 | 
			
		||||
    var bytecode = new int[5];
 | 
			
		||||
    bytecode[0] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[1] = wizardNumber;
 | 
			
		||||
    bytecode[2] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[3] = 50;                        // health amount
 | 
			
		||||
    bytecode[4] = SET_HEALTH.getIntValue();
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.execute(bytecode);
 | 
			
		||||
 | 
			
		||||
    assertEquals(50, vm.getWizards()[wizardNumber].getHealth());
 | 
			
		||||
@@ -65,15 +65,15 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testSetAgility() {
 | 
			
		||||
    int wizardNumber = 0;
 | 
			
		||||
    int[] bytecode = new int[5];
 | 
			
		||||
    var wizardNumber = 0;
 | 
			
		||||
    var bytecode = new int[5];
 | 
			
		||||
    bytecode[0] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[1] = wizardNumber;
 | 
			
		||||
    bytecode[2] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[3] = 50;                        // agility amount
 | 
			
		||||
    bytecode[4] = SET_AGILITY.getIntValue();
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.execute(bytecode);
 | 
			
		||||
 | 
			
		||||
    assertEquals(50, vm.getWizards()[wizardNumber].getAgility());
 | 
			
		||||
@@ -81,15 +81,15 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testSetWisdom() {
 | 
			
		||||
    int wizardNumber = 0;
 | 
			
		||||
    int[] bytecode = new int[5];
 | 
			
		||||
    var wizardNumber = 0;
 | 
			
		||||
    var bytecode = new int[5];
 | 
			
		||||
    bytecode[0] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[1] = wizardNumber;
 | 
			
		||||
    bytecode[2] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[3] = 50;                        // wisdom amount
 | 
			
		||||
    bytecode[4] = SET_WISDOM.getIntValue();
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.execute(bytecode);
 | 
			
		||||
 | 
			
		||||
    assertEquals(50, vm.getWizards()[wizardNumber].getWisdom());
 | 
			
		||||
@@ -97,8 +97,8 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testGetHealth() {
 | 
			
		||||
    int wizardNumber = 0;
 | 
			
		||||
    int[] bytecode = new int[8];
 | 
			
		||||
    var wizardNumber = 0;
 | 
			
		||||
    var bytecode = new int[8];
 | 
			
		||||
    bytecode[0] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[1] = wizardNumber;
 | 
			
		||||
    bytecode[2] = LITERAL.getIntValue();
 | 
			
		||||
@@ -108,7 +108,7 @@ public class VirtualMachineTest {
 | 
			
		||||
    bytecode[6] = wizardNumber;
 | 
			
		||||
    bytecode[7] = GET_HEALTH.getIntValue();
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.execute(bytecode);
 | 
			
		||||
 | 
			
		||||
    assertEquals(Integer.valueOf(50), vm.getStack().pop());
 | 
			
		||||
@@ -116,13 +116,13 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testPlaySound() {
 | 
			
		||||
    int wizardNumber = 0;
 | 
			
		||||
    int[] bytecode = new int[3];
 | 
			
		||||
    var wizardNumber = 0;
 | 
			
		||||
    var bytecode = new int[3];
 | 
			
		||||
    bytecode[0] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[1] = wizardNumber;
 | 
			
		||||
    bytecode[2] = PLAY_SOUND.getIntValue();
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.execute(bytecode);
 | 
			
		||||
 | 
			
		||||
    assertEquals(0, vm.getStack().size());
 | 
			
		||||
@@ -131,13 +131,13 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testSpawnParticles() {
 | 
			
		||||
    int wizardNumber = 0;
 | 
			
		||||
    int[] bytecode = new int[3];
 | 
			
		||||
    var wizardNumber = 0;
 | 
			
		||||
    var bytecode = new int[3];
 | 
			
		||||
    bytecode[0] = LITERAL.getIntValue();
 | 
			
		||||
    bytecode[1] = wizardNumber;
 | 
			
		||||
    bytecode[2] = SPAWN_PARTICLES.getIntValue();
 | 
			
		||||
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
    vm.execute(bytecode);
 | 
			
		||||
 | 
			
		||||
    assertEquals(0, vm.getStack().size());
 | 
			
		||||
@@ -146,9 +146,9 @@ public class VirtualMachineTest {
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testInvalidInstruction() {
 | 
			
		||||
    int[] bytecode = new int[1];
 | 
			
		||||
    var bytecode = new int[1];
 | 
			
		||||
    bytecode[0] = 999;
 | 
			
		||||
    VirtualMachine vm = new VirtualMachine();
 | 
			
		||||
    var vm = new VirtualMachine();
 | 
			
		||||
 | 
			
		||||
    assertThrows(IllegalArgumentException.class, () -> vm.execute(bytecode));
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -34,19 +34,19 @@ import org.junit.jupiter.api.Test;
 | 
			
		||||
public class InstructionConverterUtilTest {
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testEmptyInstruction() {
 | 
			
		||||
    String instruction = "";
 | 
			
		||||
    var instruction = "";
 | 
			
		||||
 | 
			
		||||
    int[] bytecode = InstructionConverterUtil.convertToByteCode(instruction);
 | 
			
		||||
    var bytecode = InstructionConverterUtil.convertToByteCode(instruction);
 | 
			
		||||
 | 
			
		||||
    Assertions.assertEquals(0, bytecode.length);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testInstructions() {
 | 
			
		||||
    String instructions =
 | 
			
		||||
        "LITERAL 35 SET_HEALTH SET_WISDOM SET_AGILITY PLAY_SOUND SPAWN_PARTICLES GET_HEALTH ADD DIVIDE";
 | 
			
		||||
    var instructions = "LITERAL 35 SET_HEALTH SET_WISDOM SET_AGILITY PLAY_SOUND"
 | 
			
		||||
        + " SPAWN_PARTICLES GET_HEALTH ADD DIVIDE";
 | 
			
		||||
 | 
			
		||||
    int[] bytecode = InstructionConverterUtil.convertToByteCode(instructions);
 | 
			
		||||
    var bytecode = InstructionConverterUtil.convertToByteCode(instructions);
 | 
			
		||||
 | 
			
		||||
    Assertions.assertEquals(10, bytecode.length);
 | 
			
		||||
    Assertions.assertEquals(Instruction.LITERAL.getIntValue(), bytecode[0]);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user