	public void compute(int maxCoordinatesNumber, int objMaxCoordinateNumber) {

		serviceAreas = new ArrayList<Polygon>();
		doubleTrackAreas = new ArrayList<Polygon>();

		Partition.runRecursively(secs, p -> {
				LOGGER.info(p.toString());

				RailwayServiceAreasBufferDetection rsad = new RailwayServiceAreasBufferDetection(p.getFeatures());
				rsad.compute();

				serviceAreas.addAll(rsad.getServiceAreas());
				doubleTrackAreas.addAll(rsad.getDoubleTrackAreas());

			}, false, maxCoordinatesNumber, objMaxCoordinateNumber, true, Partition.GeomType.ONLY_LINES, 0);
	}

	public void compute(int maxCoordinatesNumber, int objMaxCoordinateNumber) {

		serviceAreas = new ArrayList<Polygon>();
		doubleTrackAreas = new ArrayList<Polygon>();

		Partition.runRecursively(secs, new PartitionedOperation() {
			@Override
			public void run(Partition p) {
				LOGGER.info(p.toString());

				RailwayServiceAreasBufferDetection rsad = new RailwayServiceAreasBufferDetection(p.getFeatures());
				rsad.compute();

				serviceAreas.addAll(rsad.getServiceAreas());
				doubleTrackAreas.addAll(rsad.getDoubleTrackAreas());

			}}, maxCoordinatesNumber, objMaxCoordinateNumber, true, Partition.GeomType.ONLY_LINES, 0);
	}

Replace Anonymous With Lambda eu.europa.ec.eurostat.jgiscotools.gisco_processes.rail.RailwayServiceAreasBufferDetection.compute.runRecursively.new PartitionedOperation with p -> {LOGGER.info(p.toString()); in method public compute(maxCoordinatesNumber int, objMaxCoordinateNumber int) : void from class eu.europa.ec.eurostat.jgiscotools.gisco_processes.rail.RailwayServiceAreasBufferDetection


	public static Collection<Feature> runGeneralisation(Collection<Feature> units, HashMap<String, Collection<Point>> points, final TesselationGeneralisationSpecification specs, boolean parallel, int roundNb, int maxCoordinatesNumber, int objMaxCoordinateNumber) {
		for(int i=1; i<=roundNb; i++) {
			if(LOGGER.isInfoEnabled()) LOGGER.info("Round "+i+" - CoordNb="+FeatureUtil.getVerticesNumber(units)+" FeatNb="+units.size());
			final int i_ = i;
			units = Partition.runRecursively(units, p -> {
				try {
					if(LOGGER.isInfoEnabled() && tracePartitioning) LOGGER.info("R" + i_ + "/" + roundNb + " - " + p.toString());

					//build tesselation
					ATesselation t = new ATesselation(p.getFeatures(), p.getEnvelope(), clipPoints(points,p.getEnvelope()));

					Engine<?> eng;

					LOGGER.debug("   Activate units");
					specs.setUnitConstraints(t);
					//TODO activate smaller first?
					eng = new Engine<AUnit>(t.aUnits); eng.shuffle().activateQueue().clear();

					LOGGER.trace("   Ensure noding");
					NodingUtil.fixNoding(NodingIssueType.PointPoint, t.getUnits(), specs.getNodingResolution());
					NodingUtil.fixNoding(NodingIssueType.LinePoint, t.getUnits(), specs.getNodingResolution());

					LOGGER.debug("   Create tesselation's topological map");
					t.buildTopologicalMap();
					specs.setTopologicalConstraints(t);
					LOGGER.debug("   Activate faces");
					//TODO activate smaller first?
					eng = new Engine<AFace>(t.aFaces); eng.shuffle().activateQueue().clear();
					LOGGER.debug("   Activate edges");
					//TODO activate longest first?
					eng = new Engine<AEdge>(t.aEdges); eng.shuffle().activateQueue().clear();

					//update units' geometries
					for(AUnit u : t.aUnits) {
						if(u.isDeleted()) continue; //TODO keep trace of deleted units to remove them?
						u.updateGeomFromFaceGeoms();
					}
					t.destroyTopologicalMap();
					//TODO remove deleted units here?
					t.clear();

					//if(runGC) System.gc();
				} catch (Exception e) { e.printStackTrace(); }
			}, parallel, maxCoordinatesNumber, objMaxCoordinateNumber, false, Partition.GeomType.ONLY_AREAS, 0.02);
			for(Feature unit : units) unit.setGeometry(JTSGeomUtil.toMulti(unit.getGeometry()));
		}
		return units;
	}

	public static Collection<Feature> runGeneralisation(Collection<Feature> units, HashMap<String, Collection<Point>> points, final TesselationGeneralisationSpecification specs, int roundNb, int maxCoordinatesNumber, int objMaxCoordinateNumber) {
		for(int i=1; i<=roundNb; i++) {
			if(LOGGER.isInfoEnabled()) LOGGER.info("Round "+i+" - CoordNb="+FeatureUtil.getVerticesNumber(units)+" FeatNb="+units.size());
			final int i_ = i;
			units = Partition.runRecursively(units, new PartitionedOperation() {
				public void run(Partition p) {
					try {
						if(LOGGER.isInfoEnabled() && tracePartitioning) LOGGER.info("R" + i_ + "/" + roundNb + " - " + p.toString());

						//build tesselation
						ATesselation t = new ATesselation(p.getFeatures(), p.getEnvelope(), clipPoints(points,p.getEnvelope()));

						Engine<?> eng;

						LOGGER.debug("   Activate units");
						specs.setUnitConstraints(t);
						//TODO activate smaller first?
						eng = new Engine<AUnit>(t.aUnits); eng.shuffle().activateQueue().clear();

						LOGGER.trace("   Ensure noding");
						NodingUtil.fixNoding(NodingIssueType.PointPoint, t.getUnits(), specs.getNodingResolution());
						NodingUtil.fixNoding(NodingIssueType.LinePoint, t.getUnits(), specs.getNodingResolution());

						LOGGER.debug("   Create tesselation's topological map");
						t.buildTopologicalMap();
						specs.setTopologicalConstraints(t);
						LOGGER.debug("   Activate faces");
						//TODO activate smaller first?
						eng = new Engine<AFace>(t.aFaces); eng.shuffle().activateQueue().clear();
						LOGGER.debug("   Activate edges");
						//TODO activate longest first?
						eng = new Engine<AEdge>(t.aEdges); eng.shuffle().activateQueue().clear();

						//update units' geometries
						for(AUnit u : t.aUnits) {
							if(u.isDeleted()) continue; //TODO keep trace of deleted units to remove them?
							u.updateGeomFromFaceGeoms();
						}
						t.destroyTopologicalMap();
						//TODO remove deleted units here?
						t.clear();

						//if(runGC) System.gc();
					} catch (Exception e) { e.printStackTrace(); }
				}}, maxCoordinatesNumber, objMaxCoordinateNumber, false, Partition.GeomType.ONLY_AREAS, 0.02);
			for(Feature unit : units) unit.setGeometry(JTSGeomUtil.toMulti(unit.getGeometry()));
		}
		return units;
	}

Replace Anonymous With Lambda eu.europa.ec.eurostat.jgiscotools.tesselationGeneralisation.TesselationGeneralisation.runGeneralisation.runRecursively.new PartitionedOperation with p -> {tryif(LOGGER.isInfoEnabled() && tracePartitioning)LOGGER.info("R" + i_ + "/" + roundNb + " - " + p.toString()); in method public runGeneralisation(units Collection<Feature>, points HashMap<String,Collection<Point>>, specs TesselationGeneralisationSpecification, parallel boolean, roundNb int, maxCoordinatesNumber int, objMaxCoordinateNumber int) : Collection<Feature> from class eu.europa.ec.eurostat.jgiscotools.tesselationGeneralisation.TesselationGeneralisation


	public static void checkQuality(Collection<Feature> units, double nodingResolution, String outFilePath, boolean overrideFile, boolean parallel, int maxCoordinatesNumber, int objMaxCoordinateNumber, boolean tracePartitionning) {
		Partition.runRecursively(units, p -> {
			if(tracePartitionning) LOGGER.info(p);

			LOGGER.debug("Build spatial indexes");
			SpatialIndex index = FeatureUtil.getSTRtree(p.features);
			SpatialIndex indexLP = FeatureUtil.getSTRtreeCoordinates(p.features);
			SpatialIndex indexPP = NodingUtil.getSTRtreeCoordinatesForPP(p.features, nodingResolution);

			ATesselation t = new ATesselation(p.getFeatures());
			LOGGER.debug("Set constraints");
			for(AUnit a : t.aUnits) {
				a.clearConstraints();
				a.addConstraint(new CUnitOverlap(a, index));
				a.addConstraint(new CUnitNoding(a, indexLP, NodingIssueType.LinePoint, nodingResolution));
				a.addConstraint(new CUnitNoding(a, indexPP, NodingIssueType.PointPoint, nodingResolution));
				a.addConstraint(new CUnitValidity(a));
			}

			LOGGER.debug("Run evaluation");
			Engine<AUnit> uEng = new Engine<AUnit>(t.aUnits).sort();
			uEng.runEvaluation(outFilePath, overrideFile).clear();

			t.clear();

		}, parallel, maxCoordinatesNumber, objMaxCoordinateNumber, true, Partition.GeomType.ONLY_AREAS, 0);
	}

	public static void checkQuality(Collection<Feature> units, double nodingResolution, String outFilePath, boolean overrideFile, int maxCoordinatesNumber, int objMaxCoordinateNumber, boolean tracePartitionning) {
		Partition.runRecursively(units, new PartitionedOperation() {
			public void run(Partition p) {
				if(tracePartitionning) LOGGER.info(p);

				LOGGER.debug("Build spatial indexes");
				SpatialIndex index = FeatureUtil.getSTRtree(p.features);
				SpatialIndex indexLP = FeatureUtil.getSTRtreeCoordinates(p.features);
				SpatialIndex indexPP = NodingUtil.getSTRtreeCoordinatesForPP(p.features, nodingResolution);

				ATesselation t = new ATesselation(p.getFeatures());
				LOGGER.debug("Set constraints");
				for(AUnit a : t.aUnits) {
					a.clearConstraints();
					a.addConstraint(new CUnitOverlap(a, index));
					a.addConstraint(new CUnitNoding(a, indexLP, NodingIssueType.LinePoint, nodingResolution));
					a.addConstraint(new CUnitNoding(a, indexPP, NodingIssueType.PointPoint, nodingResolution));
					a.addConstraint(new CUnitValidity(a));
				}

				LOGGER.debug("Run evaluation");
				Engine<AUnit> uEng = new Engine<AUnit>(t.aUnits).sort();
				uEng.runEvaluation(outFilePath, overrideFile).clear();

				t.clear();

			}}, maxCoordinatesNumber, objMaxCoordinateNumber, true, Partition.GeomType.ONLY_AREAS, 0);
	}

Replace Anonymous With Lambda eu.europa.ec.eurostat.jgiscotools.tesselationGeneralisation.TesselationQuality.checkQuality.runRecursively.new PartitionedOperation with p -> {if(tracePartitionning)LOGGER.info(p); in method public checkQuality(units Collection<Feature>, nodingResolution double, outFilePath String, overrideFile boolean, parallel boolean, maxCoordinatesNumber int, objMaxCoordinateNumber int, tracePartitionning boolean) : void from class eu.europa.ec.eurostat.jgiscotools.tesselationGeneralisation.TesselationQuality


	public static Collection<Feature> fixQuality(Collection<Feature> units, Envelope clipEnv, double nodingResolution, boolean parallel, int maxCoordinatesNumber, int objMaxCoordinateNumber, boolean tracePartitionning) {
		LOGGER.info("Dissolve by id");
		FeatureUtil.dissolveById(units);

		LOGGER.info("Make valid");
		units = makeMultiPolygonValid(units);

		if(clipEnv != null) {
			LOGGER.info("Clip");
			clip(units, clipEnv);
		}

		LOGGER.info("Ensure tesselation and fix noding");
		units = Partition.runRecursively(units, p -> {
			if(tracePartitionning) LOGGER.info(p);
			NodingUtil.fixNoding(NodingIssueType.PointPoint, p.getFeatures(), nodingResolution);
			NodingUtil.fixNoding(NodingIssueType.LinePoint, p.getFeatures(), nodingResolution);
			ensureTesselation_(p.getFeatures());
			NodingUtil.fixNoding(NodingIssueType.PointPoint, p.getFeatures(), nodingResolution);
			NodingUtil.fixNoding(NodingIssueType.LinePoint, p.getFeatures(), nodingResolution);
		}, parallel, maxCoordinatesNumber, objMaxCoordinateNumber, false, Partition.GeomType.ONLY_AREAS, 0);

		LOGGER.info("Ensure units are multipolygons");
		for(Feature u : units)
			u.setGeometry(JTSGeomUtil.toMulti(u.getGeometry()));

		return units;
	}

	public static Collection<Feature> fixQuality(Collection<Feature> units, Envelope clipEnv, double nodingResolution, int maxCoordinatesNumber, int objMaxCoordinateNumber, boolean tracePartitionning) {
		LOGGER.info("Dissolve by id");
		FeatureUtil.dissolveById(units);

		LOGGER.info("Make valid");
		units = makeMultiPolygonValid(units);

		if(clipEnv != null) {
			LOGGER.info("Clip");
			clip(units, clipEnv);
		}

		LOGGER.info("Ensure tesselation and fix noding");
		units = Partition.runRecursively(units, new PartitionedOperation() {
			public void run(Partition p) {
				if(tracePartitionning) LOGGER.info(p);
				NodingUtil.fixNoding(NodingIssueType.PointPoint, p.getFeatures(), nodingResolution);
				NodingUtil.fixNoding(NodingIssueType.LinePoint, p.getFeatures(), nodingResolution);
				ensureTesselation_(p.getFeatures());
				NodingUtil.fixNoding(NodingIssueType.PointPoint, p.getFeatures(), nodingResolution);
				NodingUtil.fixNoding(NodingIssueType.LinePoint, p.getFeatures(), nodingResolution);
			}}, maxCoordinatesNumber, objMaxCoordinateNumber, false, Partition.GeomType.ONLY_AREAS, 0);

		LOGGER.info("Ensure units are multipolygons");
		for(Feature u : units)
			u.setGeometry(JTSGeomUtil.toMulti(u.getGeometry()));

		return units;
	}

Replace Anonymous With Lambda eu.europa.ec.eurostat.jgiscotools.tesselationGeneralisation.TesselationQuality.fixQuality.runRecursively.new PartitionedOperation with p -> {if(tracePartitionning)LOGGER.info(p); in method public fixQuality(units Collection<Feature>, clipEnv Envelope, nodingResolution double, parallel boolean, maxCoordinatesNumber int, objMaxCoordinateNumber int, tracePartitionning boolean) : Collection<Feature> from class eu.europa.ec.eurostat.jgiscotools.tesselationGeneralisation.TesselationQuality


	/**
	 * @param fs
	 * @param maxCoordinatesNumber
	 * @param objMaxCoordinateNumber
	 * @param gt
	 * @param midRandom
	 * @return
	 */
	public static Collection<Feature> decomposeFeature(Collection<Feature> fs, int maxCoordinatesNumber, int objMaxCoordinateNumber, GeomType gt, double midRandom) {
		final Collection<Feature> out = new ArrayList<>();
		Partition.runRecursively(fs, p -> {
			logger.debug(p.getCode());
			out.addAll(p.getFeatures());
		}, maxCoordinatesNumber, objMaxCoordinateNumber, true, gt, midRandom);
		int i=1;
		for(Feature f : out) f.setID( f.getID()+"_"+(i++) );
		return out;
	}

	/**
	 * @param fs
	 * @param maxCoordinatesNumber
	 * @param objMaxCoordinateNumber
	 * @param gt
	 * @param midRandom
	 * @return
	 */
	public static Collection<Feature> decomposeFeature(Collection<Feature> fs, int maxCoordinatesNumber, int objMaxCoordinateNumber, GeomType gt, double midRandom) {
		final Collection<Feature> out = new ArrayList<>();
		PartitionedOperation op = new PartitionedOperation() {
			@Override
			public void run(Partition p) {
				logger.debug(p.getCode());
				out.addAll(p.getFeatures());
			}
		};
		Partition.runRecursively(fs, op, maxCoordinatesNumber, objMaxCoordinateNumber, true, gt, midRandom);
		int i=1;
		for(Feature f : out) f.setID( f.getID()+"_"+(i++) );
		return out;
	}

Replace Anonymous With Lambda eu.europa.ec.eurostat.jgiscotools.algo.Decomposer.decomposeFeature.op.new PartitionedOperation with p -> {logger.debug(p.getCode()); in method public decomposeFeature(fs Collection<Feature>, maxCoordinatesNumber int, objMaxCoordinateNumber int, gt GeomType, midRandom double) : Collection<Feature> from class eu.europa.ec.eurostat.jgiscotools.algo.Decomposer


	@Override
	public void add(Category obj) {
		String sql = "INSERT INTO category values(null, ?)";
		try(PreparedStatement stmt = JDBCConnectionFactory.getConnection()
				.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
			stmt.setString(1, obj.getName());
			stmt.execute();
			ResultSet rs = stmt.getGeneratedKeys(); // Fill in the empty id field back of bean.
			if(rs.next()) {
				int id = rs.getInt(1);
				obj.setId(id);
			}
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void add(Category obj) {
		String sql = "INSERT INTO category values(null, ?)";
		try {
			PreparedStatement stmt = JDBCconnectionFactory.getConnection().prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			stmt.setString(1, obj.getName());
			stmt.execute();
			ResultSet rs = stmt.getGeneratedKeys(); // Fill in the empty id field back of bean.
			if(rs.next()) {
				int id = rs.getInt(1);
				obj.setId(id);
			}
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

Try With Resources try(PreparedStatement stmt=JDBCConnectionFactory.getConnection().prepareStatement(sql,Statement.RETURN_GENERATED_KEYS)) in method public add(obj Category) : void from class top.ourck.dao.CategoryDao


	@Override
	public void delete(int id) {
		String sql = "DELETE FROM category WHERE id = " + id;
		try(Connection conn = JDBCConnectionFactory.getConnection();
				Statement stmt = conn.createStatement()) {
			stmt.execute(sql);
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void delete(int id) {
		try {
			Statement stmt = JDBCconnectionFactory.getConnection().createStatement();
			String sql = "DELETE FROM category WHERE id = " + id;
			stmt.execute(sql);
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); Statement stmt=conn.createStatement()) in method public delete(id int) : void from class top.ourck.dao.CategoryDao


	@Override
	public void update(Category obj) {
		String sql = "UPDATE category set name = ? WHERE id = ?";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				PreparedStatement stmt = conn.prepareStatement(sql)) {
			stmt.setString(1, obj.getName());
			stmt.setInt(2, obj.getId());

			stmt.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void update(Category obj) {
		String sql = "UPDATE category set name = ? WHERE id = ?";
		try {
			PreparedStatement stmt = JDBCconnectionFactory.getConnection().prepareStatement(sql);

			stmt.setString(1, obj.getName());
			stmt.setInt(2, obj.getId());

			stmt.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); PreparedStatement stmt=conn.prepareStatement(sql)) in method public update(obj Category) : void from class top.ourck.dao.CategoryDao


	@Override
	public Category query(int id) {
		Category c = null;
		String sql = "SELECT * FROM category WHERE id = ?";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				PreparedStatement stmt = conn.prepareStatement(sql)) {

			stmt.setInt(1, id);

			ResultSet rs = stmt.executeQuery();
			if(rs.next()) { // Only 1 item.
				c = new Category();
				c.setId(rs.getInt(1));
				c.setName(rs.getString(2));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return c;
	}

	@Override
	public Category query(int id) {
		Category c = null;
		try {
			String sql = "SELECT * FROM category WHERE id = ?";
			PreparedStatement stmt = JDBCconnectionFactory.getConnection().prepareStatement(sql);

			stmt.setInt(1, id);

			ResultSet rs = stmt.executeQuery();
			if(rs.next()) { // Only 1 item.
				c = new Category();
				c.setId(rs.getInt(1));
				c.setName(rs.getString(2));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return c;
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); PreparedStatement stmt=conn.prepareStatement(sql)) in method public query(id int) : Category from class top.ourck.dao.CategoryDao


	@Override
	public List<Category> list(int start, int count) {
		List<Category> list = new LinkedList<>();
		String sql = "SELECT * FROM category ORDER BY id DESC LIMIT ?, ?";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				PreparedStatement s = conn.prepareStatement(sql)) {
			s.setInt(1, start);
			s.setInt(2, count);
			ResultSet rs = s.executeQuery();

			while(rs.next()) {
				Category c = new Category();
				c.setId(rs.getInt(1));
				c.setName(rs.getString(2));
				list.add(c);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list;
	}

	@Override
	public List<Category> list(int start, int count) {
		List<Category> list = new LinkedList<>();
		try {
			String sql = "SELECT * FROM category ORDER BY id DESC LIMIT ?, ?";
			PreparedStatement s = JDBCconnectionFactory.getConnection().prepareStatement(sql);
			s.setInt(1, start);
			s.setInt(2, count);
			ResultSet rs = s.executeQuery();

			while(rs.next()) {
				Category c = new Category();
				c.setId(rs.getInt(1));
				c.setName(rs.getString(2));
				list.add(c);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list;
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); PreparedStatement s=conn.prepareStatement(sql)) in method public list(start int, count int) : List<Category> from class top.ourck.dao.CategoryDao


	@Override
	public int getTotal() {
		int n = 0;
		String sql = "SELECT COUNT(*) FROM category";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				Statement stmt = conn.createStatement()) {
			ResultSet rs = stmt.executeQuery(sql);
			//n = rs.getFetchSize();
			while(rs.next()) {
				n = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return n;
	}

	@Override
	public int getTotal() {
		int n = 0;
		try {
			Statement stmt = JDBCconnectionFactory.getConnection().createStatement();
			String sql = "SELECT COUNT(*) FROM category";
			ResultSet rs = stmt.executeQuery(sql);
			//n = rs.getFetchSize();
			while(rs.next()) {
				n = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return n;
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); Statement stmt=conn.createStatement()) in method public getTotal() : int from class top.ourck.dao.CategoryDao


	@Override
	public void add(User obj) {
		String sql = "INSERT INTO user values(null, ?, ?)";
		try(PreparedStatement stmt = JDBCConnectionFactory.getConnection()
				.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
			stmt.setString(1, obj.getName());
			stmt.setString(2, obj.getPassword());

			stmt.execute();
			ResultSet rs = stmt.getGeneratedKeys(); // Fill in the empty id field back of bean.
			if(rs.next()) {
				int id = rs.getInt(1);
				obj.setId(id);
			}
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void add(User obj) {
		String sql = "INSERT INTO user values(null, ?, ?)";
		try {
			PreparedStatement stmt = JDBCconnectionFactory.getConnection().prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

			stmt.setString(1, obj.getName());
			stmt.setString(2, obj.getPassword());

			stmt.execute();
			ResultSet rs = stmt.getGeneratedKeys(); // Fill in the empty id field back of bean.
			if(rs.next()) {
				int id = rs.getInt(1);
				obj.setId(id);
			}
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

Try With Resources try(PreparedStatement stmt=JDBCConnectionFactory.getConnection().prepareStatement(sql,Statement.RETURN_GENERATED_KEYS)) in method public add(obj User) : void from class top.ourck.dao.UserDao


	@Override
	public void delete(int id) {
		String sql = "DELETE FROM user WHERE id = " + id;
		try(Connection conn = JDBCConnectionFactory.getConnection();
				Statement stmt = conn.createStatement()) {
			stmt.execute(sql);
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void delete(int id) {
		try {
			Statement stmt = JDBCconnectionFactory.getConnection().createStatement();
			String sql = "DELETE FROM user WHERE id = " + id;
			stmt.execute(sql);
		} catch(SQLException e) {
			e.printStackTrace();
		}
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); Statement stmt=conn.createStatement()) in method public delete(id int) : void from class top.ourck.dao.UserDao


	@Override
	public void update(User obj) {
		String sql = "UPDATE user set name = ?, password = ? WHERE id = ?";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				PreparedStatement stmt = conn.prepareStatement(sql)) {
			stmt.setString(1, obj.getName());
			stmt.setString(2, obj.getPassword());
			stmt.setInt(3, obj.getId());

			stmt.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void update(User obj) {
		String sql = "UPDATE user set name = ?, password = ? WHERE id = ?";
		try {
			PreparedStatement stmt = JDBCconnectionFactory.getConnection().prepareStatement(sql);

			stmt.setString(1, obj.getName());
			stmt.setString(2, obj.getPassword());
			stmt.setInt(3, obj.getId());

			stmt.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); PreparedStatement stmt=conn.prepareStatement(sql)) in method public update(obj User) : void from class top.ourck.dao.UserDao


	@Override
	public User query(int id) {
		User u = null;
		String sql = "SELECT * FROM user WHERE id = ?";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				PreparedStatement stmt = conn.prepareStatement(sql)) {
			stmt.setInt(1, id);

			ResultSet rs = stmt.executeQuery();
			if(rs.next()) { // Only 1 item.
				u = new User();
				u.setId(rs.getInt(1));
				u.setName(rs.getString(2));
				u.setPassword(rs.getString(3));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return u;
	}

	@Override
	public User query(int id) {
		User u = null;
		try {
			String sql = "SELECT * FROM user WHERE id = ?";
			PreparedStatement stmt = JDBCconnectionFactory.getConnection().prepareStatement(sql);

			stmt.setInt(1, id);

			ResultSet rs = stmt.executeQuery();
			if(rs.next()) { // Only 1 item.
				u = new User();
				u.setId(rs.getInt(1));
				u.setName(rs.getString(2));
				u.setPassword(rs.getString(3));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return u;
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); PreparedStatement stmt=conn.prepareStatement(sql)) in method public query(id int) : User from class top.ourck.dao.UserDao


	@Override
	public List<User> list(int start, int count) {
		List<User> list = new LinkedList<>();
		String sql = "SELECT * FROM user ORDER BY id DESC LIMIT ?, ?";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				PreparedStatement s = conn.prepareStatement(sql)) {
			s.setInt(1, start);
			s.setInt(2, count);
			ResultSet rs = s.executeQuery();

			while(rs.next()) {
				User c = new User();
				c.setId(rs.getInt(1));
				c.setName(rs.getString(2));
				c.setPassword(rs.getString(3));
				list.add(c);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list;
	}

	@Override
	public List<User> list(int start, int count) {
		List<User> list = new LinkedList<>();
		try {
			String sql = "SELECT * FROM user ORDER BY id DESC LIMIT ?, ?";
			PreparedStatement s = JDBCconnectionFactory.getConnection().prepareStatement(sql);
			s.setInt(1, start);
			s.setInt(2, count);
			ResultSet rs = s.executeQuery();

			while(rs.next()) {
				User c = new User();
				c.setId(rs.getInt(1));
				c.setName(rs.getString(2));
				c.setPassword(rs.getString(3));
				list.add(c);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list;
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); PreparedStatement s=conn.prepareStatement(sql)) in method public list(start int, count int) : List<User> from class top.ourck.dao.UserDao


	@Override
	public int getTotal() {
		int n = 0;
		String sql = "SELECT COUNT(*) FROM user";
		try(Connection conn = JDBCConnectionFactory.getConnection();
				Statement stmt = conn.createStatement()) {
			ResultSet rs = stmt.executeQuery(sql);
			//n = rs.getFetchSize();
			while(rs.next()) {
				n = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return n;
	}

	@Override
	public int getTotal() {
		int n = 0;
		try {
			Statement stmt = JDBCconnectionFactory.getConnection().createStatement();
			String sql = "SELECT COUNT(*) FROM user";
			ResultSet rs = stmt.executeQuery(sql);
			//n = rs.getFetchSize();
			while(rs.next()) {
				n = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return n;
	}

Try With Resources try(Connection conn=JDBCConnectionFactory.getConnection(); Statement stmt=conn.createStatement()) in method public getTotal() : int from class top.ourck.dao.UserDao


    /**
     * Cria uma instância da classe informada no parâmetro.
     *
     * @param <T>
     * @param classe
     * @return
     */
    public static <T> T instantiateClass(Class<T> classe) {
        try {
            return classe.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new IllegalArgumentException(
                    "Não foi possível instanciar a classe: " + classe.getName(), e);
        }
    }

    /**
     * Cria uma instância da classe informada no parâmetro.
     *
     * @param <T>
     * @param classe
     * @return
     */
    public static <T> T instantiateClass(Class<T> classe) {
        try {
            return classe.newInstance();
        } catch (InstantiationException e) {
            throw new IllegalArgumentException(
                    "Não foi possível instanciar a classe: " + classe.getName(), e);
        } catch (IllegalAccessException e) {
            throw new IllegalArgumentException(
                    "Não foi possível instanciar a classe: " + classe.getName(), e);
        }
    }

Merge Catch [catch(InstantiationException e), catch(IllegalAccessException e)] to catch(InstantiationException|IllegalAccessException e) in method public instantiateClass(classe Class<T>) : T from class tracker.core.utils.Reflection


    /**
     * Retorna os streams de todos os recursos encontrados no class loader
     * padrão com o nome informado.
     *
     * @param name the of resource
     * @param useCache define if open stream with cache
     * @return list of streams
     */
    public static List<InputStream> getResources(String name, boolean useCache) {
        List<InputStream> inputsStreams = new ArrayList<>();
        ClassLoader cl = getDefaultClassLoader();
        try {
            Enumeration<URL> urls = cl.getResources(name);

            while (urls.hasMoreElements()) {
                URL url = (URL) urls.nextElement();
                URLConnection urlConnection = url.openConnection();
                urlConnection.setUseCaches(useCache);
                inputsStreams.add(urlConnection.getInputStream());
            }
        } catch (IOException e) {
            e.printStackTrace(System.err);
        }
        return inputsStreams;
    }

    /**
     * Retorna os streams de todos os recursos encontrados no class loader
     * padrão com o nome informado.
     *
     * @param name the of resource
     * @param useCache define if open stream with cache
     * @return list of streams
     */
    public static List<InputStream> getResources(String name, boolean useCache) {
        List<InputStream> inputsStreams = new ArrayList<InputStream>();
        ClassLoader cl = getDefaultClassLoader();
        try {
            Enumeration<URL> urls = cl.getResources(name);

            while (urls.hasMoreElements()) {
                URL url = (URL) urls.nextElement();
                URLConnection urlConnection = url.openConnection();
                urlConnection.setUseCaches(useCache);
                inputsStreams.add(urlConnection.getInputStream());
            }
        } catch (IOException e) {
            e.printStackTrace(System.err);
        }
        return inputsStreams;
    }

Replace Generic With Diamond ArrayList<InputStream> with ArrayList<> in method public getResources(name String, useCache boolean) : List<InputStream> from class tracker.core.utils.Reflection


    void removeParameterValues(final String value) {
        // List.remove only removes the FIRST and not all values...
        this.values.removeIf(s -> s.equals(value));
    }

    void removeParameterValues(final String value) {
        // List.remove only removes the FIRST and not all values...
        for (Iterator<String> i = this.values.iterator(); i.hasNext(); ) {
            if (i.next().equals(value)) {
                i.remove();
            }
        }
    }

Replace Loop With Pipeline for(Iterator<String> i=this.values.iterator(); i.hasNext()) with this.values.removeIf(s -> s.equals(value)); in method package removeParameterValues(value String) : void from class walkingkooka.net.UrlParameterValueList


    /**
     * Returns a {@link IpPort} which was free by creating a {@link ServerSocket} and then releasing it.
     */
    public static IpPort free() {
        IpPort port;
        try (final ServerSocket server = new ServerSocket(0)) {
            port = IpPort.with(server.getLocalPort());
        } catch (final Exception cause) {
            throw new IllegalStateException("Unable to discover free port", cause);
        }
        return port;
    }

    /**
     * Returns a {@link IpPort} which was free by creating a {@link ServerSocket} and then releasing it.
     */
    public static IpPort free() {
        IpPort port;
        ServerSocket server = null;
        try {
            server = new ServerSocket(0);
            port = IpPort.with(server.getLocalPort());
        } catch (final Exception cause) {
            throw new IllegalStateException("Unable to discover free port", cause);
        } finally {
            if (null != server) {
                try {
                    server.close();
                } catch (final IOException ignore) {
                }
            }
        }
        return port;
    }

Try With Resources try(final ServerSocket server=new ServerSocket(0)) in method public free() : IpPort from class walkingkooka.net.IpPort


    /**
     * Registers a directive name including some meta data about its parameters.
     */
    private static <T> CacheControlDirective<T> register(final CacheControlDirectiveName<T> name) {
        final Optional<T> parameter = Optional.empty();
        name.checkValue(parameter);

        final CacheControlDirective<T> directive = new CacheControlDirective<>(name, parameter);
        CONSTANTS.put(name, directive);
        return directive;
    }

    /**
     * Registers a directive name including some meta data about its parameters.
     */
    private static <T> CacheControlDirective<T> register(final CacheControlDirectiveName<T> name) {
        final Optional<T> parameter = Optional.empty();
        name.checkValue(parameter);

        final CacheControlDirective<T> directive = new CacheControlDirective<T>(name, parameter);
        CONSTANTS.put(name, directive);
        return directive;
    }

Replace Generic With Diamond CacheControlDirective<T> with CacheControlDirective<> in method private register(name CacheControlDirectiveName<T>) : CacheControlDirective<T> from class walkingkooka.net.header.CacheControlDirective


    /**
     * Factory that creates a new {@link CacheControlDirective} with the provided name and parameter.
     */
    public static <T> CacheControlDirective<T> with(final CacheControlDirectiveName<T> name,
                                                    final Optional<T> parameter) {
        Objects.requireNonNull(name, "name");
        name.checkValue(parameter);

        return parameter.isPresent() ?
                new CacheControlDirective<>(name, parameter) :
                withoutParameter(name, parameter);
    }

    /**
     * Factory that creates a new {@link CacheControlDirective} with the provided name and parameter.
     */
    public static <T> CacheControlDirective<T> with(final CacheControlDirectiveName<T> name,
                                                    final Optional<T> parameter) {
        Objects.requireNonNull(name, "name");
        name.checkValue(parameter);

        return parameter.isPresent() ?
                new CacheControlDirective<T>(name, parameter) :
                withoutParameter(name, parameter);
    }

Replace Generic With Diamond CacheControlDirective<T> with CacheControlDirective<> in method public with(name CacheControlDirectiveName<T>, parameter Optional<T>) : CacheControlDirective<T> from class walkingkooka.net.header.CacheControlDirective


    /**
     * Factory that creates a new {@link CacheControlDirective}
     */
    private CacheControlDirective<T> replace(final Optional<T> parameter) {
        return new CacheControlDirective<>(this.name, parameter);
    }

    /**
     * Factory that creates a new {@link CacheControlDirective}
     */
    private CacheControlDirective<T> replace(final Optional<T> parameter) {
        return new CacheControlDirective<T>(this.name, parameter);
    }

Replace Generic With Diamond CacheControlDirective<T> with CacheControlDirective<> in method private replace(parameter Optional<T>) : CacheControlDirective<T> from class walkingkooka.net.header.CacheControlDirective


    /**
     * Registers a directive name including some meta data about its parameters.
     */
    private static <V> CacheControlDirectiveName<V> register(final String name,
                                                             final CacheControlDirectiveNameParameter required,
                                                             final HeaderValueHandler<V> handler,
                                                             final CacheControlDirectiveNameScope scope) {
        final CacheControlDirectiveName<V> constant = new CacheControlDirectiveName<>(name, required, handler, scope);
        CONSTANTS.put(name, constant);
        return constant;
    }

    /**
     * Registers a directive name including some meta data about its parameters.
     */
    private static <V> CacheControlDirectiveName<V> register(final String name,
                                                             final CacheControlDirectiveNameParameter required,
                                                             final HeaderValueHandler<V> handler,
                                                             final CacheControlDirectiveNameScope scope) {
        final CacheControlDirectiveName<V> constant = new CacheControlDirectiveName<V>(name, required, handler, scope);
        CONSTANTS.put(name, constant);
        return constant;
    }

Replace Generic With Diamond CacheControlDirectiveName<V> with CacheControlDirectiveName<> in method private register(name String, required CacheControlDirectiveNameParameter, handler HeaderValueHandler<V>, scope CacheControlDirectiveNameScope) : CacheControlDirectiveName<V> from class walkingkooka.net.header.CacheControlDirectiveName


    /**
     * Creates and adds a new {@link HttpHeaderName} to the cache being built.
     */
    private static <T> HttpHeaderName<T> registerConstant(final String header,
                                                          final HttpHeaderNameScope scope,
                                                          final HeaderValueHandler<T> headerValue) {

        // https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests
        boolean conditional;

        switch (header.toLowerCase()) {
            case "etag":
            case "if-match":
            case "if-none-match":
            case "if-modified-since":
            case "if-unmodified-since":
            case "if-range":
                conditional = true;
                break;
            default:
                conditional = false;
                break;
        }

        final HttpHeaderName<T> httpHeader = new HttpHeaderName<>(header,
                scope,
                headerValue,
                conditional,
                CaseSensitivity.INSENSITIVE.startsWith(header, CONTENT_HEADER_PREFIX));
        HttpHeaderName.CONSTANTS.put(header, httpHeader);
        return httpHeader;
    }

    /**
     * Creates and adds a new {@link HttpHeaderName} to the cache being built.
     */
    private static <T> HttpHeaderName<T> registerConstant(final String header,
                                                          final HttpHeaderNameScope scope,
                                                          final HeaderValueHandler<T> headerValue) {

        // https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests
        boolean conditional;

        switch (header.toLowerCase()) {
            case "etag":
            case "if-match":
            case "if-none-match":
            case "if-modified-since":
            case "if-unmodified-since":
            case "if-range":
                conditional = true;
                break;
            default:
                conditional = false;
                break;
        }

        final HttpHeaderName<T> httpHeader = new HttpHeaderName<T>(header,
                scope,
                headerValue,
                conditional,
                CaseSensitivity.INSENSITIVE.startsWith(header, CONTENT_HEADER_PREFIX));
        HttpHeaderName.CONSTANTS.put(header, httpHeader);
        return httpHeader;
    }

Replace Generic With Diamond HttpHeaderName<T> with HttpHeaderName<> in method private registerConstant(header String, scope HttpHeaderNameScope, headerValue HeaderValueHandler<T>) : HttpHeaderName<T> from class walkingkooka.net.header.HttpHeaderName


    private void generateAndCheck(final byte[] body, final String randomSource, final String boundary) {
        final Supplier<Byte> boundaryCharcters = new Supplier<>() {

            @Override
            public Byte get() {
                return (byte) new String(MediaTypeBoundary.BOUNDARY_CHARACTERS)
                        .indexOf(randomSource.charAt(i++));
            }

            int i = 0;
        };

        final MediaTypeBoundary mediaTypeBoundary = MediaTypeBoundary.generate0(body,
                boundaryCharcters,
                boundary.length());

        assertEquals(MediaTypeBoundary.with(boundary),
                mediaTypeBoundary,
                "Incorrect boundary generated for " + ToStringBuilder.empty().value(body).build());
    }

    private void generateAndCheck(final byte[] body, final String randomSource, final String boundary) {
        final Supplier<Byte> boundaryCharcters = new Supplier<Byte>() {

            @Override
            public Byte get() {
                return (byte) new String(MediaTypeBoundary.BOUNDARY_CHARACTERS)
                        .indexOf(randomSource.charAt(i++));
            }

            int i = 0;
        };

        final MediaTypeBoundary mediaTypeBoundary = MediaTypeBoundary.generate0(body,
                boundaryCharcters,
                boundary.length());

        assertEquals(MediaTypeBoundary.with(boundary),
                mediaTypeBoundary,
                "Incorrect boundary generated for " + ToStringBuilder.empty().value(body).build());
    }

Replace Generic With Diamond Supplier<Byte> with Supplier<> in method private generateAndCheck(body byte[], randomSource String, boundary String) : void from class walkingkooka.net.header.MediaTypeBoundaryTest


    private String toXmlText(final XmlNode node) {
        try (final StringWriter writer = new StringWriter()) {
            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
            node.toXml(transformer, writer);
            writer.flush();
            return writer.toString();
        } catch (final IOException | TransformerException cause) {
            throw new HttpServerException(cause.getMessage(), cause);
        }
    }

    private String toXmlText(final XmlNode node) {
        try (final StringWriter writer = new StringWriter()) {
            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
            node.toXml(transformer, writer);
            writer.flush();
            return writer.toString();
        } catch (final IOException cause) {
            throw new HttpServerException(cause.getMessage(), cause);
        } catch (final TransformerException cause) {
            throw new HttpServerException(cause.getMessage(), cause);
        }
    }

Merge Catch [catch(final IOException cause), catch(final TransformerException cause)] to catch(final IOException|TransformerException cause) in method private toXmlText(node XmlNode) : String from class walkingkooka.net.http.server.hateos.HateosContentTypeXmlNode


    /**
     * Returns the MAC address of the current machine in 00:00:00:00:00:00 format
     *
     * @return
     */
    private static String getMacAddress()
    {
        try
        {
            InetAddress ip2 = InetAddress.getLocalHost();

            NetworkInterface network = NetworkInterface.getByInetAddress(ip2);

            byte[] mac = network.getHardwareAddress();

            if (mac != null)
            {
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < mac.length; i++)
                {
                    sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
                }
                return sb.toString().replaceAll("-", ":");
            }
        }
        catch (UnknownHostException | SocketException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Returns the MAC address of the current machine in 00:00:00:00:00:00 format
     *
     * @return
     */
    private static String getMacAddress()
    {
        try
        {
            InetAddress ip2 = InetAddress.getLocalHost();

            NetworkInterface network = NetworkInterface.getByInetAddress(ip2);

            byte[] mac = network.getHardwareAddress();

            if (mac != null)
            {
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < mac.length; i++)
                {
                    sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
                }
                return sb.toString().replaceAll("-", ":");
            }
        }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        catch (SocketException e)
        {
            e.printStackTrace();
        }
        return null;
    }

Merge Catch [catch(UnknownHostException e), catch(SocketException e)] to catch(UnknownHostException|SocketException e) in method private getMacAddress() : String from class com.arisath.pcap.PcapDissection


	public MessageSender getMessageSender() {
		return m -> channel.send(utf8.encode(m), new InetSocketAddress(remoteHost, remotePort));
	}

	public MessageSender getMessageSender() {
		return new MessageSender() {
			public void send(String message) throws IOException {
				InetSocketAddress destination = new InetSocketAddress(remoteHost, remotePort);
				channel.send(utf8.encode(message), destination);
			}
		};
	}

Replace Anonymous With Lambda org.ase.fourwins.client.udphelper.UdpCommunicator.getMessageSender.new MessageSender with m -> channel.send(utf8.encode(m),new InetSocketAddress(remoteHost,remotePort)) in method public getMessageSender() : MessageSender from class org.ase.fourwins.client.udphelper.UdpCommunicator


    private ElementFilter createSomeElementFilter() {
        return (driver, elements) -> null;
    }

    private ElementFilter createSomeElementFilter() {
        return new ElementFilter() {
            @Override
            public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
                return null;
            }
        };
    }

Replace Anonymous With Lambda io.github.seleniumquery.by.common.elementfilter.ElementFilterListTest.createSomeElementFilter.new ElementFilter with (driver, elements) -> null in method private createSomeElementFilter() : ElementFilter from class io.github.seleniumquery.by.common.elementfilter.ElementFilterListTest


	/**
	 * Every element MUST abide to the CHILDREN filter.
	 *
	 * Then, every remaining, must have AT LEAST ONE ANCESTOR that matches the ANCESTOR FILTER.
	 */
	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		List<WebElement> filteredChildren = childrenFilters.filter(driver, elements);

		outerFor:for (Iterator<WebElement> iterator = filteredChildren.iterator(); iterator.hasNext();) {
			WebElement currentChild = iterator.next();

			// closest() starts in the element, we don't want that because we are testing the parent on the descendant selector
			WebElement startingElement = SelectorUtils.parent(currentChild);

			String cssSelector = null;// ancestorCompiled.getCssSelector();
			WebElement matchingAncestor = ClosestFunction.closest(driver, startingElement, cssSelector);
			while (matchingAncestor != null) {

				List<WebElement> mas = ancestorFilters.filter(driver, new ArrayList<>(Arrays.asList(matchingAncestor)));
				boolean theMatchedAncestorMatchesTheFilter = !mas.isEmpty();
				if (theMatchedAncestorMatchesTheFilter) {
					continue outerFor; // this element's ancestor is OK, keep it, continue to next element
				}

				// walks up one step, otherwise closest will match the same element again
				matchingAncestor = SelectorUtils.parent(matchingAncestor);

				matchingAncestor = ClosestFunction.closest(driver, matchingAncestor, cssSelector);
			}
			iterator.remove();
		}
		return filteredChildren;
	}

	/**
	 * Every element MUST abide to the CHILDREN filter.
	 *
	 * Then, every remaining, must have AT LEAST ONE ANCESTOR that matches the ANCESTOR FILTER.
	 */
	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		List<WebElement> filteredChildren = childrenFilters.filter(driver, elements);

		outerFor:for (Iterator<WebElement> iterator = filteredChildren.iterator(); iterator.hasNext();) {
			WebElement currentChild = iterator.next();

			// closest() starts in the element, we don't want that because we are testing the parent on the descendant selector
			WebElement startingElement = SelectorUtils.parent(currentChild);

			String cssSelector = null;// ancestorCompiled.getCssSelector();
			WebElement matchingAncestor = ClosestFunction.closest(driver, startingElement, cssSelector);
			while (matchingAncestor != null) {

				List<WebElement> mas = ancestorFilters.filter(driver, new ArrayList<WebElement>(Arrays.asList(matchingAncestor)));
				boolean theMatchedAncestorMatchesTheFilter = !mas.isEmpty();
				if (theMatchedAncestorMatchesTheFilter) {
					continue outerFor; // this element's ancestor is OK, keep it, continue to next element
				}

				// walks up one step, otherwise closest will match the same element again
				matchingAncestor = SelectorUtils.parent(matchingAncestor);

				matchingAncestor = ClosestFunction.closest(driver, matchingAncestor, cssSelector);
			}
			iterator.remove();
		}
		return filteredChildren;
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public filterElements(driver WebDriver, elements List<WebElement>) : List<WebElement> from class io.github.seleniumquery.by.firstgen.filter.DescendantGeneralCombinatorFilter


	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		elements = siblingElementCompiled.filter(driver, elements);

		for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
			WebElement element = iterator.next();

			WebElement previousSibling = SelectorUtils.getPreviousSibling(element);

			List<WebElement> psf = previousElementCompiled.filter(driver, new ArrayList<>(Arrays.asList(previousSibling)));
			boolean previousSiblingMatchesTheFilter = !psf.isEmpty();
			if (!previousSiblingMatchesTheFilter) {
				// this element's previous sibling is NOT ok, dont keep it
				iterator.remove();
			}
		}
		return elements;
	}

	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		elements = siblingElementCompiled.filter(driver, elements);

		for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
			WebElement element = iterator.next();

			WebElement previousSibling = SelectorUtils.getPreviousSibling(element);

			List<WebElement> psf = previousElementCompiled.filter(driver, new ArrayList<WebElement>(Arrays.asList(previousSibling)));
			boolean previousSiblingMatchesTheFilter = !psf.isEmpty();
			if (!previousSiblingMatchesTheFilter) {
				// this element's previous sibling is NOT ok, dont keep it
				iterator.remove();
			}
		}
		return elements;
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public filterElements(driver WebDriver, elements List<WebElement>) : List<WebElement> from class io.github.seleniumquery.by.firstgen.filter.OldDirectAdjacentFilter


	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		elements = elementCompiledSelector.filter(driver, elements);

		for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
			WebElement element = iterator.next();

			WebElement parent = SelectorUtils.parent(element);

			List<WebElement> pf = parentCompiledSelector.filter(driver, new ArrayList<>(Arrays.asList(parent)));
			boolean parentMatchesTheFilter = !pf.isEmpty();
			if (!parentMatchesTheFilter) {
				// this element's parent is NOT ok, dont keep it
				iterator.remove();
			}
		}
		return elements;
	}

	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		elements = elementCompiledSelector.filter(driver, elements);

		for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
			WebElement element = iterator.next();

			WebElement parent = SelectorUtils.parent(element);

			List<WebElement> pf = parentCompiledSelector.filter(driver, new ArrayList<WebElement>(Arrays.asList(parent)));
			boolean parentMatchesTheFilter = !pf.isEmpty();
			if (!parentMatchesTheFilter) {
				// this element's parent is NOT ok, dont keep it
				iterator.remove();
			}
		}
		return elements;
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public filterElements(driver WebDriver, elements List<WebElement>) : List<WebElement> from class io.github.seleniumquery.by.firstgen.filter.OldChildSelectorFilter


	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		elements = childrenCompiled.filter(driver, elements);

		outerFor:for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
			WebElement element = iterator.next();

			// closest() starts in the element, we dont want that because we are testing the parent on the descendant selector
			WebElement startingElement = SelectorUtils.parent(element);

			WebElement matchingAncestor = ClosestFunction.closest(driver, startingElement, ancestorCompiled.getCssSelector());
			while (matchingAncestor != null) {

				List<WebElement> mas = ancestorCompiled.filter(driver, new ArrayList<>(Arrays.asList(matchingAncestor)));
				boolean theMatchedAncestorMatchesTheFilter = !mas.isEmpty();
				if (theMatchedAncestorMatchesTheFilter) {
					continue outerFor; // this element's ancestor is ok, keep it, continue to next element
				}

				// walks up one step, otherwise closest will match the same element again
				matchingAncestor = SelectorUtils.parent(matchingAncestor);

				matchingAncestor = ClosestFunction.closest(driver, matchingAncestor, ancestorCompiled.getCssSelector());
			}
			iterator.remove();
		}
		return elements;
	}

	@Override
	public List<WebElement> filterElements(WebDriver driver, List<WebElement> elements) {
		elements = childrenCompiled.filter(driver, elements);

		outerFor:for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
			WebElement element = iterator.next();

			// closest() starts in the element, we dont want that because we are testing the parent on the descendant selector
			WebElement startingElement = SelectorUtils.parent(element);

			WebElement matchingAncestor = ClosestFunction.closest(driver, startingElement, ancestorCompiled.getCssSelector());
			while (matchingAncestor != null) {

				List<WebElement> mas = ancestorCompiled.filter(driver, new ArrayList<WebElement>(Arrays.asList(matchingAncestor)));
				boolean theMatchedAncestorMatchesTheFilter = !mas.isEmpty();
				if (theMatchedAncestorMatchesTheFilter) {
					continue outerFor; // this element's ancestor is ok, keep it, continue to next element
				}

				// walks up one step, otherwise closest will match the same element again
				matchingAncestor = SelectorUtils.parent(matchingAncestor);

				matchingAncestor = ClosestFunction.closest(driver, matchingAncestor, ancestorCompiled.getCssSelector());
			}
			iterator.remove();
		}
		return elements;
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public filterElements(driver WebDriver, elements List<WebElement>) : List<WebElement> from class io.github.seleniumquery.by.firstgen.filter.OldDescendantFilter


    @Test
    public void filterPredicateFunction() {
        // given
        SeleniumQueryFunctionsMock seleniumQueryFunctions = createMockSeleniumQueryFunctions();
        SeleniumQueryObject seleniumQueryObject = createStubSeleniumQueryObjectWithSeleniumQueryFunctions(seleniumQueryFunctions);
        SeleniumQueryObject configuredReturningObject = createSeleniumQueryObjectDummy();

        @SuppressWarnings("Guava")
        com.google.common.base.Predicate<WebElement> stubFilterFunction = input -> { throw new PseudoTestDoubleException(); };
        Predicate<WebElement> stubFilterFunctionApplyMethod = new Predicate<>() {
            @Override
            public boolean test(WebElement webElement) { return false; }
            @SuppressWarnings({"unchecked", "EqualsWhichDoesntCheckParameterClass"}) @Override
            public boolean equals(Object actual) {
                try {
                    ((Predicate<WebElement>) actual).test(null);
                    fail("stub is configured to throw exception");
                } catch (PseudoTestDoubleException ignored) {
                    // exception is expected
                }
                return true;
            }
        };
        seleniumQueryFunctions.filterPredicateMethod = configureReturnValue(configuredReturningObject).forArgs(seleniumQueryObject, stubFilterFunctionApplyMethod);
        // when
        SeleniumQueryObject returnedObject = seleniumQueryObject.filter(stubFilterFunction);
        // then
        assertThat(returnedObject, is(configuredReturningObject));
    }

    @Test
    public void filterPredicateFunction() {
        // given
        SeleniumQueryFunctionsMock seleniumQueryFunctions = createMockSeleniumQueryFunctions();
        SeleniumQueryObject seleniumQueryObject = createStubSeleniumQueryObjectWithSeleniumQueryFunctions(seleniumQueryFunctions);
        SeleniumQueryObject configuredReturningObject = createSeleniumQueryObjectDummy();

        @SuppressWarnings("Guava")
        com.google.common.base.Predicate<WebElement> stubFilterFunction = input -> { throw new PseudoTestDoubleException(); };
        Predicate<WebElement> stubFilterFunctionApplyMethod = new Predicate<WebElement>() {
            @Override
            public boolean test(WebElement webElement) { return false; }
            @SuppressWarnings({"unchecked", "EqualsWhichDoesntCheckParameterClass"}) @Override
            public boolean equals(Object actual) {
                try {
                    ((Predicate<WebElement>) actual).test(null);
                    fail("stub is configured to throw exception");
                } catch (PseudoTestDoubleException ignored) {
                    // exception is expected
                }
                return true;
            }
        };
        seleniumQueryFunctions.filterPredicateMethod = configureReturnValue(configuredReturningObject).forArgs(seleniumQueryObject, stubFilterFunctionApplyMethod);
        // when
        SeleniumQueryObject returnedObject = seleniumQueryObject.filter(stubFilterFunction);
        // then
        assertThat(returnedObject, is(configuredReturningObject));
    }

Replace Generic With Diamond Predicate<WebElement> with Predicate<> in method public filterPredicateFunction() : void from class io.github.seleniumquery.SeleniumQueryObjectTest


    @Test
    public void toElementFinder__should_call_toElementFinder_in_object_returned_from_strategy_method() throws Exception {
        final ElementFinder argFinder = new ElementFinder((WebDriver) null, null, null);
        final ElementFinder returningFinder = new ElementFinder((WebDriver) null, null, null);
        final CssConditionImplementedFinders finderGen = leftFinder -> {
            if (argFinder.equals(leftFinder)) {
                return returningFinder;
            }
            return null;
        };
        PseudoClassSelector pseudoClassSelector = PseudoClassTestUtils.createPseudoClassSelectorAppliedToUniversalSelector("1");
        CssFunctionalPseudoClassCondition functionalPseudoClassCondition = new CssFunctionalPseudoClassCondition(pseudoClassSelector) {
            @Override
            public CssConditionImplementedFinders getElementFinderFactoryStrategy() {
                return finderGen;
            }
        };

        ElementFinder returnedFinder = functionalPseudoClassCondition.toElementFinder(argFinder);
        assertThat(returnedFinder, is(returningFinder));
    }

    @Test
    public void toElementFinder__should_call_toElementFinder_in_object_returned_from_strategy_method() throws Exception {
        final ElementFinder argFinder = new ElementFinder((WebDriver) null, null, null);
        final ElementFinder returningFinder = new ElementFinder((WebDriver) null, null, null);
        final CssConditionImplementedFinders finderGen = new CssConditionImplementedFinders() {
            @Override
            public ElementFinder toElementFinder(ElementFinder leftFinder) {
                if (argFinder.equals(leftFinder)) {
                    return returningFinder;
                }
                return null;
            }
        };
        PseudoClassSelector pseudoClassSelector = PseudoClassTestUtils.createPseudoClassSelectorAppliedToUniversalSelector("1");
        CssFunctionalPseudoClassCondition functionalPseudoClassCondition = new CssFunctionalPseudoClassCondition(pseudoClassSelector) {
            @Override
            public CssConditionImplementedFinders getElementFinderFactoryStrategy() {
                return finderGen;
            }
        };

        ElementFinder returnedFinder = functionalPseudoClassCondition.toElementFinder(argFinder);
        assertThat(returnedFinder, is(returningFinder));
    }

Replace Anonymous With Lambda io.github.seleniumquery.by.secondgen.csstree.condition.pseudoclass.SQCssFunctionalPseudoClassConditionTest.toElementFinder__should_call_toElementFinder_in_object_returned_from_strategy_method.finderGen.new CssConditionImplementedFinders with leftFinder -> {if(argFinder.equals(leftFinder)){return returningFinder; in method public toElementFinder__should_call_toElementFinder_in_object_returned_from_strategy_method() : void from class io.github.seleniumquery.by.secondgen.csstree.condition.pseudoclass.CssFunctionalPseudoClassConditionTest


    @Test
    public void resultSQO_should_have_targetSQO_as_previous_object__and_same_SQFunctions_as_targetSQO__and_same_WebDriver_as_targetSQO() {
        FunctionsTestUtils.verifyFunctionReturnsSQOWithCorrectWebDriverAndFunctionsAndPrevious(targetSQO -> filterPredicateFunction.filter(targetSQO, PREDICATE_DOES_NOT_MATTER_IN_THIS_TEST));
    }

    @Test
    public void resultSQO_should_have_targetSQO_as_previous_object__and_same_SQFunctions_as_targetSQO__and_same_WebDriver_as_targetSQO() {
        FunctionsTestUtils.verifyFunctionReturnsSQOWithCorrectWebDriverAndFunctionsAndPrevious(new Function<SeleniumQueryObject, SeleniumQueryObject>() {
            @Override
            public SeleniumQueryObject apply(SeleniumQueryObject targetSQO) {
                return filterPredicateFunction.filter(targetSQO, PREDICATE_DOES_NOT_MATTER_IN_THIS_TEST);
            }
        });
    }

Replace Anonymous With Lambda io.github.seleniumquery.functions.jquery.traversing.filtering.filterfunction.FilterPredicateFunctionTest.resultSQO_should_have_targetSQO_as_previous_object__and_same_SQFunctions_as_targetSQO__and_same_WebDriver_as_targetSQO.verifyFunctionReturnsSQOWithCorrectWebDriverAndFunctionsAndPrevious.new Function<SeleniumQueryObject,SeleniumQueryObject> with targetSQO -> filterPredicateFunction.filter(targetSQO,PREDICATE_DOES_NOT_MATTER_IN_THIS_TEST) in method public resultSQO_should_have_targetSQO_as_previous_object__and_same_SQFunctions_as_targetSQO__and_same_WebDriver_as_targetSQO() : void from class io.github.seleniumquery.functions.jquery.traversing.filtering.filterfunction.FilterPredicateFunctionTest


	private <T extends SQCssPseudoClassCondition> T instantiatePseudoClass(Class<T> pseudoClass, PseudoClassSelector pseudoClassSelectorConstructorArgument) {
		try {
			// instantiates SQCssFunctionalPseudoClassCondition using pseudoClassSelectorConstructorArgument arg
			if (SQCssFunctionalPseudoClassCondition.class.isAssignableFrom(pseudoClass)) {
				return pseudoClass.getConstructor(PseudoClass.class).newInstance(pseudoClassSelectorConstructorArgument);
			}
			// instantiates non-functional SQCssPseudoClassCondition, which should not need an arg.
			return pseudoClass.getConstructor().newInstance();
		} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
			throw new RuntimeException(e);
		}
	}

	private <T extends SQCssPseudoClassCondition> T instantiatePseudoClass(Class<T> pseudoClass, PseudoClassSelector pseudoClassSelectorConstructorArgument) {
		try {
			// instantiates SQCssFunctionalPseudoClassCondition using pseudoClassSelectorConstructorArgument arg
			if (SQCssFunctionalPseudoClassCondition.class.isAssignableFrom(pseudoClass)) {
				return pseudoClass.getConstructor(new Class[]{PseudoClass.class}).newInstance(pseudoClassSelectorConstructorArgument);
			}
			// instantiates non-functional SQCssPseudoClassCondition, which should not need an arg.
			return pseudoClass.getConstructor().newInstance();
		} catch (InstantiationException e) {
			throw new RuntimeException(e);
		} catch (IllegalAccessException e) {
			throw new RuntimeException(e);
		} catch (InvocationTargetException e) {
			throw new RuntimeException(e);
		} catch (NoSuchMethodException e) {
			throw new RuntimeException(e);
		}
	}

Merge Catch [catch(InstantiationException e), catch(IllegalAccessException e), catch(InvocationTargetException e), catch(NoSuchMethodException e)] to catch(InstantiationException|IllegalAccessException|InvocationTargetException|NoSuchMethodException e) in method private instantiatePseudoClass(pseudoClass Class<T>, pseudoClassSelectorConstructorArgument PseudoClassSelector) : T from class io.github.seleniumquery.by.secondgen.parser.translator.condition.SQCssPseudoClassConditionTranslator


	/**
	 * Returns the Map for the given driver, initializing it if necessary.
	 */
	private Map<String, Boolean> getDriverMap(WebDriver driver) {
		Map<String, Boolean> driverMap = driverSupportedPseudos.get(driver);
		if (driverMap == null) {
			driverMap = new HashMap<>();
			driverSupportedPseudos.put(driver, driverMap);
		}
		return driverMap;
	}

	/**
	 * Returns the Map for the given driver, initializing it if necessary.
	 */
	private Map<String, Boolean> getDriverMap(WebDriver driver) {
		Map<String, Boolean> driverMap = driverSupportedPseudos.get(driver);
		if (driverMap == null) {
			driverMap = new HashMap<String, Boolean>();
			driverSupportedPseudos.put(driver, driverMap);
		}
		return driverMap;
	}

Replace Generic With Diamond HashMap<String,Boolean> with HashMap<> in method private getDriverMap(driver WebDriver) : Map<String,Boolean> from class io.github.seleniumquery.utils.DriverVersionUtils


    public CssSelectorPreParser(String selector) {
        this.selector = selector;
        this.selectorCurrentParsingIndex = 0;
        this.transformedSelector = new StringBuilder();
        this.argumentMap = new HashMap<>();
    }

    public CssSelectorPreParser(String selector) {
        this.selector = selector;
        this.selectorCurrentParsingIndex = 0;
        this.transformedSelector = new StringBuilder();
        this.argumentMap = new HashMap<Integer, String>();
    }

Replace Generic With Diamond HashMap<Integer,String> with HashMap<> in method public CssSelectorPreParser(selector String) from class io.github.seleniumquery.by.common.preparser.CssSelectorPreParser


    public ElementFilterList merge(ElementFilterList elementFilterList) {
        if (elementFilterList == FILTER_NOTHING_LIST) {
            return this;
        }
        List<ElementFilter> myFilters = this.getElementFilters();
        List<ElementFilter> theirFilters = elementFilterList.getElementFilters();
        List<ElementFilter> ourFilters = new ArrayList<>(myFilters.size()+theirFilters.size());
        ourFilters.addAll(myFilters);
        ourFilters.addAll(theirFilters);
        return new ElementFilterList(ourFilters);
    }

    public ElementFilterList merge(ElementFilterList elementFilterList) {
        if (elementFilterList == FILTER_NOTHING_LIST) {
            return this;
        }
        List<ElementFilter> myFilters = this.getElementFilters();
        List<ElementFilter> theirFilters = elementFilterList.getElementFilters();
        List<ElementFilter> ourFilters = new ArrayList<ElementFilter>(myFilters.size()+theirFilters.size());
        ourFilters.addAll(myFilters);
        ourFilters.addAll(theirFilters);
        return new ElementFilterList(ourFilters);
    }

Replace Generic With Diamond ArrayList<ElementFilter> with ArrayList<> in method public merge(elementFilterList ElementFilterList) : ElementFilterList from class io.github.seleniumquery.by.common.elementfilter.ElementFilterList


	private List<CssParsedSelector> createParsedSelectorList() {
        List<CssParsedSelector> cssParsedSelectorList = new LinkedList<>();
		for (int i = 0; i < selectorList.getLength(); i++) {
			CssParsedSelector cssParsedSelector = new CssParsedSelector(selectorList.item(i), this.argumentMap);
            cssParsedSelectorList.add(cssParsedSelector);
		}
        return cssParsedSelectorList;
	}

	private List<CssParsedSelector> createParsedSelectorList() {
        List<CssParsedSelector> cssParsedSelectorList = new LinkedList<CssParsedSelector>();
		for (int i = 0; i < selectorList.getLength(); i++) {
			CssParsedSelector cssParsedSelector = new CssParsedSelector(selectorList.item(i), this.argumentMap);
            cssParsedSelectorList.add(cssParsedSelector);
		}
        return cssParsedSelectorList;
	}

Replace Generic With Diamond LinkedList<CssParsedSelector> with LinkedList<> in method private createParsedSelectorList() : List<CssParsedSelector> from class io.github.seleniumquery.by.common.preparser.CssParsedSelectorList


	private static CssSelector<? extends Selector, ? extends XPathComponent> getSelector(Selector selector) {
		switch (selector.getSelectorType()) {
			case Selector.SAC_CONDITIONAL_SELECTOR:
				return conditionalCssSelector;

			case Selector.SAC_ELEMENT_NODE_SELECTOR:
				return tagNameSelector;

			// COMBINATORS
			case Selector.SAC_DESCENDANT_SELECTOR:
				return descendantCssSelector;
			case Selector.SAC_CHILD_SELECTOR:
				return directDescendantCssSelector;
			case Selector.SAC_DIRECT_ADJACENT_SELECTOR:
				return directAdjacentCssSelector;
			// the parser returns this code for the "E ~ F" selector. Go figure...
			case Selector.SAC_ANY_NODE_SELECTOR:
				return generalAdjacentCssSelector;

			case Selector.SAC_ROOT_NODE_SELECTOR:
			case Selector.SAC_NEGATIVE_SELECTOR:
			case Selector.SAC_TEXT_NODE_SELECTOR:
			case Selector.SAC_CDATA_SECTION_NODE_SELECTOR:
			case Selector.SAC_PROCESSING_INSTRUCTION_NODE_SELECTOR:
			case Selector.SAC_COMMENT_NODE_SELECTOR:
			case Selector.SAC_PSEUDO_ELEMENT_SELECTOR:
			default:
				return new UnknownCssSelector<>(selector.getSelectorType());
		}
	}

	private static CssSelector<? extends Selector, ? extends XPathComponent> getSelector(Selector selector) {
		switch (selector.getSelectorType()) {
			case Selector.SAC_CONDITIONAL_SELECTOR:
				return conditionalCssSelector;

			case Selector.SAC_ELEMENT_NODE_SELECTOR:
				return tagNameSelector;

			// COMBINATORS
			case Selector.SAC_DESCENDANT_SELECTOR:
				return descendantCssSelector;
			case Selector.SAC_CHILD_SELECTOR:
				return directDescendantCssSelector;
			case Selector.SAC_DIRECT_ADJACENT_SELECTOR:
				return directAdjacentCssSelector;
			// the parser returns this code for the "E ~ F" selector. Go figure...
			case Selector.SAC_ANY_NODE_SELECTOR:
				return generalAdjacentCssSelector;

			case Selector.SAC_ROOT_NODE_SELECTOR:
			case Selector.SAC_NEGATIVE_SELECTOR:
			case Selector.SAC_TEXT_NODE_SELECTOR:
			case Selector.SAC_CDATA_SECTION_NODE_SELECTOR:
			case Selector.SAC_PROCESSING_INSTRUCTION_NODE_SELECTOR:
			case Selector.SAC_COMMENT_NODE_SELECTOR:
			case Selector.SAC_PSEUDO_ELEMENT_SELECTOR:
			default:
				return new UnknownCssSelector<Selector>(selector.getSelectorType());
		}
	}

Replace Generic With Diamond UnknownCssSelector<Selector> with UnknownCssSelector<> in method private getSelector(selector Selector) : CssSelector<? extends Selector,? extends XPathComponent> from class io.github.seleniumquery.by.firstgen.css.CssSelectorFactory


	public CssConditionalSelector<? extends Condition, ? extends ConditionComponent> getSelector(Condition condition) {
	    switch (condition.getConditionType()) {
		    case Condition.SAC_AND_CONDITION:
		    	return andConditionalCssSelector;
		    case Condition.SAC_OR_CONDITION:
		    	// if the exception below gets thrown, this means the CSS Parser has changed and
		    	// we must update our code as well.
		    	throw new RuntimeException("The Condition.SAC_OR_CONDITION is not used by the CSS Parser. " +
		    			"This version of seleniumQuery is not compatible with the CSS Parser present in the" +
		    			"classpath.");

		    case Condition.SAC_ATTRIBUTE_CONDITION:
		    	if (condition instanceof com.steadystate.css.parser.selectors.PrefixAttributeConditionImpl) {
		    		return startsWithAttributeCssSelector;
		    	}
		    	if (condition instanceof com.steadystate.css.parser.selectors.SuffixAttributeConditionImpl) {
		    		return endsWithAttributeCssSelector;
		    	}
		    	if (condition instanceof com.steadystate.css.parser.selectors.SubstringAttributeConditionImpl) {
		    		return containsSubstringAttributeCssSelector;
		    	}
		    	// else: condition is most probably a instance of com.steadystate.css.parser.selectors.AttributeConditionImpl
		    	return equalsOrHasAttributeCssSelector;
	        case Condition.SAC_ID_CONDITION:
				return idAttributeCssSelector;
	        case Condition.SAC_ONE_OF_ATTRIBUTE_CONDITION:
	        	return containsWordAttributeCssSelector;
	        case Condition.SAC_BEGIN_HYPHEN_ATTRIBUTE_CONDITION:
	        	return containsPrefixAttributeCssSelector;
	        case Condition.SAC_CLASS_CONDITION:
	        	return classAttributeCssSelector;

	        case Condition.SAC_PSEUDO_CLASS_CONDITION:
	        	return pseudoClassCssSelector;
	        case Condition.SAC_LANG_CONDITION:
	        	return langPseudoClassEvaluator;

	        default:
				return new UnknownConditionalCssSelector<>(condition.getConditionType());
		}
	}

	public CssConditionalSelector<? extends Condition, ? extends ConditionComponent> getSelector(Condition condition) {
	    switch (condition.getConditionType()) {
		    case Condition.SAC_AND_CONDITION:
		    	return andConditionalCssSelector;
		    case Condition.SAC_OR_CONDITION:
		    	// if the exception below gets thrown, this means the CSS Parser has changed and
		    	// we must update our code as well.
		    	throw new RuntimeException("The Condition.SAC_OR_CONDITION is not used by the CSS Parser. " +
		    			"This version of seleniumQuery is not compatible with the CSS Parser present in the" +
		    			"classpath.");

		    case Condition.SAC_ATTRIBUTE_CONDITION:
		    	if (condition instanceof com.steadystate.css.parser.selectors.PrefixAttributeConditionImpl) {
		    		return startsWithAttributeCssSelector;
		    	}
		    	if (condition instanceof com.steadystate.css.parser.selectors.SuffixAttributeConditionImpl) {
		    		return endsWithAttributeCssSelector;
		    	}
		    	if (condition instanceof com.steadystate.css.parser.selectors.SubstringAttributeConditionImpl) {
		    		return containsSubstringAttributeCssSelector;
		    	}
		    	// else: condition is most probably a instance of com.steadystate.css.parser.selectors.AttributeConditionImpl
		    	return equalsOrHasAttributeCssSelector;
	        case Condition.SAC_ID_CONDITION:
				return idAttributeCssSelector;
	        case Condition.SAC_ONE_OF_ATTRIBUTE_CONDITION:
	        	return containsWordAttributeCssSelector;
	        case Condition.SAC_BEGIN_HYPHEN_ATTRIBUTE_CONDITION:
	        	return containsPrefixAttributeCssSelector;
	        case Condition.SAC_CLASS_CONDITION:
	        	return classAttributeCssSelector;

	        case Condition.SAC_PSEUDO_CLASS_CONDITION:
	        	return pseudoClassCssSelector;
	        case Condition.SAC_LANG_CONDITION:
	        	return langPseudoClassEvaluator;

	        default:
				return new UnknownConditionalCssSelector<Condition>(condition.getConditionType());
		}
	}

Replace Generic With Diamond UnknownConditionalCssSelector<Condition> with UnknownConditionalCssSelector<> in method public getSelector(condition Condition) : CssConditionalSelector<? extends Condition,? extends ConditionComponent> from class io.github.seleniumquery.by.firstgen.css.conditionals.ConditionalCssSelectorFactory


	public static TagComponentList compileSelectorList(String selector) {
		CssParsedSelectorList parsedSelectorList = CssSelectorParser.parseSelector(selector);

    	List<TagComponent> tagComponents = new ArrayList<>(parsedSelectorList.size());
        for (CssParsedSelector cssParsedSelector : parsedSelectorList) {
            tagComponents.add(compileIntoTagComponent(cssParsedSelector));
        }
    	return new TagComponentList(tagComponents);
	}

	public static TagComponentList compileSelectorList(String selector) {
		CssParsedSelectorList parsedSelectorList = CssSelectorParser.parseSelector(selector);

    	List<TagComponent> tagComponents = new ArrayList<TagComponent>(parsedSelectorList.size());
        for (CssParsedSelector cssParsedSelector : parsedSelectorList) {
            tagComponents.add(compileIntoTagComponent(cssParsedSelector));
        }
    	return new TagComponentList(tagComponents);
	}

Replace Generic With Diamond ArrayList<TagComponent> with ArrayList<> in method public compileSelectorList(selector String) : TagComponentList from class io.github.seleniumquery.by.firstgen.xpath.XPathComponentCompilerService


    public static List<XPathComponent> joinComponents(List<XPathComponent> oneComponents, XPathComponent otherCopyWithModifiedType) {
        List<XPathComponent> aggregatedComponents = new ArrayList<>(oneComponents);
        aggregatedComponents.add(otherCopyWithModifiedType);
        aggregatedComponents.addAll(otherCopyWithModifiedType.combinatedComponents);
        return aggregatedComponents;
    }

    public static List<XPathComponent> joinComponents(List<XPathComponent> oneComponents, XPathComponent otherCopyWithModifiedType) {
        List<XPathComponent> aggregatedComponents = new ArrayList<XPathComponent>(oneComponents);
        aggregatedComponents.add(otherCopyWithModifiedType);
        aggregatedComponents.addAll(otherCopyWithModifiedType.combinatedComponents);
        return aggregatedComponents;
    }

Replace Generic With Diamond ArrayList<XPathComponent> with ArrayList<> in method public joinComponents(oneComponents List<XPathComponent>, otherCopyWithModifiedType XPathComponent) : List<XPathComponent> from class io.github.seleniumquery.by.firstgen.xpath.component.ComponentUtils


    static ElementFilterList toElementFilterList(ElementFilter filter) {
        if (filter == ElementFilter.FILTER_NOTHING) {
            return emptyElementFilterList();
        }
        ArrayList<ElementFilter> elementFilters = new ArrayList<>();
        elementFilters.add(filter);
        return new ElementFilterList(elementFilters);
    }

    static ElementFilterList toElementFilterList(ElementFilter filter) {
        if (filter == ElementFilter.FILTER_NOTHING) {
            return emptyElementFilterList();
        }
        ArrayList<ElementFilter> elementFilters = new ArrayList<ElementFilter>();
        elementFilters.add(filter);
        return new ElementFilterList(elementFilters);
    }

Replace Generic With Diamond ArrayList<ElementFilter> with ArrayList<> in method package toElementFilterList(filter ElementFilter) : ElementFilterList from class io.github.seleniumquery.by.firstgen.xpath.component.ComponentUtils


    public List<WebElement> findWebElements(SearchContext context) {
        ArrayList<WebElement> webElements = new ArrayList<>();
        try {
            webElements.add(By.id(wantedId).findElement(context));
        } catch (NoSuchElementException ignored) { }
        return webElements;
    }

    public List<WebElement> findWebElements(SearchContext context) {
        ArrayList<WebElement> webElements = new ArrayList<WebElement>();
        try {
            webElements.add(By.id(wantedId).findElement(context));
        } catch (NoSuchElementException ignored) { }
        return webElements;
    }

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public findWebElements(context SearchContext) : List<WebElement> from class io.github.seleniumquery.by.firstgen.xpath.component.special.IdConditionComponent


    public SQCssSelectorList(List<SQCssSelector> sqCssSelectors) {
        this.sqCssSelectors = Collections.unmodifiableList(new ArrayList<>(sqCssSelectors));
    }

    public SQCssSelectorList(List<SQCssSelector> sqCssSelectors) {
        this.sqCssSelectors = Collections.unmodifiableList(new ArrayList<SQCssSelector>(sqCssSelectors));
    }

Replace Generic With Diamond ArrayList<SQCssSelector> with ArrayList<> in method public SQCssSelectorList(sqCssSelectors List<SQCssSelector>) from class io.github.seleniumquery.by.secondgen.csstree.SQCssSelectorList


        @Override
        public XPathAndFilterFinder toXPath(WebDriver webDriver) {
            SQCssSelectorList parse = SQParseTreeBuilder.parse(getArgument());
            List<String> xPathExpressions = new LinkedList<>();
            for (SQCssSelector sqCssSelector : parse) {
                xPathExpressions.add(sqCssSelector.toElementFinder(webDriver).getXPathAndFilterFinder().getRawXPathExpression());
            }
            String joinedXPathExps = Joiner.on(" | ").join(xPathExpressions);
            return XPathAndFilterFinder.pureXPath("not("+joinedXPathExps+")");
        }

        @Override
        public XPathAndFilterFinder toXPath(WebDriver webDriver) {
            SQCssSelectorList parse = SQParseTreeBuilder.parse(getArgument());
            List<String> xPathExpressions = new LinkedList<String>();
            for (SQCssSelector sqCssSelector : parse) {
                xPathExpressions.add(sqCssSelector.toElementFinder(webDriver).getXPathAndFilterFinder().getRawXPathExpression());
            }
            String joinedXPathExps = Joiner.on(" | ").join(xPathExpressions);
            return XPathAndFilterFinder.pureXPath("not("+joinedXPathExps+")");
        }

Replace Generic With Diamond LinkedList<String> with LinkedList<> in method public toXPath(webDriver WebDriver) : XPathAndFilterFinder from class io.github.seleniumquery.by.secondgen.csstree.condition.pseudoclass.basicfilter.SQCssNotPseudoClass.notPseudoClassFinderFactoryStrategy.new MaybeNativelySupportedPseudoClass


    private static List<SQCssSelector> translate(CssParsedSelectorList parsedSelectorList) {
        List<SQCssSelector> cssSelectors = new ArrayList<>(parsedSelectorList.size());
        for (CssParsedSelector cssParsedSelector : parsedSelectorList) {
            cssSelectors.add(translate(cssParsedSelector));
        }
        return cssSelectors;
    }

    private static List<SQCssSelector> translate(CssParsedSelectorList parsedSelectorList) {
        List<SQCssSelector> cssSelectors = new ArrayList<SQCssSelector>(parsedSelectorList.size());
        for (CssParsedSelector cssParsedSelector : parsedSelectorList) {
            cssSelectors.add(translate(cssParsedSelector));
        }
        return cssSelectors;
    }

Replace Generic With Diamond ArrayList<SQCssSelector> with ArrayList<> in method private translate(parsedSelectorList CssParsedSelectorList) : List<SQCssSelector> from class io.github.seleniumquery.by.secondgen.parser.SQParseTreeBuilder


	public static SeleniumQueryObject eq(SeleniumQueryObject seleniumQueryObject, List<WebElement> elements, int index) {
		ArrayList<WebElement> eqElementList = new ArrayList<>();

		By selectorAtIndex = getByForElementAtPosition(seleniumQueryObject.getBy(), index);
		if (index < 0) {
			if (elements.size() >= -index) {
				eqElementList.add(elements.get(elements.size() + index));
				selectorAtIndex = getByForElementAtPosition(seleniumQueryObject.getBy(), elements.size() + index);
			}
		} else {
			if (elements.size() > index) {
				eqElementList.add(elements.get(index));
			}
		}

        return InternalSeleniumQueryObjectFactory.instance().create(seleniumQueryObject.getWebDriver(), selectorAtIndex, eqElementList, seleniumQueryObject);
    }

	public static SeleniumQueryObject eq(SeleniumQueryObject seleniumQueryObject, List<WebElement> elements, int index) {
		ArrayList<WebElement> eqElementList = new ArrayList<WebElement>();

		By selectorAtIndex = getByForElementAtPosition(seleniumQueryObject.getBy(), index);
		if (index < 0) {
			if (elements.size() >= -index) {
				eqElementList.add(elements.get(elements.size() + index));
				selectorAtIndex = getByForElementAtPosition(seleniumQueryObject.getBy(), elements.size() + index);
			}
		} else {
			if (elements.size() > index) {
				eqElementList.add(elements.get(index));
			}
		}

        return InternalSeleniumQueryObjectFactory.instance().create(seleniumQueryObject.getWebDriver(), selectorAtIndex, eqElementList, seleniumQueryObject);
    }

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public eq(seleniumQueryObject SeleniumQueryObject, elements List<WebElement>, index int) : SeleniumQueryObject from class io.github.seleniumquery.functions.jquery.traversing.filtering.EqFunction


	public static SeleniumQueryObject not(SeleniumQueryObject seleniumQueryObject, List<WebElement> elements, String selector) {
		List<WebElement> filteredElements = new ArrayList<>(elements);

		List<WebElement> elementsToExclude = seleniumQueryObject.getWebDriver().findElements(SeleniumQueryBy.byEnhancedSelector(selector));
		filteredElements.removeAll(elementsToExclude);

		return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(seleniumQueryObject.getWebDriver(), filteredElements, seleniumQueryObject);
	}

	public static SeleniumQueryObject not(SeleniumQueryObject seleniumQueryObject, List<WebElement> elements, String selector) {
		List<WebElement> filteredElements = new ArrayList<WebElement>(elements);

		List<WebElement> elementsToExclude = seleniumQueryObject.getWebDriver().findElements(SeleniumQueryBy.byEnhancedSelector(selector));
		filteredElements.removeAll(elementsToExclude);

		return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(seleniumQueryObject.getWebDriver(), filteredElements, seleniumQueryObject);
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public not(seleniumQueryObject SeleniumQueryObject, elements List<WebElement>, selector String) : SeleniumQueryObject from class io.github.seleniumquery.functions.jquery.traversing.filtering.NotFunction


	public static SeleniumQueryObject closest(SeleniumQueryObject caller, List<WebElement> elements, String selector) {
		WebDriver driver = caller.getWebDriver();

		List<WebElement> closests = new ArrayList<>(elements.size());
		for (WebElement element : elements) {
			WebElement closestElement = closest(driver, element, selector);
			if (closestElement != null) {
				closests.add(closestElement);
			}
		}

		return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(caller.getWebDriver(), closests, caller);
	}

	public static SeleniumQueryObject closest(SeleniumQueryObject caller, List<WebElement> elements, String selector) {
		WebDriver driver = caller.getWebDriver();

		List<WebElement> closests = new ArrayList<WebElement>(elements.size());
		for (WebElement element : elements) {
			WebElement closestElement = closest(driver, element, selector);
			if (closestElement != null) {
				closests.add(closestElement);
			}
		}

		return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(caller.getWebDriver(), closests, caller);
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public closest(caller SeleniumQueryObject, elements List<WebElement>, selector String) : SeleniumQueryObject from class io.github.seleniumquery.functions.jquery.traversing.treetraversal.ClosestFunction


	public static SeleniumQueryObject find(SeleniumQueryObject seleniumQueryObject, List<WebElement> elements, String selector) {
		List<WebElement> allElementsBelow = new LinkedList<>();
		SeleniumQueryBy by = SeleniumQueryBy.byEnhancedSelector(selector);
		for (WebElement webElement : elements) {
			List<WebElement> elementsBelowThisElement = webElement.findElements(by);
			allElementsBelow.addAll(elementsBelowThisElement);
		}
		return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(seleniumQueryObject.getWebDriver(), allElementsBelow, seleniumQueryObject);
	}

	public static SeleniumQueryObject find(SeleniumQueryObject seleniumQueryObject, List<WebElement> elements, String selector) {
		List<WebElement> allElementsBelow = new LinkedList<WebElement>();
		SeleniumQueryBy by = SeleniumQueryBy.byEnhancedSelector(selector);
		for (WebElement webElement : elements) {
			List<WebElement> elementsBelowThisElement = webElement.findElements(by);
			allElementsBelow.addAll(elementsBelowThisElement);
		}
		return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(seleniumQueryObject.getWebDriver(), allElementsBelow, seleniumQueryObject);
	}

Replace Generic With Diamond LinkedList<WebElement> with LinkedList<> in method public find(seleniumQueryObject SeleniumQueryObject, elements List<WebElement>, selector String) : SeleniumQueryObject from class io.github.seleniumquery.functions.jquery.traversing.treetraversal.FindFunction


    public static <T> List<T> toImmutableRandomAccessList(List<T> els) {
        return Collections.unmodifiableList(new ArrayList<>(els));
    }

    public static <T> List<T> toImmutableRandomAccessList(List<T> els) {
        return Collections.unmodifiableList(new ArrayList<T>(els));
    }

Replace Generic With Diamond ArrayList<T> with ArrayList<> in method public toImmutableRandomAccessList(els List<T>) : List<T> from class io.github.seleniumquery.utils.ListUtils


	public static List<WebElement> itselfWithSiblings(WebElement element) {
		WebElement parent = SelectorUtils.parent(element);
		// if parent is null, then element is <HTML>, thus have no siblings
		if (parent == null) {
			return new ArrayList<>(Arrays.asList(element));
		}
		return getDirectChildren(parent);
	}

	public static List<WebElement> itselfWithSiblings(WebElement element) {
		WebElement parent = SelectorUtils.parent(element);
		// if parent is null, then element is <HTML>, thus have no siblings
		if (parent == null) {
			return new ArrayList<WebElement>(Arrays.asList(element));
		}
		return getDirectChildren(parent);
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public itselfWithSiblings(element WebElement) : List<WebElement> from class io.github.seleniumquery.utils.SelectorUtils


	public static List<WebElement> getPreviousSiblings(WebElement elementItSelf) {
		List<WebElement> itselfWithSiblings = SelectorUtils.itselfWithSiblings(elementItSelf);

		List<WebElement> previousSiblings = new ArrayList<>();
		for (WebElement siblingOrItSelf : itselfWithSiblings) {
			if (elementItSelf.equals(siblingOrItSelf)) {
				break;
			}
			previousSiblings.add(siblingOrItSelf);
		}
		return previousSiblings;
	}

	public static List<WebElement> getPreviousSiblings(WebElement elementItSelf) {
		List<WebElement> itselfWithSiblings = SelectorUtils.itselfWithSiblings(elementItSelf);

		List<WebElement> previousSiblings = new ArrayList<WebElement>();
		for (WebElement siblingOrItSelf : itselfWithSiblings) {
			if (elementItSelf.equals(siblingOrItSelf)) {
				break;
			}
			previousSiblings.add(siblingOrItSelf);
		}
		return previousSiblings;
	}

Replace Generic With Diamond ArrayList<WebElement> with ArrayList<> in method public getPreviousSiblings(elementItSelf WebElement) : List<WebElement> from class io.github.seleniumquery.utils.SelectorUtils


/**
	 *
Tests if the result of the preceding function is equal to the given argument.

	 * If you want to test for inequality, use .not().isEqualTo().
	 *
	 * @param valueToEqual The value the function call result must be equal to.
	 * @return An element that allows chaining of further waiting conditions or calling regular functions.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryAndOrThen isEqualTo(T valueToEqual) {
		Evaluator<T> equalsEvaluator = new EqualsEvaluator<>(getter);
		SeleniumQueryObject sq = fluentWait.waitUntil(equalsEvaluator, valueToEqual, seleniumQueryObject, this.negated);
		return new SeleniumQueryAndOrThen(sq);
	}

/**
	 *
Tests if the result of the preceding function is equal to the given argument.

	 * If you want to test for inequality, use .not().isEqualTo().
	 *
	 * @param valueToEqual The value the function call result must be equal to.
	 * @return An element that allows chaining of further waiting conditions or calling regular functions.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryAndOrThen isEqualTo(T valueToEqual) {
		Evaluator<T> equalsEvaluator = new EqualsEvaluator<T>(getter);
		SeleniumQueryObject sq = fluentWait.waitUntil(equalsEvaluator, valueToEqual, seleniumQueryObject, this.negated);
		return new SeleniumQueryAndOrThen(sq);
	}

Replace Generic With Diamond EqualsEvaluator<T> with EqualsEvaluator<> in method public isEqualTo(valueToEqual T) : SeleniumQueryAndOrThen from class io.github.seleniumquery.wait.SeleniumQueryEvaluateUntil


	/**
	 * Negates the criteria that follows.
	 *
	 * @return An object for specifying the criteria which the function call result must <b>NOT</b> meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<T> not() {
		return new SeleniumQueryEvaluateUntil<>(fluentWait, getter, seleniumQueryObject, !this.negated);
	}

	/**
	 * Negates the criteria that follows.
	 *
	 * @return An object for specifying the criteria which the function call result must <b>NOT</b> meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<T> not() {
		return new SeleniumQueryEvaluateUntil<T>(fluentWait, getter, seleniumQueryObject, !this.negated);
	}

Replace Generic With Diamond SeleniumQueryEvaluateUntil<T> with SeleniumQueryEvaluateUntil<> in method public not() : SeleniumQueryEvaluateUntil<T> from class io.github.seleniumquery.wait.SeleniumQueryEvaluateUntil


	public <T> SeleniumQueryObject waitUntil(final Evaluator<T> evaluator, final T value,
																	SeleniumQueryObject seleniumQueryObject, final boolean negated) {
		final WebDriver driver = seleniumQueryObject.getWebDriver();
		final By by = seleniumQueryObject.getBy();
		List<WebElement> elements = fluentWait(seleniumQueryObject, new WaitFunction<>(driver, value, evaluator, by, negated), "to "+evaluator.stringFor(value));
        return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(seleniumQueryObject.getWebDriver(), elements, seleniumQueryObject);
    }

	public <T> SeleniumQueryObject waitUntil(final Evaluator<T> evaluator, final T value,
																	SeleniumQueryObject seleniumQueryObject, final boolean negated) {
		final WebDriver driver = seleniumQueryObject.getWebDriver();
		final By by = seleniumQueryObject.getBy();
		List<WebElement> elements = fluentWait(seleniumQueryObject, new WaitFunction<T>(driver, value, evaluator, by, negated), "to "+evaluator.stringFor(value));
        return InternalSeleniumQueryObjectFactory.instance().createWithInvalidSelector(seleniumQueryObject.getWebDriver(), elements, seleniumQueryObject);
    }

Replace Generic With Diamond WaitFunction<T> with WaitFunction<> in method public waitUntil(evaluator Evaluator<T>, value T, seleniumQueryObject SeleniumQueryObject, negated boolean) : SeleniumQueryObject from class io.github.seleniumquery.wait.SeleniumQueryFluentWait


	/**
	 * Waits until every matched element's value meets the specified criteria.
	 *
	 * @return An object for specifying the criteria which the values of the elements must meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<String> val() {
		return new SeleniumQueryEvaluateUntil<>(this.fluentWait, ValGetter.VAL_GETTER, seleniumQueryObject);
	}

	/**
	 * Waits until every matched element's value meets the specified criteria.
	 *
	 * @return An object for specifying the criteria which the values of the elements must meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<String> val() {
		return new SeleniumQueryEvaluateUntil<String>(this.fluentWait, ValGetter.VAL_GETTER, seleniumQueryObject);
	}

Replace Generic With Diamond SeleniumQueryEvaluateUntil<String> with SeleniumQueryEvaluateUntil<> in method public val() : SeleniumQueryEvaluateUntil<String> from class io.github.seleniumquery.wait.SeleniumQueryWaitUntil


	/**
	 * Waits until every matched element's text meets the specified criteria.
	 *
	 * @return An object for specifying the criteria which the texts of the elements must meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<String> text() {
		return new SeleniumQueryEvaluateUntil<>(this.fluentWait, TextGetter.TEXT_GETTER, seleniumQueryObject);
	}

	/**
	 * Waits until every matched element's text meets the specified criteria.
	 *
	 * @return An object for specifying the criteria which the texts of the elements must meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<String> text() {
		return new SeleniumQueryEvaluateUntil<String>(this.fluentWait, TextGetter.TEXT_GETTER, seleniumQueryObject);
	}

Replace Generic With Diamond SeleniumQueryEvaluateUntil<String> with SeleniumQueryEvaluateUntil<> in method public text() : SeleniumQueryEvaluateUntil<String> from class io.github.seleniumquery.wait.SeleniumQueryWaitUntil


	/**
	 * Waits until every matched element has the given attribute meeting the specified criteria.
	 *
	 * @return An object for specifying the criteria which the attributes of the elements must meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<String> attr(String attributeName) {
		return new SeleniumQueryEvaluateUntil<>(this.fluentWait, new AttrGetter(attributeName), seleniumQueryObject);
	}

	/**
	 * Waits until every matched element has the given attribute meeting the specified criteria.
	 *
	 * @return An object for specifying the criteria which the attributes of the elements must meet.
	 *
	 * @since 0.9.0
	 */
	public SeleniumQueryEvaluateUntil<String> attr(String attributeName) {
		return new SeleniumQueryEvaluateUntil<String>(this.fluentWait, new AttrGetter(attributeName), seleniumQueryObject);
	}

Replace Generic With Diamond SeleniumQueryEvaluateUntil<String> with SeleniumQueryEvaluateUntil<> in method public attr(attributeName String) : SeleniumQueryEvaluateUntil<String> from class io.github.seleniumquery.wait.SeleniumQueryWaitUntil