aspect Computation { syn boolean RobotArm.isInSafetyZone() { System.out.println("isInSafetyZone()"); for (Link link : getLinkList()) { if (model().getZoneModel().isInSafetyZone(link.getCurrentPosition())) { return true; } } return model().getZoneModel().isInSafetyZone(getEndEffector().getCurrentPosition()); } cache ZoneModel.isInSafetyZone(IntPosition pos); syn boolean ZoneModel.isInSafetyZone(IntPosition pos) { System.out.println("isInSafetyZone(" + pos + ")"); for (Zone sz : getSafetyZoneList()) { for (Coordinate coordinate : sz.getCoordinateList()) { if (coordinate.getPosition().equals(pos)) { return true; } } } return false; } syn double RobotArm.getAppropriateSpeed() { return isInSafetyZone() ? 0.4d : 1.0d; } }