From 0070014268e8a99f6d64566f8232798e68819bb0 Mon Sep 17 00:00:00 2001 From: jez04 <david.jezek@post.cz> Date: Wed, 6 Nov 2024 22:11:52 +0100 Subject: [PATCH] feat: :tada: solution --- src/main/java/lab/App.java | 44 ++++-- src/main/java/lab/Difficult.java | 16 +++ src/main/java/lab/DrawingThread.java | 14 +- src/main/java/lab/GameController.java | 50 ++++--- src/main/java/lab/MainScreenController.java | 53 +++++++ src/main/java/lab/Scene.java | 4 +- src/main/resources/lab/application.css | 63 ++++++++- src/main/resources/lab/gameWindow.fxml | 8 +- .../resources/lab/lochness-background.jpg | Bin 0 -> 48183 bytes src/main/resources/lab/mainScreen.fxml | 52 +++++++ .../structure/test/ClassStructureTest.java | 133 ++++++++++++------ 11 files changed, 348 insertions(+), 89 deletions(-) create mode 100644 src/main/java/lab/Difficult.java create mode 100644 src/main/java/lab/MainScreenController.java create mode 100644 src/main/resources/lab/lochness-background.jpg create mode 100644 src/main/resources/lab/mainScreen.fxml diff --git a/src/main/java/lab/App.java b/src/main/java/lab/App.java index 7c60166..9a2c2db 100644 --- a/src/main/java/lab/App.java +++ b/src/main/java/lab/App.java @@ -1,5 +1,8 @@ package lab; +import java.io.IOException; +import java.net.URL; + import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; @@ -16,6 +19,9 @@ import javafx.stage.WindowEvent; public class App extends Application { private GameController gameController; + + private Stage primaryStage; + public static void main(String[] args) { launch(args); } @@ -23,15 +29,8 @@ public class App extends Application { @Override public void start(Stage primaryStage) { try { - System.out.println(getClass().getResource("/lab/LochNess.gif")); - // Construct a main window with a canvas. - FXMLLoader gameLoader = new FXMLLoader(getClass().getResource("/lab/gameWindow.fxml")); - Parent root = gameLoader.load(); - GameController gameController = gameLoader.getController(); - Scene scene = new Scene(root); - String css = this.getClass().getResource("/lab/application.css").toExternalForm(); - scene.getStylesheets().add(css); - primaryStage.setScene(scene); + this.primaryStage = primaryStage; + switchToMenu(); primaryStage.resizableProperty().set(false); primaryStage.setTitle("Java 1 - 1th laboratory"); primaryStage.show(); @@ -42,9 +41,34 @@ public class App extends Application { } } + public void switchToGame(String name, int numberOfMonsters) throws IOException { + // Construct a main window with a canvas. + FXMLLoader gameLoader = new FXMLLoader(getClass().getResource("/lab/gameWindow.fxml")); + Parent root = gameLoader.load(); + gameController = gameLoader.getController(); + Scene scene = new Scene(root); + URL cssUrl = getClass().getResource("application.css"); + scene.getStylesheets().add(cssUrl.toString()); + primaryStage.setScene(scene); + gameController.startGame(name, numberOfMonsters); + } + private void switchToMenu() throws IOException { + // Construct a main window with a canvas. + FXMLLoader menuLoader = new FXMLLoader(getClass().getResource("/lab/mainScreen.fxml")); + Parent root = menuLoader.load(); + MainScreenController menuController = menuLoader.getController(); + menuController.setApp(this); + Scene scene = new Scene(root); + URL cssUrl = getClass().getResource("application.css"); + scene.getStylesheets().add(cssUrl.toString()); + primaryStage.setScene(scene); + } + @Override public void stop() throws Exception { - gameController.stop(); + if(gameController != null) { + gameController.stop(); + } super.stop(); } diff --git a/src/main/java/lab/Difficult.java b/src/main/java/lab/Difficult.java new file mode 100644 index 0000000..6186f27 --- /dev/null +++ b/src/main/java/lab/Difficult.java @@ -0,0 +1,16 @@ +package lab; + +public enum Difficult { + EASY(2), MEDIUM(5), HARD(10); + + private final int numberOfMonsters; + + private Difficult(int numberOfMonsters) { + this.numberOfMonsters = numberOfMonsters; + } + + public int getNumberOfMonsters() { + return numberOfMonsters; + } + +} diff --git a/src/main/java/lab/DrawingThread.java b/src/main/java/lab/DrawingThread.java index 2131dcd..cf32ffe 100644 --- a/src/main/java/lab/DrawingThread.java +++ b/src/main/java/lab/DrawingThread.java @@ -7,7 +7,6 @@ import javafx.scene.paint.Color; public class DrawingThread extends AnimationTimer { - private final Canvas canvas; private final GraphicsContext gc; private Scene scene; private int frameCount = 0; @@ -15,10 +14,9 @@ public class DrawingThread extends AnimationTimer { private long lastTime; private long lastSecond = 0; - public DrawingThread(Canvas canvas) { - this.canvas = canvas; + public DrawingThread(Canvas canvas, Scene scene) { + this.scene = scene; this.gc = canvas.getGraphicsContext2D(); - scene = new Scene(canvas.getWidth(), canvas.getHeight()); lastTime = System.nanoTime(); } @@ -30,6 +28,10 @@ public class DrawingThread extends AnimationTimer { long timeDelta = now - lastTime; scene.draw(gc); scene.simulate(timeDelta); + computeAndShowFps(now, timeDelta); + } + + private void computeAndShowFps(long now, long timeDelta) { long currentSecond = now / 1_000_000_000; if(lastSecond == currentSecond) { frameCount ++; @@ -45,8 +47,4 @@ public class DrawingThread extends AnimationTimer { gc.strokeText(Double.toString(1_000_000_000d/timeDelta), 10, 50); } - public Scene getScene() { - return scene; - } - } diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java index b6c34cd..6d13ce1 100644 --- a/src/main/java/lab/GameController.java +++ b/src/main/java/lab/GameController.java @@ -4,54 +4,64 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.fxml.FXML; -import javafx.geometry.Point2D; import javafx.scene.canvas.Canvas; +import javafx.scene.control.Label; import javafx.scene.control.Slider; public class GameController { + private Scene scene; + @FXML private Slider boatPosition; private DrawingThread timer; - @FXML - private Canvas canvas; + @FXML + private Canvas canvas; - @FXML - private Slider speed; + @FXML + private Slider speed; - @FXML - void changePosition(ActionEvent event) { - timer.getScene().getRock().changePosition(); + @FXML + private Label playerName; - } + @FXML + void changePosition(ActionEvent event) { + scene.getRock().changePosition(); - @FXML - void initialize() { - assert boatPosition != null : "fx:id=\"angle\" was not injected: check your FXML file 'gameWindow.fxml'."; - assert canvas != null : "fx:id=\"canvas\" was not injected: check your FXML file 'gameWindow.fxml'."; - assert speed != null : "fx:id=\"speed\" was not injected: check your FXML file 'gameWindow.fxml'."; - timer = new DrawingThread(canvas); - timer.start(); + } + + @FXML + void initialize() { + assert boatPosition != null : "fx:id=\"angle\" was not injected: check your FXML file 'gameWindow.fxml'."; + assert canvas != null : "fx:id=\"canvas\" was not injected: check your FXML file 'gameWindow.fxml'."; + assert speed != null : "fx:id=\"speed\" was not injected: check your FXML file 'gameWindow.fxml'."; boatPosition.valueProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { - timer.getScene().getBoat().setPosInPercentage(newValue.doubleValue()); + scene.getBoat().setPosInPercentage(newValue.doubleValue()); } }); speed.valueProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { - timer.getScene().getBackground().setSpeed(newValue.doubleValue()); + scene.getBackground().setSpeed(newValue.doubleValue()); } }); - } + } + + public void startGame(String name, int numberOfMonsters) { + playerName.setText(name); + scene = new Scene(canvas.getWidth(), canvas.getHeight(), numberOfMonsters); + timer = new DrawingThread(canvas, scene); + timer.start(); + + } public void stop() { timer.stop(); } - } diff --git a/src/main/java/lab/MainScreenController.java b/src/main/java/lab/MainScreenController.java new file mode 100644 index 0000000..0dec5be --- /dev/null +++ b/src/main/java/lab/MainScreenController.java @@ -0,0 +1,53 @@ +package lab; + +import java.io.IOException; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleButton; +import javafx.scene.control.ToggleGroup; + +/** + * + */ +public class MainScreenController { + + @FXML + private ToggleGroup difficult; + + @FXML + private ToggleButton easy; + + @FXML + private ToggleButton hard; + + @FXML + private ToggleButton medium; + + @FXML + private TextField name; + + private App app; + + @FXML + void play(ActionEvent event) throws IOException { + Difficult dif = (Difficult)difficult.getSelectedToggle().getProperties().get(Difficult.class); + app.switchToGame(name.getText(), dif.getNumberOfMonsters()); + } + + public void setApp(App app) { + this.app = app; + } + + @FXML + void initialize() { + assert difficult != null : "fx:id=\"difficult\" was not injected: check your FXML file 'mainScreen.fxml'."; + assert name != null : "fx:id=\"name\" was not injected: check your FXML file 'mainScreen.fxml'."; + easy.getProperties().put(Difficult.class, Difficult.EASY); + medium.getProperties().put(Difficult.class, Difficult.MEDIUM); + hard.getProperties().put(Difficult.class, Difficult.HARD); + } + +} diff --git a/src/main/java/lab/Scene.java b/src/main/java/lab/Scene.java index 15cfb20..0b45059 100644 --- a/src/main/java/lab/Scene.java +++ b/src/main/java/lab/Scene.java @@ -13,9 +13,9 @@ public class Scene { private Rock rock; private Background background; - public Scene(double width, double height) { + public Scene(double width, double height, int numberOfMonsters) { size = new Dimension2D(width, height); - sceneEntitites = new DrawableSimulable[8]; + sceneEntitites = new DrawableSimulable[3+numberOfMonsters]; background = new Background(this); rock = new Rock(this, new Point2D(300, 300), new Dimension2D(30, 50)); boat = new Boat(this, new Point2D(20, 200)); diff --git a/src/main/resources/lab/application.css b/src/main/resources/lab/application.css index 6b9fb33..0ef5f16 100644 --- a/src/main/resources/lab/application.css +++ b/src/main/resources/lab/application.css @@ -1,6 +1,63 @@ /* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */ -#changeButton { - -fx-background-image: url("LochNess.gif"); +Label { + -fx-font-size: 20.0px; + -fx-padding: 10.0px; + -fx-text-fill: white; + -fx-font-weight: 900; +} + +#name{ + -fx-font-weight: 900; + -fx-font-size: 20.0px; + -fx-padding: 10.0px; + -fx-background-color: RGBA(0.0,0.0,255.0,0.5); + -fx-background-insets:5.0px; +} +#panel { + -fx-background-image:url("game-background.jpg"); + -fx-background-size: stretch; +} +#gamePanel { + -fx-background-color:RGB(0.0,0.0,100.0); +} +#menuPanel { + -fx-background-image:url("lochness-background.jpg"); + -fx-background-size: stretch; +} + +#playButton { + -fx-background-color: RGBA(0.0,0.0,255.0,0.5); +} +#playButton:hover { + -fx-background-color: RGBA(0.0,0.0,255.0,0.5); + -fx-text-fill: white; +} + +.difficultButton .radio{ + visibility: hidden; +} +.difficultButton .dot{ + -fx-background-color: red; +} + +.difficultButton { + -fx-background-color: RGBA(0.0,0.0,100.0,0.8); + -fx-border-color: RGBA(0.0,0.0,100.0,0.8); + -fx-border-width:3px; + -fx-border-radius:30.0px; + -fx-text-fill: white; + -fx-font-size: 20.0px; + -fx-background-radius:30.0px; +} + +.difficultButton:hover{ + -fx-effect: dropshadow(gaussian, rgba(255, 255, 0, 0.7), 50.0, 0.7, 0.0, 0.0); + -fx-background-color : RGBA(50,0,0,0.8); +} + +.difficultButton:selected{ + -fx-background-color : RGBA(0,0,100,0.9); + -fx-border-color:RGBA(255,255,0,0.9); +} -} \ No newline at end of file diff --git a/src/main/resources/lab/gameWindow.fxml b/src/main/resources/lab/gameWindow.fxml index b6bc9fa..bda0678 100644 --- a/src/main/resources/lab/gameWindow.fxml +++ b/src/main/resources/lab/gameWindow.fxml @@ -4,12 +4,13 @@ <?import javafx.scene.Cursor?> <?import javafx.scene.canvas.Canvas?> <?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> <?import javafx.scene.control.Slider?> <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.text.Font?> -<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="459.0" prefWidth="824.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController"> +<BorderPane fx:id="gamePanel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="491.0" prefWidth="824.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController"> <bottom> <HBox alignment="TOP_CENTER" prefHeight="66.0" prefWidth="824.0" BorderPane.alignment="CENTER"> <children> @@ -32,7 +33,7 @@ </HBox> </bottom> <center> - <Canvas fx:id="canvas" height="340.0" width="749.0" BorderPane.alignment="CENTER"> + <Canvas fx:id="canvas" height="376.0" width="777.0" BorderPane.alignment="CENTER"> <BorderPane.margin> <Insets /> </BorderPane.margin> @@ -41,4 +42,7 @@ <left> <Slider fx:id="boatPosition" blockIncrement="5.0" majorTickUnit="10.0" max="80.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" min="20.0" minorTickCount="5" orientation="VERTICAL" prefHeight="331.0" prefWidth="38.0" showTickLabels="true" showTickMarks="true" BorderPane.alignment="CENTER" /> </left> + <top> + <Label fx:id="playerName" text="Label" BorderPane.alignment="CENTER" /> + </top> </BorderPane> diff --git a/src/main/resources/lab/lochness-background.jpg b/src/main/resources/lab/lochness-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d142b918c7e96d6587b6496acf8317d4fe4f223 GIT binary patch literal 48183 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/lab/mainScreen.fxml b/src/main/resources/lab/mainScreen.fxml new file mode 100644 index 0000000..4f2bc2f --- /dev/null +++ b/src/main/resources/lab/mainScreen.fxml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.RadioButton?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.control.ToggleGroup?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.text.Font?> + +<BorderPane fx:id="menuPanel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.MainScreenController"> + <top> + <HBox prefWidth="200.0" BorderPane.alignment="CENTER"> + <children> + <Label text="Player name:" /> + <TextField fx:id="name" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" promptText="type player name like Java Duke" HBox.hgrow="ALWAYS" /> + </children> + </HBox> + </top> + <bottom> + <Button fx:id="playButton" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#play" text="Play" BorderPane.alignment="CENTER"> + <font> + <Font name="System Bold" size="51.0" /> + </font></Button> + </bottom> + <center> + <HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER"> + <children> + <RadioButton fx:id="easy" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="difficultButton" text="Easy" HBox.hgrow="ALWAYS"> + <toggleGroup> + <ToggleGroup fx:id="difficult" /> + </toggleGroup> + <HBox.margin> + <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> + </HBox.margin> + </RadioButton> + <RadioButton fx:id="medium" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" selected="true" styleClass="difficultButton" text="Medium" toggleGroup="$difficult" HBox.hgrow="ALWAYS"> + <HBox.margin> + <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> + </HBox.margin> + </RadioButton> + <RadioButton fx:id="hard" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="difficultButton" text="Hard" toggleGroup="$difficult" HBox.hgrow="ALWAYS"> + <HBox.margin> + <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> + </HBox.margin> + </RadioButton> + </children> + </HBox> + </center> +</BorderPane> diff --git a/src/test/java/jez04/structure/test/ClassStructureTest.java b/src/test/java/jez04/structure/test/ClassStructureTest.java index ff0654d..a2bd575 100644 --- a/src/test/java/jez04/structure/test/ClassStructureTest.java +++ b/src/test/java/jez04/structure/test/ClassStructureTest.java @@ -3,10 +3,20 @@ package jez04.structure.test; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; import java.io.PrintStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -26,20 +36,18 @@ import javafx.fxml.FXML; class ClassStructureTest { + Set<String> allClasses = getNameOfAllClasses(); @Test - void hasClassWithPropertyWithFxmlAnnotationTest() { - Set<String> names = getNameOfAllClasses(); - long annotationCount = 0; - for (String name : names) { - Class<?> c = getClass(name); - annotationCount += countPropertyWithAnnotation(c, ".*", FXML.class); - annotationCount += countMethodWithAnnotation(c, ".*", FXML.class); + void printAllclassesTest() { + System.out.println("========================================="); + System.out.println("All detected classes:"); + for (String name : allClasses) { + System.out.println(name); } - assertTrue(annotationCount >= 2, "Only " + annotationCount + " FXML annotation found. Requred atleast 2!"); + System.out.println("========================================="); } - @Test void gameControllerExistenceTest() { classExist("GameController"); @@ -53,6 +61,11 @@ class ClassStructureTest { Class<?> c = getClass("GameController"); hasPropertyWithAnnotation(c, ".*", FXML.class); } + + @Test + void countControllersTest() { + assertTrue(countClassesMatches(".*Controller") > 1, "Only one class named .*Controller found"); + } @Test void gameControllerActionEventTest() { classExist("GameController"); @@ -60,27 +73,18 @@ class ClassStructureTest { hasMethodRegexp(c, ".*", void.class, ActionEvent.class); } - @Test - void backgroundExistenceTest() { - classExist("Background"); - } - @Test - void backgroundExistenceSetAngleTest() { - classExist("Background"); - Class<?> c = getClass("Background"); - hasMethod(c, "setSpeed"); - } - @Test - void backgroundExistenceSetSpeedTest() { - classExist("Background"); - Class<?> c = getClass("Background"); - hasMethod(c, "setSpeed"); - } - private void isInterface(Class<?> c) { assertTrue(c.isInterface(), c.getName() + " have to be interface."); } + + private long countClassesMatches(String nameRegExp) { + return allClasses.stream().filter(c -> c.matches(nameRegExp)).count(); + } + + private List<String> getClassesMatches(String nameRegExp) { + return allClasses.stream().filter(c -> c.matches(nameRegExp)).toList(); + } private void classExist(String name) { assertTrue(allClasses.stream().anyMatch(c -> c.endsWith(name)), "Interface " + name + " not found"); @@ -131,22 +135,6 @@ class ClassStructureTest { "No field " + propertyNameRegexp + " with annotation " + annotation.getName() + " in class " + classDef.getName()); } - private long countPropertyWithAnnotation(Class<?> classDef, String propertyNameRegexp, Class<?> annotation) { - List<Field> fields = Arrays.asList(classDef.getDeclaredFields()); - long propeertyFxmlAnnotationCount = fields.stream().filter(f -> f.getName().matches(propertyNameRegexp)) - .flatMap(f -> Arrays.asList( - f.getAnnotations()).stream()).map(a -> a.annotationType()).filter(a -> - a.equals(annotation)).count(); - return propeertyFxmlAnnotationCount; - } - private long countMethodWithAnnotation(Class<?> classDef, String propertyNameRegexp, Class<?> annotation) { - List<Method> methods = Arrays.asList(classDef.getDeclaredMethods()); - long methodFxmlAnnotationCount = methods.stream().filter(f -> f.getName().matches(propertyNameRegexp)) - .flatMap(m -> Arrays.asList( - m.getAnnotations()).stream()).map(a -> a.annotationType()).filter(a -> - a.equals(annotation)).count(); - return methodFxmlAnnotationCount; - } private void hasMethod(Class<?> interfaceDef, String methodName, Class<?> returnType) { List<Method> methods = Arrays.asList(interfaceDef.getDeclaredMethods()); @@ -212,10 +200,13 @@ class ClassStructureTest { } private Set<String> getNameOfAllClasses() { - List<String> initClassesName = Arrays.asList("lab.Routines", "lab.App", "lab.DrawingThread"); + List<String> initClassesName = new ArrayList<>(); + dynamicaliFoundSomeClass(initClassesName); + initClassesName.addAll(List.of("lab.Routines", "lab.App", "lab.DrawingThread")); for (String className : initClassesName) { try { Class.forName(className); + break; } catch (ClassNotFoundException e) { System.out.println(String.format("Class '%s' cannot be loaded: %s", className, e.getMessage())); } @@ -228,13 +219,67 @@ class ClassStructureTest { || p.getName().startsWith("javassist")) { continue; } + System.out.println(p.getName()); Configuration conf = new ConfigurationBuilder().addScanners(Scanners.SubTypes.filterResultsBy(pc -> true)) .forPackages(p.getName()); Reflections reflections = new Reflections(conf); allClasses.addAll(reflections.getAll(Scanners.SubTypes.filterResultsBy(c -> { + System.out.println(c); return true; }))); } + for (String string : allClasses) { + System.out.println(string); + } return allClasses; } -} \ No newline at end of file + private void dynamicaliFoundSomeClass(List<String> initClassesName) { + URL myClassUrl = ClassStructureTest.class.getResource("ClassStructureTest.class"); + myClassUrl.getFile(); + try { + Path classRoot = Paths.get(myClassUrl.toURI()).getParent().getParent().getParent().getParent(); + if("test-classes".equals(classRoot.getFileName().toString())) { + classRoot = classRoot.getParent().resolve("classes"); + } + System.out.println("class root: " + classRoot); + final Path classRootFinal = classRoot; + Files.walkFileTree(classRoot, new FileVisitor<Path>() { + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + if(List.of("jez04", "META-INF").contains(dir.getFileName().toString())) { + return FileVisitResult.SKIP_SUBTREE; + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + System.out.println("VISIT: " + file); + if("module-info.class".equals(file.getFileName().toString())) { + return FileVisitResult.CONTINUE; + } + if(!file.getFileName().toString().endsWith(".class")) { + return FileVisitResult.CONTINUE; + } + String foundClassName = classRootFinal.relativize(file).toString(); + foundClassName = foundClassName.substring(0, foundClassName.length()-6).replace(File.separatorChar, '.'); + initClassesName.add(foundClassName); + return FileVisitResult.TERMINATE; + } + + @Override + public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + return FileVisitResult.CONTINUE; + } + }); + } catch (URISyntaxException | IOException e) { + e.printStackTrace(); + } + } +} -- GitLab