diff --git a/.gitignore b/.gitignore index 1c87f53..46adb11 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,386 @@ lastClass.txt /supplemental/*.tgz migration goals e-mail.txt migration-goals-e-mail.txt +knarr-runtime/galette-output-multivar-0_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_2/example.model +knarr-runtime/galette-output-multivar-0_2/example.model2 +knarr-runtime/galette-output-multivar-0_2/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_2/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_2/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_2/vsum/models.models +knarr-runtime/galette-output-multivar-0_2/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_3/example.model +knarr-runtime/galette-output-multivar-0_3/example.model2 +knarr-runtime/galette-output-multivar-0_3/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_3/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_3/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_3/vsum/models.models +knarr-runtime/galette-output-multivar-0_3/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-1_0/example.model +knarr-runtime/galette-output-multivar-1_0/example.model2 +knarr-runtime/galette-output-multivar-1_0/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-1_0/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-1_0/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-1_0/vsum/models.models +knarr-runtime/galette-output-multivar-1_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-1_1/example.model +knarr-runtime/galette-output-multivar-1_1/example.model2 +knarr-runtime/galette-output-multivar-1_1/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-1_1/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-1_1/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-1_1/vsum/models.models +knarr-runtime/galette-output-multivar-1_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-1_2/example.model +knarr-runtime/galette-output-multivar-1_2/example.model2 +knarr-runtime/galette-output-multivar-1_2/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-1_2/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-1_2/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-1_2/vsum/models.models +knarr-runtime/galette-output-multivar-1_2/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-1_3/example.model +knarr-runtime/galette-output-multivar-1_3/example.model2 +knarr-runtime/galette-output-multivar-1_3/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-1_3/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-1_3/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-1_3/vsum/models.models +knarr-runtime/galette-output-multivar-1_3/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-2_0/example.model +knarr-runtime/galette-output-multivar-2_0/example.model2 +knarr-runtime/galette-output-multivar-2_0/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-2_0/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-2_0/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-2_0/vsum/models.models +knarr-runtime/galette-output-multivar-2_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-2_1/example.model +knarr-runtime/galette-output-multivar-2_1/example.model2 +knarr-runtime/galette-output-multivar-2_1/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-2_1/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-2_1/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-2_1/vsum/models.models +knarr-runtime/galette-output-multivar-2_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-2_2/example.model +knarr-runtime/galette-output-multivar-2_2/example.model2 +knarr-runtime/galette-output-multivar-2_2/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-2_2/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-2_2/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-2_2/vsum/models.models +knarr-runtime/galette-output-multivar-2_2/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-2_3/example.model +knarr-runtime/galette-output-multivar-2_3/example.model2 +knarr-runtime/galette-output-multivar-2_3/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-2_3/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-2_3/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-2_3/vsum/models.models +knarr-runtime/galette-output-multivar-2_3/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-3_0/example.model +knarr-runtime/galette-output-multivar-3_0/example.model2 +knarr-runtime/galette-output-multivar-3_0/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-3_0/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-3_0/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-3_0/vsum/models.models +knarr-runtime/galette-output-multivar-3_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-3_1/example.model +knarr-runtime/galette-output-multivar-3_1/example.model2 +knarr-runtime/galette-output-multivar-3_1/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-3_1/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-3_1/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-3_1/vsum/models.models +knarr-runtime/galette-output-multivar-3_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-3_2/example.model +knarr-runtime/galette-output-multivar-3_2/example.model2 +knarr-runtime/galette-output-multivar-3_2/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-3_2/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-3_2/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-3_2/vsum/models.models +knarr-runtime/galette-output-multivar-3_2/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-3_3/example.model +knarr-runtime/galette-output-multivar-3_3/example.model2 +knarr-runtime/galette-output-multivar-3_3/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-3_3/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-3_3/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-3_3/vsum/models.models +knarr-runtime/galette-output-multivar-3_3/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_4/example.model +knarr-runtime/galette-output-multivar-0_4/example.model2 +knarr-runtime/galette-output-multivar-0_4/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_4/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_4/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_4/vsum/models.models +knarr-runtime/galette-output-multivar-0_4/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-1_4/example.model +knarr-runtime/galette-output-multivar-1_4/example.model2 +knarr-runtime/galette-output-multivar-1_4/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-1_4/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-1_4/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-1_4/vsum/models.models +knarr-runtime/galette-output-multivar-1_4/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-2_4/example.model +knarr-runtime/galette-output-multivar-2_4/example.model2 +knarr-runtime/galette-output-multivar-2_4/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-2_4/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-2_4/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-2_4/vsum/models.models +knarr-runtime/galette-output-multivar-2_4/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-3_4/example.model +knarr-runtime/galette-output-multivar-3_4/example.model2 +knarr-runtime/galette-output-multivar-3_4/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-3_4/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-3_4/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-3_4/vsum/models.models +knarr-runtime/galette-output-multivar-3_4/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-4_0/example.model +knarr-runtime/galette-output-multivar-4_0/example.model2 +knarr-runtime/galette-output-multivar-4_0/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-4_0/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-4_0/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-4_0/vsum/models.models +knarr-runtime/galette-output-multivar-4_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-4_1/example.model +knarr-runtime/galette-output-multivar-4_1/example.model2 +knarr-runtime/galette-output-multivar-4_1/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-4_1/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-4_1/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-4_1/vsum/models.models +knarr-runtime/galette-output-multivar-4_1/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-4_2/example.model +knarr-runtime/galette-output-multivar-4_2/example.model2 +knarr-runtime/galette-output-multivar-4_2/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-4_2/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-4_2/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-4_2/vsum/models.models +knarr-runtime/galette-output-multivar-4_2/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-4_3/example.model +knarr-runtime/galette-output-multivar-4_3/example.model2 +knarr-runtime/galette-output-multivar-4_3/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-4_3/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-4_3/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-4_3/vsum/models.models +knarr-runtime/galette-output-multivar-4_3/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-4_4/example.model +knarr-runtime/galette-output-multivar-4_4/example.model2 +knarr-runtime/galette-output-multivar-4_4/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-4_4/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-4_4/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-4_4/vsum/models.models +knarr-runtime/galette-output-multivar-4_4/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_0/example.model +knarr-runtime/galette-output-multivar-0_0/example.model2 +knarr-runtime/galette-output-multivar-0_0/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_0/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_0/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_0/vsum/models.models +knarr-runtime/galette-output-multivar-0_0/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid +amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/.Amalthea2ascetChangePropagationSpecification.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/.ComponentContainerInsertedAsRootReaction.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/.TaskCreatedReaction.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/.TaskDeletedReaction.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.Amalthea2ascetRoutinesFacade.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.Amalthea2ascetRoutinesFacadesProvider.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateAndRegisterRootComponentContainerRoutine.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateAscetTaskRoutine.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateInterruptTaskRoutine.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreatePeriodicTaskRoutine.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateSoftwareTaskRoutine.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateTimeTableTaskRoutine.java._trace +amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.DeleteTaskRoutine.java._trace +knarr-runtime/galette-output-multivar-0_-2147483620/example.model +knarr-runtime/galette-output-multivar-0_-2147483620/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483620/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483620/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483620/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483620/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483620/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483621/example.model +knarr-runtime/galette-output-multivar-0_-2147483621/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483621/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483621/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483621/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483621/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483621/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483622/example.model +knarr-runtime/galette-output-multivar-0_-2147483622/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483622/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483622/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483622/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483622/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483622/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483623/example.model +knarr-runtime/galette-output-multivar-0_-2147483623/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483623/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483623/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483623/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483623/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483623/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483624/example.model +knarr-runtime/galette-output-multivar-0_-2147483624/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483624/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483624/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483624/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483624/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483624/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483625/example.model +knarr-runtime/galette-output-multivar-0_-2147483625/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483625/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483625/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483625/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483625/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483625/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483626/example.model +knarr-runtime/galette-output-multivar-0_-2147483626/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483626/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483626/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483626/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483626/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483626/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483627/example.model +knarr-runtime/galette-output-multivar-0_-2147483627/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483627/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483627/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483627/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483627/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483627/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483628/example.model +knarr-runtime/galette-output-multivar-0_-2147483628/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483628/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483628/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483628/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483628/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483628/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483629/example.model +knarr-runtime/galette-output-multivar-0_-2147483629/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483629/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483629/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483629/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483629/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483629/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483630/example.model +knarr-runtime/galette-output-multivar-0_-2147483630/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483630/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483630/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483630/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483630/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483630/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483631/example.model +knarr-runtime/galette-output-multivar-0_-2147483631/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483631/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483631/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483631/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483631/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483631/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483632/example.model +knarr-runtime/galette-output-multivar-0_-2147483632/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483632/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483632/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483632/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483632/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483632/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483633/example.model +knarr-runtime/galette-output-multivar-0_-2147483633/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483633/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483633/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483633/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483633/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483633/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483634/example.model +knarr-runtime/galette-output-multivar-0_-2147483634/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483634/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483634/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483634/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483634/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483634/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483635/example.model +knarr-runtime/galette-output-multivar-0_-2147483635/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483635/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483635/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483635/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483635/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483635/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483636/example.model +knarr-runtime/galette-output-multivar-0_-2147483636/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483636/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483636/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483636/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483636/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483636/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483637/example.model +knarr-runtime/galette-output-multivar-0_-2147483637/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483637/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483637/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483637/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483637/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483637/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483638/example.model +knarr-runtime/galette-output-multivar-0_-2147483638/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483638/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483638/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483638/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483638/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483638/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483639/example.model +knarr-runtime/galette-output-multivar-0_-2147483639/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483639/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483639/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483639/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483639/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483639/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483640/example.model +knarr-runtime/galette-output-multivar-0_-2147483640/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483640/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483640/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483640/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483640/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483640/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483641/example.model +knarr-runtime/galette-output-multivar-0_-2147483641/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483641/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483641/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483641/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483641/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483641/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483642/example.model +knarr-runtime/galette-output-multivar-0_-2147483642/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483642/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483642/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483642/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483642/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483642/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483643/example.model +knarr-runtime/galette-output-multivar-0_-2147483643/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483643/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483643/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483643/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483643/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483643/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483644/example.model +knarr-runtime/galette-output-multivar-0_-2147483644/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483644/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483644/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483644/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483644/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483644/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483645/example.model +knarr-runtime/galette-output-multivar-0_-2147483645/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483645/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483645/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483645/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483645/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483645/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483646/example.model +knarr-runtime/galette-output-multivar-0_-2147483646/example.model2 +knarr-runtime/galette-output-multivar-0_-2147483646/test_project.marker_vitruv +knarr-runtime/galette-output-multivar-0_-2147483646/galette-test-output/vsum-output.xmi +knarr-runtime/galette-output-multivar-0_-2147483646/vsum/correspondences.correspondence +knarr-runtime/galette-output-multivar-0_-2147483646/vsum/models.models +knarr-runtime/galette-output-multivar-0_-2147483646/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483647/vsum/uuid.uuid +knarr-runtime/galette-output-multivar-0_-2147483648/vsum/uuid.uuid +knarr-runtime/src/test/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/AutomaticConstraintCollectionTest.java.disabled +knarr-runtime/src/test/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/EndToEndPathExplorationTest.java.disabled +knarr-runtime/src/test/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/IntegrationSwitchTest.java.disabled diff --git a/COCOPATH_TECHNICAL_REPORT.md b/COCOPATH_TECHNICAL_REPORT.md index 71677b7..6cfd4d3 100644 --- a/COCOPATH_TECHNICAL_REPORT.md +++ b/COCOPATH_TECHNICAL_REPORT.md @@ -119,20 +119,20 @@ CocoPath is a **concolic execution framework** for systematically exploring exec ``` INPUT: Initial value (e.g., user_choice = 0) ↓ -[PathExplorer creates tagged Integer with label] - Tag stores: variable name + symbolic expression +[PathExplorer passes concrete value to executor] + No tagging at this level ↓ -[Tagged value passed to execution wrapper] +[Vitruvius reaction receives concrete value] ↓ -[Execution wrapper reads tag] ← NEW: Tag Reading Step - Extracts: varName = tag.getLabels()[0] - Extracts: symbolicExpr = GaletteSymbolicator.getExpressionForTag(tag) +[Reaction calls GaletteSymbolicator.getOrMakeSymbolicInt] + Creates tag with qualified name: "CreateAscetTaskRoutine:execute:userChoice" + Reuses tag on subsequent iterations + Adds domain constraint automatically ↓ -[Tag propagates through execution via Galette shadow stack] +[Tagged value used in reaction] ↓ -[Constraints collected using tag-derived variable name] - PathUtils.addIntDomainConstraint(varName, 0, 5) ← Uses extracted varName - PathUtils.addSwitchConstraint(varName, concreteValue) +[Reaction calls SymbolicComparison.symbolicVitruviusChoice] + Records switch constraint with qualified name from tag ↓ [PathConditionWrapper stores constraints] ↓ @@ -775,7 +775,8 @@ For path (i, j): **Collection Timeline** (per execution): ``` T0: PathExplorer creates Map inputs - {user_choice_1: taggedInt₁, user_choice_2: taggedInt₂} + {user_choice_1: concreteInt₁, user_choice_2: concreteInt₂} + (No tagging - reactions handle it) T1: Reset PathConditionWrapper diff --git a/README.md b/README.md index efabd27..dbe2ed2 100644 --- a/README.md +++ b/README.md @@ -34,11 +34,12 @@ This framework provides **concolic execution** (combined concrete + symbolic exe - **Location**: `knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/` - **Key Classes**: - `GaletteSymbolicator` - Creates symbolic values with tags - - `PathUtils` - Manual constraint collection API - - `addIntDomainConstraint(varName, min, max)` - manually Define valid value ranges - - `addSwitchConstraint(varName, value)` - Record executed path for switch case - - `getCurPC()` - Retrieve current path condition + - `getOrMakeSymbolicInt(qualifiedName, value, min, max)` - Create or reuse tag with domain constraint + - Tag reuse across iterations using qualified names (e.g., "CreateAscetTaskRoutine:execute:userChoice") + - `SymbolicComparison` - Records switch constraints from reactions + - `symbolicVitruviusChoice(selected, min, max)` - Records the actual choice made - `PathExplorer` - Automatic path exploration orchestration + - `PathUtils` - Retrieves current path condition (`getCurPC()`) - `ConstraintSolver` - Negates and solves constraints using GREEN/Z3 #### GreenSolver @@ -160,6 +161,43 @@ amalthea-acset-integration/ # Vitruvius example 3. **Python 3.x** (for dependency switching) +### Helper Classes + +- **`AutomaticVitruvPathExplorationHelper`** - Shared utilities for path exploration + - `verifyInstrumentation()` - Checks that Galette instrumentation is working + - `initializeEMF()` - Initializes EMF resource factories + - `loadVitruviusTestClass()` - Loads the Vitruvius Test class + - `createWorkingDirectory()` - Creates output directories + - `exportSingleVarResults()` - Exports single-variable exploration results + - `exportMultiVarResults()` - Exports multi-variable exploration results + +### Syncing Generated Reactions (After Upstream Changes) + +When the upstream Amalthea-acset project changes (e.g., renaming InterruptTask to InitTask), you need to sync the generated reactions code: + +```bash +# 1. Build external Amalthea-acset to generate new reactions +cd /path/to/Amalthea-acset +mvn clean generate-sources + +# 2. Copy generated reactions to internal project +cd knarr-runtime +./copy-generated-reactions.sh + +# Or with custom paths: +./copy-generated-reactions.sh --external-path /path/to/Amalthea-acset + +# 3. Build internal project with updated reactions +cd ../amalthea-acset-integration +mvn clean compile -Dcheckstyle.skip=true +``` + +The `copy-generated-reactions.sh` script: +- Copies generated reactions from `Amalthea-acset/consistency/target/generated-sources/reactions/mir/` +- To `amalthea-acset-integration/consistency/src/main/java/mir/` +- Creates backups of existing files +- Supports custom paths with `--external-path` and `--internal-path` flags + ### Quick Start ```bash diff --git a/WORKFLOW_DIAGRAM.md b/WORKFLOW_DIAGRAM.md index fab7804..73488dd 100644 --- a/WORKFLOW_DIAGRAM.md +++ b/WORKFLOW_DIAGRAM.md @@ -20,13 +20,14 @@ │ │ ├─ Create PathExplorer │ │ │ │ └─ Call exploreInteger() │ │ │ │ │ │ -│ │ executeVitruvWithInput(testInstance, taggedInteger) │ │ -│ │ ├─ [T3] PathUtils.addIntDomainConstraint("user_choice", 0, 5) │ │ -│ │ │ → PC = [(0 <= user_choice < 5)] │ │ -│ │ ├─ [T4] insertTask.invoke(testInstance, workDir, taggedInteger) │ │ -│ │ ├─ [T5] PathUtils.addSwitchConstraint("user_choice", value) │ │ -│ │ │ → PC += [user_choice == N] │ │ -│ │ └─ [T6] return PathUtils.getCurPC() │ │ +│ │ executeVitruvWithInput(testInstance, concreteInteger) │ │ +│ │ ├─ [T3] insertTask.invoke(testInstance, workDir, concreteInteger)│ │ +│ │ │ → Triggers Vitruvius reaction │ │ +│ │ │ → Reaction calls GaletteSymbolicator.getOrMakeSymbolicInt│ │ +│ │ │ → Creates/reuses tag + adds domain constraint │ │ +│ │ │ → Reaction calls SymbolicComparison.symbolicVitruviusChoice│ │ +│ │ │ → Records switch constraint │ │ +│ │ └─ [T4] return PathUtils.getCurPC() │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ @@ -36,16 +37,15 @@ │ │ │ │ │ │ │ ├─ LOOP: while (hasUnexploredPaths && iteration < MAX) │ │ │ │ │ │ │ │ -│ │ │ ├─ [T0] Create tagged Integer │ │ -│ │ │ │ GaletteSymbolicator.tagInteger(value, varName) │ │ -│ │ │ │ → Tagged(concrete=N, symbolic=α, label=varName) │ │ +│ │ │ ├─ [T0] Pass concrete value to executor │ │ +│ │ │ │ (No tagging - reactions handle it) │ │ │ │ │ │ │ │ -│ │ │ ├─ [T1] Reset PC: PathUtils.getCurPC().clear() │ │ +│ │ │ ├─ [T1] Reset PC: PathUtils.resetPC() │ │ │ │ │ │ │ │ -│ │ │ ├─ [T2-T6] Execute: executor(taggedInteger) │ │ +│ │ │ ├─ [T2-T4] Execute: executor(concreteInteger) │ │ │ │ │ │ → Returns PathConditionWrapper │ │ │ │ │ │ │ │ -│ │ │ ├─ [T7] Store PathRecord {inputs, constraints, time} │ │ +│ │ │ ├─ [T5] Store PathRecord {inputs, constraints, time} │ │ │ │ │ │ │ │ │ │ │ ├─ Find unexplored constraint to negate │ │ │ │ │ │ │ │ @@ -101,12 +101,14 @@ ┌──────────────────────────────────────▼──────────────────────────────────────┐ │ TAG PROPAGATION LAYER (Galette) │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ -│ │ GaletteSymbolicator.java │ │ +│ │ GaletteSymbolicator.java (Called from Reactions) │ │ │ │ │ │ -│ │ tagInteger(int value, String label) │ │ -│ │ ├─ Create Tag(label, IntVariable(label)) │ │ -│ │ ├─ Associate tag with Integer object │ │ -│ │ └─ return Tagged Integer │ │ +│ │ getOrMakeSymbolicInt(qualifiedName, value, min, max) │ │ +│ │ ├─ Check labelToTag map for existing tag │ │ +│ │ ├─ If exists: reuse tag (tag reuse across iterations) │ │ +│ │ ├─ If new: create Tag + IntVariable + domain constraint │ │ +│ │ ├─ Apply tag with Tainter.setTag(value, tag) │ │ +│ │ └─ Return tagged integer │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ @@ -265,13 +267,37 @@ START: PathExplorer.exploreInteger("user_choice", 0, executor) END: Return List with 5 paths ``` -## 3. Constraint Collection Timeline (Single Iteration) +## 3. Vitruvius Reaction Flow (NEW - Tag Creation in Reactions) + +``` +┌────────────────────────────────────────────────────────────────────────┐ +│ Vitruvius Reaction Execution │ +│ │ +│ 1. UserInteraction.startInteraction() returns concrete value │ +│ ↓ │ +│ 2. Reaction calls GaletteSymbolicator.getOrMakeSymbolicInt() │ +│ - qualifiedName: "CreateAscetTaskRoutine:execute:userChoice" │ +│ - Creates tag on first iteration │ +│ - Reuses tag on subsequent iterations │ +│ - Adds domain constraint [min, max] │ +│ ↓ │ +│ 3. Tagged value returned to reaction │ +│ ↓ │ +│ 4. Reaction calls SymbolicComparison.symbolicVitruviusChoice() │ +│ - Records switch constraint for specific choice │ +│ - Uses qualified name from tag │ +│ ↓ │ +│ 5. Reaction executes appropriate transformation │ +└────────────────────────────────────────────────────────────────────────┘ +``` + +## 4. Constraint Collection Timeline (Single Iteration) ``` Time Event Location PC State ───────────────────────────────────────────────────────────────────────────────────── -T0 Create tagged Integer PathExplorer:69 [] - GaletteSymbolicator.tagInteger(0, "user_choice") +T0 Pass concrete value PathExplorer:69 [] + executor.execute(0) (no tagging yet) T1 Reset PC PathExplorer:71 [] PathUtils.getCurPC().clear() diff --git a/amalthea-acset-integration/consistency/src/main/java/amalthea2acset.reactions b/amalthea-acset-integration/consistency/src/main/java/amalthea2acset.reactions deleted file mode 100644 index 681ba1d..0000000 --- a/amalthea-acset-integration/consistency/src/main/java/amalthea2acset.reactions +++ /dev/null @@ -1,180 +0,0 @@ - -import "http://vitruv.tools/reactionsparser/model" as ascet -import "http://vitruv.tools/reactionsparser/model2" as amalthea - -reactions: amalthea2ascet -in reaction to changes in amalthea -execute actions in ascet - -// insert a System, which is the root element of model, into an instance of model -// as a reaction, an element of type Root should be created, persisted relatively, -// and a correspondence should be added (see the called routine) -reaction ComponentContainerInsertedAsRoot { - after element amalthea::ComponentContainer inserted as root - // newValue refers to the newly inserted element of type System (provided by the reactions runtime environment at runtime) - call createAndRegisterRootComponentContainer(newValue) -} - -routine createAndRegisterRootComponentContainer(amalthea::ComponentContainer componentContainer) { - match { - // we do only want to create a new corresponding Root if we not have one already and the old one has, e.g., only been moved - require absence of ascet::AscetModule corresponding to componentContainer - } - create { - // short way of using the respective Factory calls, which would be used in the update-block - val mRoot = new ascet::AscetModule - } - update { - // save the newly created AscetModule element at the specified location - // persistProjectRelative(componentContainer, mRoot, new File("").toString() + "example.model2") - persistProjectRelative(componentContainer, mRoot, "example.model2") - // register the correspondence so we can find mRoot later, if we modify something in system and need to adapt mRoot accordingly - addCorrespondenceBetween(componentContainer, mRoot) - } -} - - -reaction TaskDeleted { - after element amalthea::Task deleted - call deleteTask(affectedEObject) -} - -routine deleteTask (amalthea::Task task){ - match{ - val ascettask = retrieve ascet::Task corresponding to task - } - update{ - if (ascettask !== null) { - removeObject(ascettask) - removeCorrespondenceBetween(task, ascettask) - } - } - -} - -reaction TaskCreated { - after element amalthea::Task inserted in amalthea::ComponentContainer[tasks] - call createAscetTask(newValue,affectedEObject) -} - -routine createAscetTask(amalthea::Task task, amalthea::ComponentContainer container){ - update { - val String userMsg = "A Task has been created. Please decide whether and which corresponding ASCET Task should be created." - - val interruptTaskOption = "Create InterruptTask" - val periodicTaskOption = "Create PeriodicTask" - val softwareTaskOption = "Create SoftwareTask" - val timeTableTaskOption = "Create TimeTableTask" - val doNothingOption = "Decide Later" - - val String[] options = #[ - interruptTaskOption, - periodicTaskOption, - softwareTaskOption, - timeTableTaskOption, - doNothingOption - ] - - val Integer selected = userInteractor - .singleSelectionDialogBuilder - .message(userMsg) - .choices(options) - .startInteraction() - - - switch (selected) { - case 0: { - createInitTask(task,container) - } - case 1: { - createPeriodicTask(task,container) - } - case 2: { - createSoftwareTask(task,container) - } - case 3: { - createTimeTableTask(task,container) - } - case 4: { - // no action - } - } - - } -} - -routine createInitTask(amalthea::Task task, amalthea::ComponentContainer container){ - - match { - val AscetModule = retrieve ascet::AscetModule corresponding to container - require absence of ascet::InitTask corresponding to task - - } - create { - val initTask = new ascet::InitTask - } - update { - AscetModule.tasks += initTask - initTask.name = task.name - addCorrespondenceBetween(initTask, container) - - } -} - -routine createPeriodicTask(amalthea::Task task, amalthea::ComponentContainer container){ - - match { - val AscetModule = retrieve ascet::AscetModule corresponding to container - require absence of ascet::PeriodicTask corresponding to task - - } - create { - val periodicTask = new ascet::PeriodicTask - } - update { - AscetModule.tasks += periodicTask - periodicTask.name = task.name - periodicTask.delay = 0.10 - periodicTask.period = 1.0 - addCorrespondenceBetween(periodicTask, container) - - } -} - - -routine createSoftwareTask(amalthea::Task task, amalthea::ComponentContainer container){ - - match { - val AscetModule = retrieve ascet::AscetModule corresponding to container - require absence of ascet::SoftwareTask corresponding to task - - } - create { - val softwareTask = new ascet::SoftwareTask - } - update { - AscetModule.tasks += softwareTask - softwareTask.name = task.name - addCorrespondenceBetween(softwareTask, container) - - } -} - -routine createTimeTableTask(amalthea::Task task, amalthea::ComponentContainer container){ - - match { - val AscetModule = retrieve ascet::AscetModule corresponding to container - require absence of ascet::TimeTableTask corresponding to task - - } - create { - val timeTableTask = new ascet::TimeTableTask - } - update { - AscetModule.tasks += timeTableTask - timeTableTask.name = task.name - addCorrespondenceBetween(timeTableTask, container) - - } -} - diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/Amalthea2ascetChangePropagationSpecification.java b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/Amalthea2ascetChangePropagationSpecification.java index fd530cf..9e636ef 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/Amalthea2ascetChangePropagationSpecification.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/Amalthea2ascetChangePropagationSpecification.java @@ -8,10 +8,6 @@ import tools.vitruv.dsls.reactions.runtime.state.ReactionExecutionState; import tools.vitruv.dsls.reactions.runtime.structure.ReactionsImportPath; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class Amalthea2ascetChangePropagationSpecification extends AbstractReactionsChangePropagationSpecification implements ChangePropagationSpecification { diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/ComponentContainerInsertedAsRootReaction.java b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/ComponentContainerInsertedAsRootReaction.java index e8381cc..0f96196 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/ComponentContainerInsertedAsRootReaction.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/ComponentContainerInsertedAsRootReaction.java @@ -11,10 +11,6 @@ import tools.vitruv.dsls.reactions.runtime.state.ReactionExecutionState; import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class ComponentContainerInsertedAsRootReaction extends AbstractReaction { private InsertRootEObject insertChange; diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskCreatedReaction.java b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskCreatedReaction.java index e8d86ea..6580044 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskCreatedReaction.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskCreatedReaction.java @@ -14,10 +14,6 @@ import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class TaskCreatedReaction extends AbstractReaction { private InsertEReference insertChange; diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskDeletedReaction.java b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskDeletedReaction.java index a6c3027..106475d 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskDeletedReaction.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/reactions/amalthea2ascet/TaskDeletedReaction.java @@ -11,10 +11,6 @@ import tools.vitruv.dsls.reactions.runtime.state.ReactionExecutionState; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class TaskDeletedReaction extends AbstractReaction { private DeleteEObject deleteChange; diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateInitTaskRoutine.java._trace b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateInitTaskRoutine.java._trace new file mode 100644 index 0000000..dcb28d1 Binary files /dev/null and b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/.CreateInitTaskRoutine.java._trace differ diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacade.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacade.java index 7df4c5a..b0c0579 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacade.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacade.java @@ -8,10 +8,6 @@ import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class Amalthea2ascetRoutinesFacade extends AbstractRoutinesFacade { public Amalthea2ascetRoutinesFacade( @@ -45,12 +41,12 @@ public boolean createAscetTask(final Task task, final ComponentContainer contain return routine.execute(); } - public boolean createInterruptTask(final Task task, final ComponentContainer container) { + public boolean createInitTask(final Task task, final ComponentContainer container) { Amalthea2ascetRoutinesFacade _routinesFacade = this; ReactionExecutionState _executionState = _getExecutionState(); CallHierarchyHaving _caller = this._getCurrentCaller(); - CreateInterruptTaskRoutine routine = - new CreateInterruptTaskRoutine(_routinesFacade, _executionState, _caller, task, container); + CreateInitTaskRoutine routine = + new CreateInitTaskRoutine(_routinesFacade, _executionState, _caller, task, container); return routine.execute(); } diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacadesProvider.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacadesProvider.java index 912c64e..84e5db9 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacadesProvider.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/Amalthea2ascetRoutinesFacadesProvider.java @@ -5,10 +5,6 @@ import tools.vitruv.dsls.reactions.runtime.state.ReactionExecutionState; import tools.vitruv.dsls.reactions.runtime.structure.ReactionsImportPath; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class Amalthea2ascetRoutinesFacadesProvider extends AbstractRoutinesFacadesProvider { public Amalthea2ascetRoutinesFacadesProvider(final ReactionExecutionState executionState) { diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAndRegisterRootComponentContainerRoutine.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAndRegisterRootComponentContainerRoutine.java index 2fe97e9..00ac1e7 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAndRegisterRootComponentContainerRoutine.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAndRegisterRootComponentContainerRoutine.java @@ -9,10 +9,6 @@ import tools.vitruv.methodologisttemplate.model.model.AscetModule; import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class CreateAndRegisterRootComponentContainerRoutine extends AbstractRoutine { private CreateAndRegisterRootComponentContainerRoutine.InputValues inputValues; diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAscetTaskRoutine.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAscetTaskRoutine.java index b558c17..2ca485c 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAscetTaskRoutine.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAscetTaskRoutine.java @@ -1,18 +1,18 @@ package mir.routines.amalthea2ascet; import java.io.IOException; +import java.lang.reflect.Method; +import java.util.List; import org.eclipse.xtext.xbase.lib.Conversions; +import org.eclipse.xtext.xbase.lib.Exceptions; import org.eclipse.xtext.xbase.lib.Extension; +import org.eclipse.xtext.xbase.lib.InputOutput; import tools.vitruv.dsls.reactions.runtime.routines.AbstractRoutine; import tools.vitruv.dsls.reactions.runtime.state.ReactionExecutionState; import tools.vitruv.dsls.reactions.runtime.structure.CallHierarchyHaving; import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class CreateAscetTaskRoutine extends AbstractRoutine { private CreateAscetTaskRoutine.InputValues inputValues; @@ -37,6 +37,11 @@ public void updateModels( final Task task, final ComponentContainer container, @Extension final Amalthea2ascetRoutinesFacade _routinesFacade) { + InputOutput.println("[Reaction] createAscetTask routine CALLED!"); + String _name = task.getName(); + String _plus = (" - Task: " + _name); + InputOutput.println(_plus); + InputOutput.println((" - Container: " + container)); final String userMsg = "A Task has been created. Please decide whether and which corresponding ASCET Task should be created."; final String initTaskOption = "Create InitTask"; @@ -47,14 +52,54 @@ public void updateModels( final String[] options = { initTaskOption, periodicTaskOption, softwareTaskOption, timeTableTaskOption, doNothingOption }; + InputOutput.println("[Reaction] About to call userInteractor.startInteraction()..."); final Integer selected = this.executionState .getUserInteractor() .getSingleSelectionDialogBuilder() .message(userMsg) .choices(((Iterable) Conversions.doWrapArray(options))) .startInteraction(); - if (selected != null) { - switch (selected) { + InputOutput.println(("[Reaction] userInteractor returned: " + selected)); + Integer symbolicSelected = selected; + if ((selected != null)) { + try { + String _name_1 = task.getName(); + final String qualifiedName = ("CreateAscetTaskRoutine:execute:userChoice_forTask_" + _name_1); + final Class symbolicatorClass = + Class.forName("edu.neu.ccs.prl.galette.concolic.knarr.runtime.GaletteSymbolicator"); + final Method getOrMakeMethod = symbolicatorClass.getMethod( + "getOrMakeSymbolicInt", String.class, Integer.TYPE, Integer.TYPE, Integer.TYPE); + int _size = ((List) Conversions.doWrapArray(options)).size(); + int _minus = (_size - 1); + Object _invoke = getOrMakeMethod.invoke( + null, qualifiedName, selected, Integer.valueOf(0), Integer.valueOf(_minus)); + final Integer taggedSelected = ((Integer) _invoke); + final Class symbolicClass = + Class.forName("edu.neu.ccs.prl.galette.concolic.knarr.runtime.SymbolicComparison"); + final Method method = symbolicClass.getMethod( + "symbolicVitruviusChoice", Integer.class, Integer.TYPE, Integer.TYPE); + int _size_1 = ((List) Conversions.doWrapArray(options)).size(); + int _minus_1 = (_size_1 - 1); + Object _invoke_1 = + method.invoke(null, taggedSelected, Integer.valueOf(0), Integer.valueOf(_minus_1)); + symbolicSelected = ((Integer) _invoke_1); + InputOutput.println( + "[Reaction] Processed user choice with symbolic execution (tag reuse enabled)"); + } catch (final Throwable _t) { + if (_t instanceof Exception) { + final Exception e = (Exception) _t; + String _message = e.getMessage(); + String _plus_1 = ("[Reaction] Symbolic processing failed: " + _message); + InputOutput.println(_plus_1); + e.printStackTrace(); + symbolicSelected = selected; + } else { + throw Exceptions.sneakyThrow(_t); + } + } + } + if (symbolicSelected != null) { + switch (symbolicSelected) { case 0: _routinesFacade.createInitTask(task, container); break; diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreatePeriodicTaskRoutine.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreatePeriodicTaskRoutine.java index 530cf73..a7a4983 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreatePeriodicTaskRoutine.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreatePeriodicTaskRoutine.java @@ -12,10 +12,6 @@ import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class CreatePeriodicTaskRoutine extends AbstractRoutine { private CreatePeriodicTaskRoutine.InputValues inputValues; @@ -116,6 +112,8 @@ public void updateModels( EList _tasks = AscetModule.getTasks(); _tasks.add(periodicTask); periodicTask.setName(task.getName()); + periodicTask.setDelay(0.10); + periodicTask.setPeriod(1.0); this.addCorrespondenceBetween(periodicTask, container); } } diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateSoftwareTaskRoutine.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateSoftwareTaskRoutine.java index c409428..f3f9c5a 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateSoftwareTaskRoutine.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateSoftwareTaskRoutine.java @@ -12,10 +12,6 @@ import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class CreateSoftwareTaskRoutine extends AbstractRoutine { private CreateSoftwareTaskRoutine.InputValues inputValues; diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateTimeTableTaskRoutine.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateTimeTableTaskRoutine.java index beb25b6..7becce4 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateTimeTableTaskRoutine.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/CreateTimeTableTaskRoutine.java @@ -12,10 +12,6 @@ import tools.vitruv.methodologisttemplate.model.model2.ComponentContainer; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class CreateTimeTableTaskRoutine extends AbstractRoutine { private CreateTimeTableTaskRoutine.InputValues inputValues; diff --git a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/DeleteTaskRoutine.java b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/DeleteTaskRoutine.java index 4dcbba0..7f3fcd6 100644 --- a/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/DeleteTaskRoutine.java +++ b/amalthea-acset-integration/consistency/src/main/java/mir/routines/amalthea2ascet/DeleteTaskRoutine.java @@ -8,10 +8,6 @@ import tools.vitruv.dsls.reactions.runtime.structure.CallHierarchyHaving; import tools.vitruv.methodologisttemplate.model.model2.Task; -/** - * Generated Java Code from Reactions DSL. - * - */ @SuppressWarnings("all") public class DeleteTaskRoutine extends AbstractRoutine { private DeleteTaskRoutine.InputValues inputValues; diff --git a/amalthea-acset-integration/pom.xml b/amalthea-acset-integration/pom.xml index 7ac7ec2..44cb847 100644 --- a/amalthea-acset-integration/pom.xml +++ b/amalthea-acset-integration/pom.xml @@ -23,5 +23,25 @@ UTF-8 + + 17 + 17 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + 17 + 17 + + + + + \ No newline at end of file diff --git a/amalthea-acset-integration/vsum/src/main/java/tools/vitruv/methodologisttemplate/vsum/Test.java b/amalthea-acset-integration/vsum/src/main/java/tools/vitruv/methodologisttemplate/vsum/Test.java index 7339b6c..024f30e 100644 --- a/amalthea-acset-integration/vsum/src/main/java/tools/vitruv/methodologisttemplate/vsum/Test.java +++ b/amalthea-acset-integration/vsum/src/main/java/tools/vitruv/methodologisttemplate/vsum/Test.java @@ -117,6 +117,8 @@ public void insertTwoTasks(Path projectDir, Integer userInput1, Integer userInpu break; } + System.out.println("[Test:insertTwoTasks] CALLED"); + // 3) Setup user interactions for BOTH tasks TestUserInteraction userInteraction = new TestUserInteraction(); userInteraction.addNextSingleSelection(userInput1); // For first task diff --git a/claudes-doc-move-tag-creation-to-reaction.md b/claudes-doc-move-tag-creation-to-reaction.md new file mode 100644 index 0000000..cf761a7 --- /dev/null +++ b/claudes-doc-move-tag-creation-to-reaction.md @@ -0,0 +1,172 @@ +## Plan: Refactor Variable Tagging with Helper Class in templateReaction + +### Summary +Create a Java helper class to cleanly separate the three concerns: (1) variable tagging, (2) constraint formulation, and (3) branch tracking. This will make the reaction code cleaner and more maintainable. + +### Key Findings +✅ **Yes, Vitruv reactions CAN call Java helper classes!** Your codebase already uses: +- Direct imports (`import java.io.File`) +- Reflection for optional dependencies (as seen in the current SymbolicComparison call) +- Full Java interoperability through Xbase/Xtend + +### Implementation Plan + +#### 1. Create Helper Class Structure +Create a new Java helper class in the consistency project: +``` +/home/anne/CocoPath/Amalthea-acset/consistency/src/main/java/ +└── tools/vitruv/methodologisttemplate/helpers/ + └── SymbolicExecutionHelper.java +``` + +#### 2. Design the Helper Class +```java +package tools.vitruv.methodologisttemplate.helpers; + +public class SymbolicExecutionHelper { + + /** + * Process a user selection for symbolic execution. + * Separates three concerns: + * 1. Variable tagging - Create/attach symbolic tag if needed + * 2. Domain constraints - Record valid range of values + * 3. Branch tracking - Record the actual selected value + * + * @param selected The user's selection (may already be tagged) + * @param variableName Name for the symbolic variable (e.g., "user_choice") + * @param minValue Minimum valid value (inclusive) + * @param maxValue Maximum valid value (inclusive) + * @return Tagged value ready for use in switch statement + */ + public static Integer processSymbolicChoice(Integer selected, String variableName, int minValue, int maxValue) { + if (selected == null) return null; + + try { + // Step 1: Variable Tagging + // Check if value already has a tag + Object tag = getExistingTag(selected); + + if (tag == null) { + // Create new tag if needed + tag = createSymbolicTag(variableName, selected); + selected = attachTagToValue(selected, tag); + } + + // Step 2: Domain Constraints + // Record that variable can only be in range [minValue, maxValue] + recordDomainConstraint(variableName, minValue, maxValue); + + // Step 3: Branch Tracking + // Record which value was actually selected + recordBranchConstraint(variableName, selected); + + return selected; + + } catch (Exception e) { + // Graceful degradation if symbolic execution unavailable + System.err.println("[SymbolicExecutionHelper] Symbolic processing failed: " + e.getMessage()); + return selected; + } + } + + // Private helper methods for each concern... + private static Object getExistingTag(Integer value) throws Exception { + Class tainterClass = Class.forName("edu.neu.ccs.prl.galette.internal.runtime.Tainter"); + return tainterClass.getMethod("getTag", Object.class).invoke(null, value); + } + + private static Object createSymbolicTag(String varName, Integer value) throws Exception { + Class symbolicatorClass = Class.forName("edu.neu.ccs.prl.galette.concolic.knarr.runtime.GaletteSymbolicator"); + return symbolicatorClass.getMethod("makeSymbolicInt", String.class, Integer.TYPE) + .invoke(null, varName, value); + } + + private static Integer attachTagToValue(Integer value, Object tag) throws Exception { + Class tainterClass = Class.forName("edu.neu.ccs.prl.galette.internal.runtime.Tainter"); + return (Integer) tainterClass.getMethod("setTag", Integer.TYPE, Object.class) + .invoke(null, value, tag); + } + + private static void recordDomainConstraint(String varName, int min, int max) throws Exception { + Class pathUtilsClass = Class.forName("edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathUtils"); + pathUtilsClass.getMethod("addIntDomainConstraint", String.class, int.class, int.class) + .invoke(null, varName, min, max + 1); // +1 because PathUtils uses exclusive upper bound + } + + private static void recordBranchConstraint(String varName, Integer value) throws Exception { + Class pathUtilsClass = Class.forName("edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathUtils"); + pathUtilsClass.getMethod("addSwitchConstraint", String.class, int.class) + .invoke(null, varName, value); + } +} +``` + +#### 3. Update templateReaction.reactions +Replace lines 90-114 with cleaner code: +```xtend +// Record symbolic constraint for the user's choice +// This enables automatic path exploration through all dialog options +val Integer symbolicSelected = if (selected !== null) { + try { + // Use helper class to handle all symbolic execution concerns + val helperClass = Class.forName("tools.vitruv.methodologisttemplate.helpers.SymbolicExecutionHelper") + val method = helperClass.getMethod("processSymbolicChoice", + Integer, String, Integer.TYPE, Integer.TYPE) + + // Process with proper separation of concerns: + // 1. Variable tagging (creates tag if missing) + // 2. Domain constraints (0 to options.size-1) + // 3. Branch tracking (records selected value) + val result = method.invoke(null, + selected, // The user's selection + "user_choice", // Variable name for symbolic execution + 0, // Min valid value + options.size - 1 // Max valid value (4 for 5 options) + ) as Integer + + println("[Reaction] Symbolic processing complete: " + result) + result + } catch (Exception e) { + // If symbolic execution is not available, use the original value + println("[Reaction] Symbolic processing unavailable: " + e.message) + selected + } +} else { + println("[Reaction] Selected is null") + selected +} +``` + +#### 4. Simplify Path Exploration Classes +Remove tag extraction logic from: +- `AutomaticVitruvPathExploration.executeVitruvWithInput()` (lines 76-133) +- `AutomaticVitruvMultiVarPathExploration.executeVitruvWithTwoInputs()` (lines 104-183) + +These classes should just pass values through without modification since tagging now happens in the reaction. + +#### 5. Update Test.java +Remove manual constraint recording from `insertTwoTasks()` (lines 91-115) since this is now handled by the reaction. + +### Benefits of This Approach + +1. **Separation of Concerns**: Three distinct responsibilities are clearly separated +2. **Self-Contained Reactions**: Reactions handle their own symbolic execution needs +3. **Cleaner Code**: Less reflection boilerplate in the reaction +4. **Reusable**: Helper can be used by multiple reactions +5. **Maintainable**: Changes to symbolic execution logic are centralized +6. **Type-Safe**: Helper method has clear parameter types and documentation +7. **Graceful Degradation**: Works with or without symbolic execution available + +### Testing Plan +1. Test single variable path exploration +2. Test multi-variable path exploration +3. Verify constraints are properly collected +4. Ensure existing functionality is preserved +5. Confirm tags are created when missing and preserved when present + +### File Changes Summary +1. **Create**: `/home/anne/CocoPath/Amalthea-acset/consistency/src/main/java/tools/vitruv/methodologisttemplate/helpers/SymbolicExecutionHelper.java` +2. **Modify**: `/home/anne/CocoPath/Amalthea-acset/consistency/src/main/reactions/tools/vitruv/methodologisttemplate/consistency/templateReactions.reactions` (lines 90-114) +3. **Simplify**: `AutomaticVitruvPathExploration.java` (remove tag extraction) +4. **Simplify**: `AutomaticVitruvMultiVarPathExploration.java` (remove tag extraction) +5. **Simplify**: `Test.java` (remove manual constraint recording) \ No newline at end of file diff --git a/galette-instrument/src/main/java/module-info.java b/galette-instrument/src/main/java/module-info.java index e48ad03..be377c0 100644 Binary files a/galette-instrument/src/main/java/module-info.java and b/galette-instrument/src/main/java/module-info.java differ diff --git a/knarr-runtime/copy-generated-reactions.sh b/knarr-runtime/copy-generated-reactions.sh new file mode 100755 index 0000000..38778ac --- /dev/null +++ b/knarr-runtime/copy-generated-reactions.sh @@ -0,0 +1,159 @@ +#!/bin/bash + +# ============================================================================ +# Copy Generated Reactions from Amalthea-acset to amalthea-acset-integration +# ============================================================================ +# This script copies the generated reactions and routines from the external +# Amalthea-acset project to the internal amalthea-acset-integration module. +# +# Usage: +# ./copy-generated-reactions.sh +# ./copy-generated-reactions.sh --external-path /path/to/Amalthea-acset +# +# ============================================================================ + +set -e + +# Default paths +EXTERNAL_PATH="/home/anne/CocoPath/Amalthea-acset" +INTERNAL_PATH="/home/anne/CocoPath/CocoPath/amalthea-acset-integration" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case $1 in + --external-path) + EXTERNAL_PATH="$2" + shift 2 + ;; + --internal-path) + INTERNAL_PATH="$2" + shift 2 + ;; + -h|--help) + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " --external-path PATH Path to external Amalthea-acset (default: $EXTERNAL_PATH)" + echo " --internal-path PATH Path to internal amalthea-acset-integration (default: $INTERNAL_PATH)" + echo " -h, --help Show this help message" + exit 0 + ;; + *) + echo "Unknown option: $1" + echo "Use -h for help" + exit 1 + ;; + esac +done + +echo "================================================================================" +echo "Copy Generated Reactions and Routines" +echo "================================================================================" +echo "" +echo "From: $EXTERNAL_PATH" +echo "To: $INTERNAL_PATH" +echo "" + +# Verify external path exists +if [ ! -d "$EXTERNAL_PATH" ]; then + echo "ERROR: External Amalthea-acset not found at: $EXTERNAL_PATH" + echo "Please specify correct path with --external-path" + exit 1 +fi + +# Verify internal path exists +if [ ! -d "$INTERNAL_PATH" ]; then + echo "ERROR: Internal amalthea-acset-integration not found at: $INTERNAL_PATH" + echo "Please specify correct path with --internal-path" + exit 1 +fi + +# Check if generated sources exist +GENERATED_DIR="$EXTERNAL_PATH/consistency/target/generated-sources/reactions" +if [ ! -d "$GENERATED_DIR" ]; then + echo "ERROR: Generated sources not found at: $GENERATED_DIR" + echo "" + echo "You may need to build the external project first:" + echo " cd $EXTERNAL_PATH" + echo " mvn clean generate-sources" + exit 1 +fi + +# Create target directory if it doesn't exist +TARGET_DIR="$INTERNAL_PATH/consistency/src/main/java/mir" +if [ ! -d "$TARGET_DIR" ]; then + echo "Creating target directory: $TARGET_DIR" + mkdir -p "$TARGET_DIR" +fi + +# Copy reactions +if [ -d "$GENERATED_DIR/mir/reactions" ]; then + echo "Copying reactions..." + rm -rf "$TARGET_DIR/reactions" 2>/dev/null || true + cp -r "$GENERATED_DIR/mir/reactions" "$TARGET_DIR/" + REACTION_COUNT=$(find "$TARGET_DIR/reactions" -name "*.java" | wc -l) + echo " Copied $REACTION_COUNT reaction files" +else + echo "WARNING: No reactions found to copy" +fi + +# Copy routines +if [ -d "$GENERATED_DIR/mir/routines" ]; then + echo "Copying routines..." + rm -rf "$TARGET_DIR/routines" 2>/dev/null || true + cp -r "$GENERATED_DIR/mir/routines" "$TARGET_DIR/" + ROUTINE_COUNT=$(find "$TARGET_DIR/routines" -name "*.java" | wc -l) + echo " Copied $ROUTINE_COUNT routine files" +else + echo "WARNING: No routines found to copy" +fi + +echo "" + +# Fix Java 8 compatibility issues +echo "Fixing Java 8 compatibility issues..." +CHANGE_SPEC_FILE="$TARGET_DIR/reactions/amalthea2ascet/Amalthea2ascetChangePropagationSpecification.java" +if [ -f "$CHANGE_SPEC_FILE" ]; then + sed -i 's/import java.util.Set;/import java.util.Collections;/' "$CHANGE_SPEC_FILE" + sed -i 's/Set\.of/Collections.singleton/g' "$CHANGE_SPEC_FILE" + echo " Fixed Set.of() -> Collections.singleton() in Amalthea2ascetChangePropagationSpecification.java" +else + echo " WARNING: ChangePropagationSpecification.java not found, skipping Java 8 fix" +fi + +echo "" + +# Clean Maven repository to avoid stale JAR issues +echo "Cleaning Maven repository cache..." +# Remove internal consistency JAR from Maven repo +rm -rf "$HOME/.m2/repository/edu/neu/ccs/prl/galette/amalthea-acset-consistency/1.0.0-SNAPSHOT/" 2>/dev/null || true +echo " Removed cached amalthea-acset-consistency JAR" + +# Also remove external consistency JAR if it exists +rm -rf "$HOME/.m2/repository/tools/vitruv/tools.vitruv.methodologisttemplate.consistency/0.1.0-SNAPSHOT/" 2>/dev/null || true +echo " Removed cached external consistency JAR" + +echo "" +echo "Building and installing internal project..." +cd "$INTERNAL_PATH" +mvn clean install -DskipTests -Dcheckstyle.skip=true -q +if [ $? -eq 0 ]; then + echo " Internal project built and installed successfully" +else + echo "ERROR: Failed to build internal project" + exit 1 +fi + +echo "" +echo "================================================================================" +echo "Copy and build completed successfully!" +echo "================================================================================" +echo "" +echo "Next steps:" +echo "1. Run the instrumented tests:" +echo " cd /home/anne/CocoPath/CocoPath/knarr-runtime" +echo " ./run-instrumented-with-option-flags.sh -i" +echo "" +echo "2. Or run symbolic execution:" +echo " ./run-symbolic-execution-adapted.sh --internal" +echo "" \ No newline at end of file diff --git a/knarr-runtime/cp.txt b/knarr-runtime/cp.txt new file mode 100644 index 0000000..e53a82f --- /dev/null +++ b/knarr-runtime/cp.txt @@ -0,0 +1 @@ +/home/anne/.m2/repository/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar:/home/anne/.m2/repository/edu/gmu/swe/greensolver/green/1.0-SNAPSHOT/green-1.0-SNAPSHOT.jar:/home/anne/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar:/home/anne/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar:/home/anne/.m2/repository/org/ow2/asm/asm-commons/9.6/asm-commons-9.6.jar:/home/anne/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar:/home/anne/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar:/home/anne/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.10.0/junit-jupiter-api-5.10.0.jar:/home/anne/.m2/repository/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar:/home/anne/.m2/repository/org/junit/platform/junit-platform-commons/1.10.0/junit-platform-commons-1.10.0.jar:/home/anne/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/home/anne/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.10.0/junit-jupiter-params-5.10.0.jar:/home/anne/.m2/repository/edu/neu/ccs/prl/galette/amalthea-acset-vsum/1.0.0-SNAPSHOT/amalthea-acset-vsum-1.0.0-SNAPSHOT.jar:/home/anne/.m2/repository/edu/neu/ccs/prl/galette/amalthea-acset-model/1.0.0-SNAPSHOT/amalthea-acset-model-1.0.0-SNAPSHOT.jar:/home/anne/.m2/repository/edu/neu/ccs/prl/galette/amalthea-acset-consistency/1.0.0-SNAPSHOT/amalthea-acset-consistency-1.0.0-SNAPSHOT.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.dsls.reactions.runtime/3.1.2/tools.vitruv.dsls.reactions.runtime-3.1.2.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.core.resources/3.22.0/org.eclipse.core.resources-3.22.0.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.core.expressions/3.9.400/org.eclipse.core.expressions-3.9.400.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.core.filesystem/1.11.100/org.eclipse.core.filesystem-1.11.100.jar:/home/anne/.m2/repository/net/java/dev/jna/jna-platform/5.15.0/jna-platform-5.15.0.jar:/home/anne/.m2/repository/net/java/dev/jna/jna/5.15.0/jna-5.15.0.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.osgi/3.22.0/org.eclipse.osgi-3.22.0.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.equinox.common/3.19.200/org.eclipse.equinox.common-3.19.200.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.dsls.p2wrappers.activextendannotations/3.1.2/tools.vitruv.dsls.p2wrappers.activextendannotations-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.dsls.p2wrappers.emfutils/3.1.2/tools.vitruv.dsls.p2wrappers.emfutils-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.testutils.integration/3.1.2/tools.vitruv.change.testutils.integration-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.testutils.core/3.1.2/tools.vitruv.change.testutils.core-3.1.2.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.core.runtime/3.32.0/org.eclipse.core.runtime-3.32.0.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.core.jobs/3.15.400/org.eclipse.core.jobs-3.15.400.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.equinox.registry/3.12.200/org.eclipse.equinox.registry-3.12.200.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.equinox.preferences/3.11.200/org.eclipse.equinox.preferences-3.11.200.jar:/home/anne/.m2/repository/org/osgi/org.osgi.service.prefs/1.1.2/org.osgi.service.prefs-1.1.2.jar:/home/anne/.m2/repository/org/osgi/osgi.annotation/8.0.1/osgi.annotation-8.0.1.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.core.contenttype/3.9.600/org.eclipse.core.contenttype-3.9.600.jar:/home/anne/.m2/repository/org/eclipse/platform/org.eclipse.equinox.app/1.7.200/org.eclipse.equinox.app-1.7.200.jar:/home/anne/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar:/home/anne/.m2/repository/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.p2wrappers.eclipseutils/3.1.2/tools.vitruv.change.p2wrappers.eclipseutils-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.p2wrappers.emfcompare/3.1.2/tools.vitruv.change.p2wrappers.emfcompare-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.p2wrappers.activextendannotations/3.1.2/tools.vitruv.change.p2wrappers.activextendannotations-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.framework.views/3.1.2/tools.vitruv.framework.views-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.framework.p2wrappers.activextendannotations/3.1.2/tools.vitruv.framework.p2wrappers.activextendannotations-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.framework.p2wrappers.emfcompare/3.1.2/tools.vitruv.framework.p2wrappers.emfcompare-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.methodologisttemplate.vsum/0.1.0-SNAPSHOT/tools.vitruv.methodologisttemplate.vsum-0.1.0-SNAPSHOT.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.methodologisttemplate.model/0.1.0-SNAPSHOT/tools.vitruv.methodologisttemplate.model-0.1.0-SNAPSHOT.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.methodologisttemplate.consistency/0.1.0-SNAPSHOT/tools.vitruv.methodologisttemplate.consistency-0.1.0-SNAPSHOT.jar:/home/anne/.m2/repository/org/eclipse/emf/org.eclipse.emf.ecore/2.38.0/org.eclipse.emf.ecore-2.38.0.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.interaction/3.1.2/tools.vitruv.change.interaction-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.interaction.model/3.1.2/tools.vitruv.change.interaction.model-3.1.2.jar:/home/anne/.m2/repository/com/google/guava/guava/33.4.0-jre/guava-33.4.0-jre.jar:/home/anne/.m2/repository/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar:/home/anne/.m2/repository/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/home/anne/.m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar:/home/anne/.m2/repository/org/checkerframework/checker-qual/3.43.0/checker-qual-3.43.0.jar:/home/anne/.m2/repository/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.jar:/home/anne/.m2/repository/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar:/home/anne/.m2/repository/org/apache/logging/log4j/log4j-core/2.24.3/log4j-core-2.24.3.jar:/home/anne/.m2/repository/org/apache/logging/log4j/log4j-api/2.24.3/log4j-api-2.24.3.jar:/home/anne/.m2/repository/org/eclipse/emf/org.eclipse.emf.common/2.40.0/org.eclipse.emf.common-2.40.0.jar:/home/anne/.m2/repository/org/eclipse/xtend/org.eclipse.xtend.lib/2.37.0/org.eclipse.xtend.lib-2.37.0.jar:/home/anne/.m2/repository/org/eclipse/xtend/org.eclipse.xtend.lib.macro/2.37.0/org.eclipse.xtend.lib.macro-2.37.0.jar:/home/anne/.m2/repository/org/eclipse/xtext/org.eclipse.xtext.xbase.lib/2.37.0/org.eclipse.xtext.xbase.lib-2.37.0.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.p2wrappers.javautils/3.1.2/tools.vitruv.change.p2wrappers.javautils-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.propagation/3.1.2/tools.vitruv.change.propagation-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.atomic/3.1.2/tools.vitruv.change.atomic-3.1.2.jar:/home/anne/.m2/repository/org/eclipse/emf/org.eclipse.emf.edit/2.22.0/org.eclipse.emf.edit-2.22.0.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.composite/3.1.2/tools.vitruv.change.composite-3.1.2.jar:/home/anne/.m2/repository/org/eclipse/emf/org.eclipse.emf.ecore.change/2.17.0/org.eclipse.emf.ecore.change-2.17.0.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.correspondence/3.1.2/tools.vitruv.change.correspondence-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.utils/3.1.2/tools.vitruv.change.utils-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.change.p2wrappers.emfutils/3.1.2/tools.vitruv.change.p2wrappers.emfutils-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.framework.vsum/3.1.2/tools.vitruv.framework.vsum-3.1.2.jar:/home/anne/.m2/repository/tools/vitruv/tools.vitruv.framework.p2wrappers.emfutils/3.1.2/tools.vitruv.framework.p2wrappers.emfutils-3.1.2.jar:/home/anne/.m2/repository/org/eclipse/emf/org.eclipse.emf.ecore.xmi/2.16.0/org.eclipse.emf.ecore.xmi-2.16.0.jar \ No newline at end of file diff --git a/knarr-runtime/execution_paths_automatic.json b/knarr-runtime/execution_paths_automatic.json index b8456ac..7d320b2 100644 --- a/knarr-runtime/execution_paths_automatic.json +++ b/knarr-runtime/execution_paths_automatic.json @@ -2,56 +2,57 @@ { "pathId": 1, "symbolicInputs": { - "user_choice": 0 + "null": 0 }, - "constraints": [ - "(0<=user_choice)&&(user_choice<5)", - "user_choice==0" + "pathConstraints": [ + "(0<=CreateAscetTaskRoutine:execute:userChoice_forTask_specialname)&&(CreateAscetTaskRoutine:execute:userChoice_forTask_specialname<5)", + "CreateAscetTaskRoutine:execute:userChoice_forTask_specialname==0" ], - "executionTime": 1381 + "numConstraints": 2, + "executionTimeMs": 23810 }, { "pathId": 2, "symbolicInputs": { - "user_choice": 1 + "null": 1 }, - "constraints": [ - "(0<=user_choice)&&(user_choice<5)", - "user_choice==1" + "pathConstraints": [ + "CreateAscetTaskRoutine:execute:userChoice_forTask_specialname==1" ], - "executionTime": 46 + "numConstraints": 1, + "executionTimeMs": 144 }, { "pathId": 3, "symbolicInputs": { - "user_choice": 2 + "null": 2 }, - "constraints": [ - "(0<=user_choice)&&(user_choice<5)", - "user_choice==2" + "pathConstraints": [ + "CreateAscetTaskRoutine:execute:userChoice_forTask_specialname==2" ], - "executionTime": 30 + "numConstraints": 1, + "executionTimeMs": 162 }, { "pathId": 4, "symbolicInputs": { - "user_choice": 3 + "null": 3 }, - "constraints": [ - "(0<=user_choice)&&(user_choice<5)", - "user_choice==3" + "pathConstraints": [ + "CreateAscetTaskRoutine:execute:userChoice_forTask_specialname==3" ], - "executionTime": 29 + "numConstraints": 1, + "executionTimeMs": 165 }, { "pathId": 5, "symbolicInputs": { - "user_choice": 4 + "null": 4 }, - "constraints": [ - "(0<=user_choice)&&(user_choice<5)", - "user_choice==4" + "pathConstraints": [ + "CreateAscetTaskRoutine:execute:userChoice_forTask_specialname==4" ], - "executionTime": 24 + "numConstraints": 1, + "executionTimeMs": 87 } ] diff --git a/knarr-runtime/execution_paths_multivar.json b/knarr-runtime/execution_paths_multivar.json index 7906901..2afc35a 100644 --- a/knarr-runtime/execution_paths_multivar.json +++ b/knarr-runtime/execution_paths_multivar.json @@ -1,182 +1,182 @@ { "total_paths": 25, "num_variables": 2, - "variable_names": ["user_choice_1", "user_choice_2"], + "variable_names": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2"], "paths": [ { "path_id": 0, - "inputs": {"user_choice_1": 0, "user_choice_2": 0}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==0", "user_choice_2==0"], + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 0, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 0}, + "constraints": ["(0<=CreateAscetTaskRoutine:execute:userChoice_forTask_task1)&&(CreateAscetTaskRoutine:execute:userChoice_forTask_task1<5)", "CreateAscetTaskRoutine:execute:userChoice_forTask_task1==0", "(0<=CreateAscetTaskRoutine:execute:userChoice_forTask_task2)&&(CreateAscetTaskRoutine:execute:userChoice_forTask_task2<5)", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==0"], "num_constraints": 4, - "execution_time_ms": 1372 + "execution_time_ms": 51206 }, { "path_id": 1, - "inputs": {"user_choice_1": 0, "user_choice_2": 1}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==0", "user_choice_2==1"], - "num_constraints": 4, - "execution_time_ms": 54 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 1, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 0}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==0", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==1"], + "num_constraints": 2, + "execution_time_ms": 326 }, { "path_id": 2, - "inputs": {"user_choice_1": 0, "user_choice_2": 2}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==0", "user_choice_2==2"], - "num_constraints": 4, - "execution_time_ms": 42 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 2, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 0}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==0", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==2"], + "num_constraints": 2, + "execution_time_ms": 234 }, { "path_id": 3, - "inputs": {"user_choice_1": 0, "user_choice_2": 3}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==0", "user_choice_2==3"], - "num_constraints": 4, - "execution_time_ms": 44 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 3, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 0}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==0", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==3"], + "num_constraints": 2, + "execution_time_ms": 229 }, { "path_id": 4, - "inputs": {"user_choice_1": 0, "user_choice_2": 4}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==0", "user_choice_2==4"], - "num_constraints": 4, - "execution_time_ms": 39 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 4, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 0}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==0", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==4"], + "num_constraints": 2, + "execution_time_ms": 183 }, { "path_id": 5, - "inputs": {"user_choice_1": 1, "user_choice_2": 0}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==1", "user_choice_2==0"], - "num_constraints": 4, - "execution_time_ms": 36 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 0, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 1}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==1", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==0"], + "num_constraints": 2, + "execution_time_ms": 188 }, { "path_id": 6, - "inputs": {"user_choice_1": 1, "user_choice_2": 1}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==1", "user_choice_2==1"], - "num_constraints": 4, - "execution_time_ms": 36 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 1, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 1}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==1", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==1"], + "num_constraints": 2, + "execution_time_ms": 139 }, { "path_id": 7, - "inputs": {"user_choice_1": 1, "user_choice_2": 2}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==1", "user_choice_2==2"], - "num_constraints": 4, - "execution_time_ms": 36 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 2, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 1}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==1", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==2"], + "num_constraints": 2, + "execution_time_ms": 195 }, { "path_id": 8, - "inputs": {"user_choice_1": 1, "user_choice_2": 3}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==1", "user_choice_2==3"], - "num_constraints": 4, - "execution_time_ms": 32 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 3, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 1}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==1", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==3"], + "num_constraints": 2, + "execution_time_ms": 113 }, { "path_id": 9, - "inputs": {"user_choice_1": 1, "user_choice_2": 4}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==1", "user_choice_2==4"], - "num_constraints": 4, - "execution_time_ms": 30 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 4, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 1}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==1", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==4"], + "num_constraints": 2, + "execution_time_ms": 111 }, { "path_id": 10, - "inputs": {"user_choice_1": 2, "user_choice_2": 0}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==2", "user_choice_2==0"], - "num_constraints": 4, - "execution_time_ms": 35 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 0, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 2}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==2", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==0"], + "num_constraints": 2, + "execution_time_ms": 136 }, { "path_id": 11, - "inputs": {"user_choice_1": 2, "user_choice_2": 1}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==2", "user_choice_2==1"], - "num_constraints": 4, - "execution_time_ms": 35 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 1, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 2}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==2", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==1"], + "num_constraints": 2, + "execution_time_ms": 104 }, { "path_id": 12, - "inputs": {"user_choice_1": 2, "user_choice_2": 2}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==2", "user_choice_2==2"], - "num_constraints": 4, - "execution_time_ms": 34 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 2, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 2}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==2", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==2"], + "num_constraints": 2, + "execution_time_ms": 111 }, { "path_id": 13, - "inputs": {"user_choice_1": 2, "user_choice_2": 3}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==2", "user_choice_2==3"], - "num_constraints": 4, - "execution_time_ms": 31 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 3, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 2}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==2", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==3"], + "num_constraints": 2, + "execution_time_ms": 104 }, { "path_id": 14, - "inputs": {"user_choice_1": 2, "user_choice_2": 4}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==2", "user_choice_2==4"], - "num_constraints": 4, - "execution_time_ms": 34 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 4, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 2}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==2", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==4"], + "num_constraints": 2, + "execution_time_ms": 139 }, { "path_id": 15, - "inputs": {"user_choice_1": 3, "user_choice_2": 0}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==3", "user_choice_2==0"], - "num_constraints": 4, - "execution_time_ms": 43 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 0, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 3}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==3", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==0"], + "num_constraints": 2, + "execution_time_ms": 132 }, { "path_id": 16, - "inputs": {"user_choice_1": 3, "user_choice_2": 1}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==3", "user_choice_2==1"], - "num_constraints": 4, - "execution_time_ms": 24 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 1, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 3}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==3", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==1"], + "num_constraints": 2, + "execution_time_ms": 105 }, { "path_id": 17, - "inputs": {"user_choice_1": 3, "user_choice_2": 2}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==3", "user_choice_2==2"], - "num_constraints": 4, - "execution_time_ms": 26 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 2, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 3}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==3", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==2"], + "num_constraints": 2, + "execution_time_ms": 121 }, { "path_id": 18, - "inputs": {"user_choice_1": 3, "user_choice_2": 3}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==3", "user_choice_2==3"], - "num_constraints": 4, - "execution_time_ms": 29 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 3, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 3}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==3", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==3"], + "num_constraints": 2, + "execution_time_ms": 185 }, { "path_id": 19, - "inputs": {"user_choice_1": 3, "user_choice_2": 4}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==3", "user_choice_2==4"], - "num_constraints": 4, - "execution_time_ms": 27 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 4, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 3}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==3", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==4"], + "num_constraints": 2, + "execution_time_ms": 103 }, { "path_id": 20, - "inputs": {"user_choice_1": 4, "user_choice_2": 0}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==4", "user_choice_2==0"], - "num_constraints": 4, - "execution_time_ms": 24 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 0, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 4}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==4", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==0"], + "num_constraints": 2, + "execution_time_ms": 100 }, { "path_id": 21, - "inputs": {"user_choice_1": 4, "user_choice_2": 1}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==4", "user_choice_2==1"], - "num_constraints": 4, - "execution_time_ms": 36 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 1, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 4}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==4", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==1"], + "num_constraints": 2, + "execution_time_ms": 162 }, { "path_id": 22, - "inputs": {"user_choice_1": 4, "user_choice_2": 2}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==4", "user_choice_2==2"], - "num_constraints": 4, - "execution_time_ms": 26 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 2, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 4}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==4", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==2"], + "num_constraints": 2, + "execution_time_ms": 113 }, { "path_id": 23, - "inputs": {"user_choice_1": 4, "user_choice_2": 3}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==4", "user_choice_2==3"], - "num_constraints": 4, - "execution_time_ms": 26 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 3, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 4}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==4", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==3"], + "num_constraints": 2, + "execution_time_ms": 125 }, { "path_id": 24, - "inputs": {"user_choice_1": 4, "user_choice_2": 4}, - "constraints": ["(0<=user_choice_1)&&(user_choice_1<5)", "(0<=user_choice_2)&&(user_choice_2<5)", "user_choice_1==4", "user_choice_2==4"], - "num_constraints": 4, - "execution_time_ms": 32 + "inputs": {"CreateAscetTaskRoutine:execute:userChoice_forTask_task2": 4, "CreateAscetTaskRoutine:execute:userChoice_forTask_task1": 4}, + "constraints": ["CreateAscetTaskRoutine:execute:userChoice_forTask_task1==4", "CreateAscetTaskRoutine:execute:userChoice_forTask_task2==4"], + "num_constraints": 2, + "execution_time_ms": 127 } ] } diff --git a/knarr-runtime/galette-output-multivar-0_1/example.model b/knarr-runtime/galette-output-automatic-0/example.model similarity index 81% rename from knarr-runtime/galette-output-multivar-0_1/example.model rename to knarr-runtime/galette-output-automatic-0/example.model index cfe1702..692bbd6 100644 --- a/knarr-runtime/galette-output-multivar-0_1/example.model +++ b/knarr-runtime/galette-output-automatic-0/example.model @@ -1,5 +1,4 @@ - - + diff --git a/knarr-runtime/galette-output-multivar-3_4/example.model2 b/knarr-runtime/galette-output-automatic-0/example.model2 similarity index 81% rename from knarr-runtime/galette-output-multivar-3_4/example.model2 rename to knarr-runtime/galette-output-automatic-0/example.model2 index eec8ad2..12a6d28 100644 --- a/knarr-runtime/galette-output-multivar-3_4/example.model2 +++ b/knarr-runtime/galette-output-automatic-0/example.model2 @@ -1,4 +1,4 @@ - + diff --git a/knarr-runtime/galette-output-multivar-4_2/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-automatic-0/galette-test-output/vsum-output.xmi similarity index 78% rename from knarr-runtime/galette-output-multivar-4_2/galette-test-output/vsum-output.xmi rename to knarr-runtime/galette-output-automatic-0/galette-test-output/vsum-output.xmi index 7c99eb4..d9d5f17 100644 --- a/knarr-runtime/galette-output-multivar-4_2/galette-test-output/vsum-output.xmi +++ b/knarr-runtime/galette-output-automatic-0/galette-test-output/vsum-output.xmi @@ -1,10 +1,9 @@ - - + - + diff --git a/knarr-runtime/galette-output-multivar-0_0/test_project.marker_vitruv b/knarr-runtime/galette-output-automatic-0/test_project.marker_vitruv similarity index 100% rename from knarr-runtime/galette-output-multivar-0_0/test_project.marker_vitruv rename to knarr-runtime/galette-output-automatic-0/test_project.marker_vitruv diff --git a/knarr-runtime/galette-output-multivar-0_4/vsum/correspondences.correspondence b/knarr-runtime/galette-output-automatic-0/vsum/correspondences.correspondence similarity index 83% rename from knarr-runtime/galette-output-multivar-0_4/vsum/correspondences.correspondence rename to knarr-runtime/galette-output-automatic-0/vsum/correspondences.correspondence index cfbcaa7..d6373f1 100644 --- a/knarr-runtime/galette-output-multivar-0_4/vsum/correspondences.correspondence +++ b/knarr-runtime/galette-output-automatic-0/vsum/correspondences.correspondence @@ -1,11 +1,11 @@ - + - + diff --git a/knarr-runtime/galette-output-automatic-0/vsum/models.models b/knarr-runtime/galette-output-automatic-0/vsum/models.models new file mode 100644 index 0000000..c0e2951 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-0/vsum/models.models @@ -0,0 +1,2 @@ +galette-output-automatic-0/example.model +file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-0/example.model2 diff --git a/knarr-runtime/galette-output-automatic-0/vsum/uuid.uuid b/knarr-runtime/galette-output-automatic-0/vsum/uuid.uuid new file mode 100644 index 0000000..b068c12 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-0/vsum/uuid.uuid @@ -0,0 +1,4 @@ +ord__4kKLQN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-0/example.model2#/0/@tasks.0 +ord__3o6rAN0cEfCxWYMnOM82Hg|galette-output-automatic-0/example.model#/0 +ord__3wwYYN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-0/example.model2#/0 +ord__4gyHIN0cEfCxWYMnOM82Hg|galette-output-automatic-0/example.model#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-0_0/example.model b/knarr-runtime/galette-output-automatic-1/example.model similarity index 81% rename from knarr-runtime/galette-output-multivar-0_0/example.model rename to knarr-runtime/galette-output-automatic-1/example.model index cfe1702..692bbd6 100644 --- a/knarr-runtime/galette-output-multivar-0_0/example.model +++ b/knarr-runtime/galette-output-automatic-1/example.model @@ -1,5 +1,4 @@ - - + diff --git a/knarr-runtime/galette-output-multivar-1_4/example.model2 b/knarr-runtime/galette-output-automatic-1/example.model2 similarity index 74% rename from knarr-runtime/galette-output-multivar-1_4/example.model2 rename to knarr-runtime/galette-output-automatic-1/example.model2 index 525893e..ee732f7 100644 --- a/knarr-runtime/galette-output-multivar-1_4/example.model2 +++ b/knarr-runtime/galette-output-automatic-1/example.model2 @@ -1,4 +1,4 @@ - + diff --git a/knarr-runtime/galette-output-multivar-0_4/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-automatic-1/galette-test-output/vsum-output.xmi similarity index 76% rename from knarr-runtime/galette-output-multivar-0_4/galette-test-output/vsum-output.xmi rename to knarr-runtime/galette-output-automatic-1/galette-test-output/vsum-output.xmi index e8d01db..63ed6bb 100644 --- a/knarr-runtime/galette-output-multivar-0_4/galette-test-output/vsum-output.xmi +++ b/knarr-runtime/galette-output-automatic-1/galette-test-output/vsum-output.xmi @@ -1,10 +1,9 @@ - - + - + diff --git a/knarr-runtime/galette-output-multivar-0_1/test_project.marker_vitruv b/knarr-runtime/galette-output-automatic-1/test_project.marker_vitruv similarity index 100% rename from knarr-runtime/galette-output-multivar-0_1/test_project.marker_vitruv rename to knarr-runtime/galette-output-automatic-1/test_project.marker_vitruv diff --git a/knarr-runtime/galette-output-multivar-1_4/vsum/correspondences.correspondence b/knarr-runtime/galette-output-automatic-1/vsum/correspondences.correspondence similarity index 83% rename from knarr-runtime/galette-output-multivar-1_4/vsum/correspondences.correspondence rename to knarr-runtime/galette-output-automatic-1/vsum/correspondences.correspondence index c3ee764..23388cb 100644 --- a/knarr-runtime/galette-output-multivar-1_4/vsum/correspondences.correspondence +++ b/knarr-runtime/galette-output-automatic-1/vsum/correspondences.correspondence @@ -1,11 +1,11 @@ - + - + diff --git a/knarr-runtime/galette-output-automatic-1/vsum/models.models b/knarr-runtime/galette-output-automatic-1/vsum/models.models new file mode 100644 index 0000000..a3459c3 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-1/vsum/models.models @@ -0,0 +1,2 @@ +galette-output-automatic-1/example.model +file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-1/example.model2 diff --git a/knarr-runtime/galette-output-automatic-1/vsum/uuid.uuid b/knarr-runtime/galette-output-automatic-1/vsum/uuid.uuid new file mode 100644 index 0000000..3f49330 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-1/vsum/uuid.uuid @@ -0,0 +1,4 @@ +ord__4loK4N0cEfCxWYMnOM82Hg|galette-output-automatic-1/example.model#/0 +ord__4ngaMN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-1/example.model2#/0/@tasks.0 +ord__4l9iEN0cEfCxWYMnOM82Hg|galette-output-automatic-1/example.model#/0/@tasks.0 +ord__4ltqcN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-1/example.model2#/0 diff --git a/knarr-runtime/galette-output-multivar-0_3/example.model b/knarr-runtime/galette-output-automatic-2/example.model similarity index 81% rename from knarr-runtime/galette-output-multivar-0_3/example.model rename to knarr-runtime/galette-output-automatic-2/example.model index cfe1702..692bbd6 100644 --- a/knarr-runtime/galette-output-multivar-0_3/example.model +++ b/knarr-runtime/galette-output-automatic-2/example.model @@ -1,5 +1,4 @@ - - + diff --git a/knarr-runtime/galette-output-multivar-4_0/example.model2 b/knarr-runtime/galette-output-automatic-2/example.model2 similarity index 80% rename from knarr-runtime/galette-output-multivar-4_0/example.model2 rename to knarr-runtime/galette-output-automatic-2/example.model2 index 70c44d7..7817b24 100644 --- a/knarr-runtime/galette-output-multivar-4_0/example.model2 +++ b/knarr-runtime/galette-output-automatic-2/example.model2 @@ -1,4 +1,4 @@ - + diff --git a/knarr-runtime/galette-output-multivar-2_4/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-automatic-2/galette-test-output/vsum-output.xmi similarity index 78% rename from knarr-runtime/galette-output-multivar-2_4/galette-test-output/vsum-output.xmi rename to knarr-runtime/galette-output-automatic-2/galette-test-output/vsum-output.xmi index 2b6636e..0c6e337 100644 --- a/knarr-runtime/galette-output-multivar-2_4/galette-test-output/vsum-output.xmi +++ b/knarr-runtime/galette-output-automatic-2/galette-test-output/vsum-output.xmi @@ -1,10 +1,9 @@ - - + - + diff --git a/knarr-runtime/galette-output-multivar-0_2/test_project.marker_vitruv b/knarr-runtime/galette-output-automatic-2/test_project.marker_vitruv similarity index 100% rename from knarr-runtime/galette-output-multivar-0_2/test_project.marker_vitruv rename to knarr-runtime/galette-output-automatic-2/test_project.marker_vitruv diff --git a/knarr-runtime/galette-output-multivar-2_4/vsum/correspondences.correspondence b/knarr-runtime/galette-output-automatic-2/vsum/correspondences.correspondence similarity index 83% rename from knarr-runtime/galette-output-multivar-2_4/vsum/correspondences.correspondence rename to knarr-runtime/galette-output-automatic-2/vsum/correspondences.correspondence index b766eed..af685ed 100644 --- a/knarr-runtime/galette-output-multivar-2_4/vsum/correspondences.correspondence +++ b/knarr-runtime/galette-output-automatic-2/vsum/correspondences.correspondence @@ -1,11 +1,11 @@ - + - + diff --git a/knarr-runtime/galette-output-automatic-2/vsum/models.models b/knarr-runtime/galette-output-automatic-2/vsum/models.models new file mode 100644 index 0000000..d513a58 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-2/vsum/models.models @@ -0,0 +1,2 @@ +galette-output-automatic-2/example.model +file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-2/example.model2 diff --git a/knarr-runtime/galette-output-automatic-2/vsum/uuid.uuid b/knarr-runtime/galette-output-automatic-2/vsum/uuid.uuid new file mode 100644 index 0000000..6f29177 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-2/vsum/uuid.uuid @@ -0,0 +1,4 @@ +ord__4pdiAN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-2/example.model2#/0/@tasks.0 +ord__4oIFQN0cEfCxWYMnOM82Hg|galette-output-automatic-2/example.model#/0/@tasks.0 +ord__4n3mkN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-2/example.model2#/0 +ord__4nxf8N0cEfCxWYMnOM82Hg|galette-output-automatic-2/example.model#/0 diff --git a/knarr-runtime/galette-output-multivar-0_2/example.model b/knarr-runtime/galette-output-automatic-3/example.model similarity index 81% rename from knarr-runtime/galette-output-multivar-0_2/example.model rename to knarr-runtime/galette-output-automatic-3/example.model index cfe1702..692bbd6 100644 --- a/knarr-runtime/galette-output-multivar-0_2/example.model +++ b/knarr-runtime/galette-output-automatic-3/example.model @@ -1,5 +1,4 @@ - - + diff --git a/knarr-runtime/galette-output-multivar-2_4/example.model2 b/knarr-runtime/galette-output-automatic-3/example.model2 similarity index 79% rename from knarr-runtime/galette-output-multivar-2_4/example.model2 rename to knarr-runtime/galette-output-automatic-3/example.model2 index 6d627c3..96d5c15 100644 --- a/knarr-runtime/galette-output-multivar-2_4/example.model2 +++ b/knarr-runtime/galette-output-automatic-3/example.model2 @@ -1,4 +1,4 @@ - + diff --git a/knarr-runtime/galette-output-multivar-3_4/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-automatic-3/galette-test-output/vsum-output.xmi similarity index 78% rename from knarr-runtime/galette-output-multivar-3_4/galette-test-output/vsum-output.xmi rename to knarr-runtime/galette-output-automatic-3/galette-test-output/vsum-output.xmi index acf276f..3c1d2d3 100644 --- a/knarr-runtime/galette-output-multivar-3_4/galette-test-output/vsum-output.xmi +++ b/knarr-runtime/galette-output-automatic-3/galette-test-output/vsum-output.xmi @@ -1,10 +1,9 @@ - - + - + diff --git a/knarr-runtime/galette-output-multivar-0_3/test_project.marker_vitruv b/knarr-runtime/galette-output-automatic-3/test_project.marker_vitruv similarity index 100% rename from knarr-runtime/galette-output-multivar-0_3/test_project.marker_vitruv rename to knarr-runtime/galette-output-automatic-3/test_project.marker_vitruv diff --git a/knarr-runtime/galette-output-multivar-3_4/vsum/correspondences.correspondence b/knarr-runtime/galette-output-automatic-3/vsum/correspondences.correspondence similarity index 83% rename from knarr-runtime/galette-output-multivar-3_4/vsum/correspondences.correspondence rename to knarr-runtime/galette-output-automatic-3/vsum/correspondences.correspondence index da18b33..0dcd943 100644 --- a/knarr-runtime/galette-output-multivar-3_4/vsum/correspondences.correspondence +++ b/knarr-runtime/galette-output-automatic-3/vsum/correspondences.correspondence @@ -1,11 +1,11 @@ - + - + diff --git a/knarr-runtime/galette-output-automatic-3/vsum/models.models b/knarr-runtime/galette-output-automatic-3/vsum/models.models new file mode 100644 index 0000000..9305841 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-3/vsum/models.models @@ -0,0 +1,2 @@ +galette-output-automatic-3/example.model +file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-3/example.model2 diff --git a/knarr-runtime/galette-output-automatic-3/vsum/uuid.uuid b/knarr-runtime/galette-output-automatic-3/vsum/uuid.uuid new file mode 100644 index 0000000..807c212 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-3/vsum/uuid.uuid @@ -0,0 +1,4 @@ +ord__4psykN0cEfCxWYMnOM82Hg|galette-output-automatic-3/example.model#/0 +ord__4qCw0N0cEfCxWYMnOM82Hg|galette-output-automatic-3/example.model#/0/@tasks.0 +ord__4py5MN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-3/example.model2#/0 +ord__4rsWoN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-3/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-automatic-4/example.model b/knarr-runtime/galette-output-automatic-4/example.model new file mode 100644 index 0000000..692bbd6 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-4/example.model @@ -0,0 +1,4 @@ + + + + diff --git a/knarr-runtime/galette-output-multivar-4_4/example.model2 b/knarr-runtime/galette-output-automatic-4/example.model2 similarity index 100% rename from knarr-runtime/galette-output-multivar-4_4/example.model2 rename to knarr-runtime/galette-output-automatic-4/example.model2 diff --git a/knarr-runtime/galette-output-multivar-4_4/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-automatic-4/galette-test-output/vsum-output.xmi similarity index 85% rename from knarr-runtime/galette-output-multivar-4_4/galette-test-output/vsum-output.xmi rename to knarr-runtime/galette-output-automatic-4/galette-test-output/vsum-output.xmi index 4d34ec1..a5201c9 100644 --- a/knarr-runtime/galette-output-multivar-4_4/galette-test-output/vsum-output.xmi +++ b/knarr-runtime/galette-output-automatic-4/galette-test-output/vsum-output.xmi @@ -1,8 +1,7 @@ - - + diff --git a/knarr-runtime/galette-output-multivar-0_4/test_project.marker_vitruv b/knarr-runtime/galette-output-automatic-4/test_project.marker_vitruv similarity index 100% rename from knarr-runtime/galette-output-multivar-0_4/test_project.marker_vitruv rename to knarr-runtime/galette-output-automatic-4/test_project.marker_vitruv diff --git a/knarr-runtime/galette-output-multivar-4_4/vsum/correspondences.correspondence b/knarr-runtime/galette-output-automatic-4/vsum/correspondences.correspondence similarity index 88% rename from knarr-runtime/galette-output-multivar-4_4/vsum/correspondences.correspondence rename to knarr-runtime/galette-output-automatic-4/vsum/correspondences.correspondence index ada0437..ced40f9 100644 --- a/knarr-runtime/galette-output-multivar-4_4/vsum/correspondences.correspondence +++ b/knarr-runtime/galette-output-automatic-4/vsum/correspondences.correspondence @@ -1,7 +1,7 @@ - + diff --git a/knarr-runtime/galette-output-automatic-4/vsum/models.models b/knarr-runtime/galette-output-automatic-4/vsum/models.models new file mode 100644 index 0000000..0fff511 --- /dev/null +++ b/knarr-runtime/galette-output-automatic-4/vsum/models.models @@ -0,0 +1,2 @@ +galette-output-automatic-4/example.model +file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-4/example.model2 diff --git a/knarr-runtime/galette-output-automatic-4/vsum/uuid.uuid b/knarr-runtime/galette-output-automatic-4/vsum/uuid.uuid new file mode 100644 index 0000000..78b574c --- /dev/null +++ b/knarr-runtime/galette-output-automatic-4/vsum/uuid.uuid @@ -0,0 +1,3 @@ +ord__4shdEN0cEfCxWYMnOM82Hg|galette-output-automatic-4/example.model#/0/@tasks.0 +ord__4sK3wN0cEfCxWYMnOM82Hg|file:/home/anne/CocoPath/CocoPath/knarr-runtime/galette-output-automatic-4/example.model2#/0 +ord__4sDjAN0cEfCxWYMnOM82Hg|galette-output-automatic-4/example.model#/0 diff --git a/knarr-runtime/galette-output-multivar-0_0/example.model2 b/knarr-runtime/galette-output-multivar-0_0/example.model2 deleted file mode 100644 index a26e6db..0000000 --- a/knarr-runtime/galette-output-multivar-0_0/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_0/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-0_0/galette-test-output/vsum-output.xmi deleted file mode 100644 index dbe78ca..0000000 --- a/knarr-runtime/galette-output-multivar-0_0/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_0/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-0_0/vsum/correspondences.correspondence deleted file mode 100644 index eefb4f0..0000000 --- a/knarr-runtime/galette-output-multivar-0_0/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_0/vsum/models.models b/knarr-runtime/galette-output-multivar-0_0/vsum/models.models deleted file mode 100644 index 3c640a5..0000000 --- a/knarr-runtime/galette-output-multivar-0_0/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-0_0/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_0/example.model2 diff --git a/knarr-runtime/galette-output-multivar-0_0/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-0_0/vsum/uuid.uuid deleted file mode 100644 index c72ff2f..0000000 --- a/knarr-runtime/galette-output-multivar-0_0/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-sVWgNrDEfC349jx-qcWrA|galette-output-multivar-0_0/example.model#/0/@tasks.1 -ord__-r8U8NrDEfC349jx-qcWrA|galette-output-multivar-0_0/example.model#/0/@tasks.0 -ord__-oy6UNrDEfC349jx-qcWrA|galette-output-multivar-0_0/example.model#/0 -ord__-pgsANrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_0/example.model2#/0 -ord__-sWkoNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_0/example.model2#/0/@tasks.1 -ord__-sJJQNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_0/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-0_1/example.model2 b/knarr-runtime/galette-output-multivar-0_1/example.model2 deleted file mode 100644 index cb96a0c..0000000 --- a/knarr-runtime/galette-output-multivar-0_1/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_1/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-0_1/galette-test-output/vsum-output.xmi deleted file mode 100644 index afc6e0a..0000000 --- a/knarr-runtime/galette-output-multivar-0_1/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_1/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-0_1/vsum/correspondences.correspondence deleted file mode 100644 index 5ea9848..0000000 --- a/knarr-runtime/galette-output-multivar-0_1/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_1/vsum/models.models b/knarr-runtime/galette-output-multivar-0_1/vsum/models.models deleted file mode 100644 index 92ba3fc..0000000 --- a/knarr-runtime/galette-output-multivar-0_1/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-0_1/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_1/example.model2 diff --git a/knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid deleted file mode 100644 index e288aa7..0000000 --- a/knarr-runtime/galette-output-multivar-0_1/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-stxANrDEfC349jx-qcWrA|galette-output-multivar-0_1/example.model#/0/@tasks.0 -ord__-s3iANrDEfC349jx-qcWrA|galette-output-multivar-0_1/example.model#/0/@tasks.1 -ord__-sl1MNrDEfC349jx-qcWrA|galette-output-multivar-0_1/example.model#/0 -ord__-snDUNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_1/example.model2#/0 -ord__-suYENrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_1/example.model2#/0/@tasks.0 -ord__-s6lUNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_1/example.model2#/0/@tasks.1 diff --git a/knarr-runtime/galette-output-multivar-0_2/example.model2 b/knarr-runtime/galette-output-multivar-0_2/example.model2 deleted file mode 100644 index 46aff0b..0000000 --- a/knarr-runtime/galette-output-multivar-0_2/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_2/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-0_2/galette-test-output/vsum-output.xmi deleted file mode 100644 index 6c163cf..0000000 --- a/knarr-runtime/galette-output-multivar-0_2/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_2/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-0_2/vsum/correspondences.correspondence deleted file mode 100644 index 6ea657a..0000000 --- a/knarr-runtime/galette-output-multivar-0_2/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_2/vsum/models.models b/knarr-runtime/galette-output-multivar-0_2/vsum/models.models deleted file mode 100644 index 02167a9..0000000 --- a/knarr-runtime/galette-output-multivar-0_2/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-0_2/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_2/example.model2 diff --git a/knarr-runtime/galette-output-multivar-0_2/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-0_2/vsum/uuid.uuid deleted file mode 100644 index 66cd12a..0000000 --- a/knarr-runtime/galette-output-multivar-0_2/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-tS_0NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_2/example.model2#/0/@tasks.1 -ord__-tBTANrDEfC349jx-qcWrA|galette-output-multivar-0_2/example.model#/0 -ord__-tInwNrDEfC349jx-qcWrA|galette-output-multivar-0_2/example.model#/0/@tasks.0 -ord__-tQjkNrDEfC349jx-qcWrA|galette-output-multivar-0_2/example.model#/0/@tasks.1 -ord__-tDIMNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_2/example.model2#/0 -ord__-tJ14NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_2/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-0_3/example.model2 b/knarr-runtime/galette-output-multivar-0_3/example.model2 deleted file mode 100644 index b79fad1..0000000 --- a/knarr-runtime/galette-output-multivar-0_3/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_3/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-0_3/galette-test-output/vsum-output.xmi deleted file mode 100644 index 79dc9a8..0000000 --- a/knarr-runtime/galette-output-multivar-0_3/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_3/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-0_3/vsum/correspondences.correspondence deleted file mode 100644 index 597a612..0000000 --- a/knarr-runtime/galette-output-multivar-0_3/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_3/vsum/models.models b/knarr-runtime/galette-output-multivar-0_3/vsum/models.models deleted file mode 100644 index 3c679d8..0000000 --- a/knarr-runtime/galette-output-multivar-0_3/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-0_3/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_3/example.model2 diff --git a/knarr-runtime/galette-output-multivar-0_3/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-0_3/vsum/uuid.uuid deleted file mode 100644 index 5af83cb..0000000 --- a/knarr-runtime/galette-output-multivar-0_3/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-taUkNrDEfC349jx-qcWrA|galette-output-multivar-0_3/example.model#/0 -ord__-tbisNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_3/example.model2#/0 -ord__-tqzQNrDEfC349jx-qcWrA|galette-output-multivar-0_3/example.model#/0/@tasks.1 -ord__-tjegNrDEfC349jx-qcWrA|galette-output-multivar-0_3/example.model#/0/@tasks.0 -ord__-tksoNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_3/example.model2#/0/@tasks.0 -ord__-ttPgNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_3/example.model2#/0/@tasks.1 diff --git a/knarr-runtime/galette-output-multivar-0_4/example.model b/knarr-runtime/galette-output-multivar-0_4/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-0_4/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-0_4/example.model2 b/knarr-runtime/galette-output-multivar-0_4/example.model2 deleted file mode 100644 index 1e85a33..0000000 --- a/knarr-runtime/galette-output-multivar-0_4/example.model2 +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/knarr-runtime/galette-output-multivar-0_4/vsum/models.models b/knarr-runtime/galette-output-multivar-0_4/vsum/models.models deleted file mode 100644 index 76bc38b..0000000 --- a/knarr-runtime/galette-output-multivar-0_4/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-0_4/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_4/example.model2 diff --git a/knarr-runtime/galette-output-multivar-0_4/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-0_4/vsum/uuid.uuid deleted file mode 100644 index db8a046..0000000 --- a/knarr-runtime/galette-output-multivar-0_4/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-t-VQNrDEfC349jx-qcWrA|galette-output-multivar-0_4/example.model#/0/@tasks.0 -ord__-uFqANrDEfC349jx-qcWrA|galette-output-multivar-0_4/example.model#/0/@tasks.1 -ord__-t2ZcNrDEfC349jx-qcWrA|galette-output-multivar-0_4/example.model#/0 -ord__-uAKcNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_4/example.model2#/0/@tasks.0 -ord__-t3nkNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-0_4/example.model2#/0 diff --git a/knarr-runtime/galette-output-multivar-1_0/example.model b/knarr-runtime/galette-output-multivar-1_0/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-1_0/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_0/example.model2 b/knarr-runtime/galette-output-multivar-1_0/example.model2 deleted file mode 100644 index 544709e..0000000 --- a/knarr-runtime/galette-output-multivar-1_0/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_0/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-1_0/galette-test-output/vsum-output.xmi deleted file mode 100644 index 1684be9..0000000 --- a/knarr-runtime/galette-output-multivar-1_0/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_0/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-1_0/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-1_0/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-1_0/vsum/correspondences.correspondence deleted file mode 100644 index 5b877b8..0000000 --- a/knarr-runtime/galette-output-multivar-1_0/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_0/vsum/models.models b/knarr-runtime/galette-output-multivar-1_0/vsum/models.models deleted file mode 100644 index c8043f7..0000000 --- a/knarr-runtime/galette-output-multivar-1_0/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-1_0/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_0/example.model2 diff --git a/knarr-runtime/galette-output-multivar-1_0/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-1_0/vsum/uuid.uuid deleted file mode 100644 index ea25168..0000000 --- a/knarr-runtime/galette-output-multivar-1_0/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-uOM4NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_0/example.model2#/0 -ord__-ucPUNrDEfC349jx-qcWrA|galette-output-multivar-1_0/example.model#/0/@tasks.1 -ord__-uc2YNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_0/example.model2#/0/@tasks.1 -ord__-uVhoNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_0/example.model2#/0/@tasks.0 -ord__-uNl0NrDEfC349jx-qcWrA|galette-output-multivar-1_0/example.model#/0 -ord__-uUTgNrDEfC349jx-qcWrA|galette-output-multivar-1_0/example.model#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-1_1/example.model b/knarr-runtime/galette-output-multivar-1_1/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-1_1/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_1/example.model2 b/knarr-runtime/galette-output-multivar-1_1/example.model2 deleted file mode 100644 index f997d19..0000000 --- a/knarr-runtime/galette-output-multivar-1_1/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_1/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-1_1/galette-test-output/vsum-output.xmi deleted file mode 100644 index b903185..0000000 --- a/knarr-runtime/galette-output-multivar-1_1/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_1/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-1_1/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-1_1/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-1_1/vsum/correspondences.correspondence deleted file mode 100644 index 4e543bc..0000000 --- a/knarr-runtime/galette-output-multivar-1_1/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_1/vsum/models.models b/knarr-runtime/galette-output-multivar-1_1/vsum/models.models deleted file mode 100644 index 99e475e..0000000 --- a/knarr-runtime/galette-output-multivar-1_1/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-1_1/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_1/example.model2 diff --git a/knarr-runtime/galette-output-multivar-1_1/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-1_1/vsum/uuid.uuid deleted file mode 100644 index e7f3864..0000000 --- a/knarr-runtime/galette-output-multivar-1_1/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-ukLINrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_1/example.model2#/0 -ord__-uqRwNrDEfC349jx-qcWrA|galette-output-multivar-1_1/example.model#/0/@tasks.0 -ord__-uwYYNrDEfC349jx-qcWrA|galette-output-multivar-1_1/example.model#/0/@tasks.1 -ord__-ui9ANrDEfC349jx-qcWrA|galette-output-multivar-1_1/example.model#/0 -ord__-uxmgNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_1/example.model2#/0/@tasks.1 -ord__-uq40NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_1/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-1_2/example.model b/knarr-runtime/galette-output-multivar-1_2/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-1_2/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_2/example.model2 b/knarr-runtime/galette-output-multivar-1_2/example.model2 deleted file mode 100644 index 741d2cc..0000000 --- a/knarr-runtime/galette-output-multivar-1_2/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_2/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-1_2/galette-test-output/vsum-output.xmi deleted file mode 100644 index 0ff774f..0000000 --- a/knarr-runtime/galette-output-multivar-1_2/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_2/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-1_2/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-1_2/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-1_2/vsum/correspondences.correspondence deleted file mode 100644 index 907730b..0000000 --- a/knarr-runtime/galette-output-multivar-1_2/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_2/vsum/models.models b/knarr-runtime/galette-output-multivar-1_2/vsum/models.models deleted file mode 100644 index cc5fdc3..0000000 --- a/knarr-runtime/galette-output-multivar-1_2/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-1_2/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_2/example.model2 diff --git a/knarr-runtime/galette-output-multivar-1_2/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-1_2/vsum/uuid.uuid deleted file mode 100644 index 71321f9..0000000 --- a/knarr-runtime/galette-output-multivar-1_2/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-vIL0NrDEfC349jx-qcWrA|galette-output-multivar-1_2/example.model#/0/@tasks.1 -ord__-vJZ8NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_2/example.model2#/0/@tasks.1 -ord__-u6JYNrDEfC349jx-qcWrA|galette-output-multivar-1_2/example.model#/0 -ord__-vA3ENrDEfC349jx-qcWrA|galette-output-multivar-1_2/example.model#/0/@tasks.0 -ord__-u7XgNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_2/example.model2#/0 -ord__-vCFMNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_2/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-1_3/example.model b/knarr-runtime/galette-output-multivar-1_3/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-1_3/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_3/example.model2 b/knarr-runtime/galette-output-multivar-1_3/example.model2 deleted file mode 100644 index 4e10910..0000000 --- a/knarr-runtime/galette-output-multivar-1_3/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_3/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-1_3/galette-test-output/vsum-output.xmi deleted file mode 100644 index 63d9b25..0000000 --- a/knarr-runtime/galette-output-multivar-1_3/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_3/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-1_3/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-1_3/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-1_3/vsum/correspondences.correspondence deleted file mode 100644 index 8764abe..0000000 --- a/knarr-runtime/galette-output-multivar-1_3/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_3/vsum/models.models b/knarr-runtime/galette-output-multivar-1_3/vsum/models.models deleted file mode 100644 index 766987f..0000000 --- a/knarr-runtime/galette-output-multivar-1_3/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-1_3/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_3/example.model2 diff --git a/knarr-runtime/galette-output-multivar-1_3/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-1_3/vsum/uuid.uuid deleted file mode 100644 index f88d156..0000000 --- a/knarr-runtime/galette-output-multivar-1_3/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-vRVwNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_3/example.model2#/0 -ord__-vQHoNrDEfC349jx-qcWrA|galette-output-multivar-1_3/example.model#/0 -ord__-vW1UNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_3/example.model2#/0/@tasks.0 -ord__-vWOQNrDEfC349jx-qcWrA|galette-output-multivar-1_3/example.model#/0/@tasks.0 -ord__-vc78NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_3/example.model2#/0/@tasks.1 -ord__-vcU4NrDEfC349jx-qcWrA|galette-output-multivar-1_3/example.model#/0/@tasks.1 diff --git a/knarr-runtime/galette-output-multivar-1_4/example.model b/knarr-runtime/galette-output-multivar-1_4/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-1_4/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_4/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-1_4/galette-test-output/vsum-output.xmi deleted file mode 100644 index bc9f8dd..0000000 --- a/knarr-runtime/galette-output-multivar-1_4/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-1_4/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-1_4/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-1_4/vsum/models.models b/knarr-runtime/galette-output-multivar-1_4/vsum/models.models deleted file mode 100644 index 473c576..0000000 --- a/knarr-runtime/galette-output-multivar-1_4/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-1_4/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_4/example.model2 diff --git a/knarr-runtime/galette-output-multivar-1_4/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-1_4/vsum/uuid.uuid deleted file mode 100644 index fc958c9..0000000 --- a/knarr-runtime/galette-output-multivar-1_4/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-vpJMNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_4/example.model2#/0/@tasks.0 -ord__-vuowNrDEfC349jx-qcWrA|galette-output-multivar-1_4/example.model#/0/@tasks.1 -ord__-voiINrDEfC349jx-qcWrA|galette-output-multivar-1_4/example.model#/0/@tasks.0 -ord__-vjpoNrDEfC349jx-qcWrA|galette-output-multivar-1_4/example.model#/0 -ord__-vk3wNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-1_4/example.model2#/0 diff --git a/knarr-runtime/galette-output-multivar-2_0/example.model b/knarr-runtime/galette-output-multivar-2_0/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-2_0/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_0/example.model2 b/knarr-runtime/galette-output-multivar-2_0/example.model2 deleted file mode 100644 index 14ee646..0000000 --- a/knarr-runtime/galette-output-multivar-2_0/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_0/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-2_0/galette-test-output/vsum-output.xmi deleted file mode 100644 index e8df8de..0000000 --- a/knarr-runtime/galette-output-multivar-2_0/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_0/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-2_0/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-2_0/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-2_0/vsum/correspondences.correspondence deleted file mode 100644 index 7f0950a..0000000 --- a/knarr-runtime/galette-output-multivar-2_0/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_0/vsum/models.models b/knarr-runtime/galette-output-multivar-2_0/vsum/models.models deleted file mode 100644 index 6c42c5f..0000000 --- a/knarr-runtime/galette-output-multivar-2_0/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-2_0/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_0/example.model2 diff --git a/knarr-runtime/galette-output-multivar-2_0/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-2_0/vsum/uuid.uuid deleted file mode 100644 index d7b7190..0000000 --- a/knarr-runtime/galette-output-multivar-2_0/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-wD_8NrDEfC349jx-qcWrA|galette-output-multivar-2_0/example.model#/0/@tasks.1 -ord__-wEnANrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_0/example.model2#/0/@tasks.1 -ord__-v19gNrDEfC349jx-qcWrA|galette-output-multivar-2_0/example.model#/0 -ord__-v3ysNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_0/example.model2#/0 -ord__-v9SQNrDEfC349jx-qcWrA|galette-output-multivar-2_0/example.model#/0/@tasks.0 -ord__-v95UNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_0/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-2_1/example.model b/knarr-runtime/galette-output-multivar-2_1/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-2_1/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_1/example.model2 b/knarr-runtime/galette-output-multivar-2_1/example.model2 deleted file mode 100644 index 36896b9..0000000 --- a/knarr-runtime/galette-output-multivar-2_1/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_1/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-2_1/galette-test-output/vsum-output.xmi deleted file mode 100644 index 0601e3c..0000000 --- a/knarr-runtime/galette-output-multivar-2_1/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_1/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-2_1/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-2_1/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-2_1/vsum/correspondences.correspondence deleted file mode 100644 index 4ef9ec9..0000000 --- a/knarr-runtime/galette-output-multivar-2_1/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_1/vsum/models.models b/knarr-runtime/galette-output-multivar-2_1/vsum/models.models deleted file mode 100644 index 946f5d7..0000000 --- a/knarr-runtime/galette-output-multivar-2_1/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-2_1/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_1/example.model2 diff --git a/knarr-runtime/galette-output-multivar-2_1/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-2_1/vsum/uuid.uuid deleted file mode 100644 index d419a25..0000000 --- a/knarr-runtime/galette-output-multivar-2_1/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-wMi0NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_1/example.model2#/0 -ord__-wSCYNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_1/example.model2#/0/@tasks.0 -ord__-wYwENrDEfC349jx-qcWrA|galette-output-multivar-2_1/example.model#/0/@tasks.1 -ord__-wZ-MNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_1/example.model2#/0/@tasks.1 -ord__-wRbUNrDEfC349jx-qcWrA|galette-output-multivar-2_1/example.model#/0/@tasks.0 -ord__-wLUsNrDEfC349jx-qcWrA|galette-output-multivar-2_1/example.model#/0 diff --git a/knarr-runtime/galette-output-multivar-2_2/example.model b/knarr-runtime/galette-output-multivar-2_2/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-2_2/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_2/example.model2 b/knarr-runtime/galette-output-multivar-2_2/example.model2 deleted file mode 100644 index b63f378..0000000 --- a/knarr-runtime/galette-output-multivar-2_2/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_2/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-2_2/galette-test-output/vsum-output.xmi deleted file mode 100644 index 32ec1a2..0000000 --- a/knarr-runtime/galette-output-multivar-2_2/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_2/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-2_2/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-2_2/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-2_2/vsum/correspondences.correspondence deleted file mode 100644 index 272e538..0000000 --- a/knarr-runtime/galette-output-multivar-2_2/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_2/vsum/models.models b/knarr-runtime/galette-output-multivar-2_2/vsum/models.models deleted file mode 100644 index e95c0d1..0000000 --- a/knarr-runtime/galette-output-multivar-2_2/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-2_2/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_2/example.model2 diff --git a/knarr-runtime/galette-output-multivar-2_2/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-2_2/vsum/uuid.uuid deleted file mode 100644 index c7c3f00..0000000 --- a/knarr-runtime/galette-output-multivar-2_2/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-wuuUNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_2/example.model2#/0/@tasks.1 -ord__-wh6ANrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_2/example.model2#/0 -ord__-woAoNrDEfC349jx-qcWrA|galette-output-multivar-2_2/example.model#/0/@tasks.0 -ord__-wonsNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_2/example.model2#/0/@tasks.0 -ord__-wgr4NrDEfC349jx-qcWrA|galette-output-multivar-2_2/example.model#/0 -ord__-wuHQNrDEfC349jx-qcWrA|galette-output-multivar-2_2/example.model#/0/@tasks.1 diff --git a/knarr-runtime/galette-output-multivar-2_3/example.model b/knarr-runtime/galette-output-multivar-2_3/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-2_3/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_3/example.model2 b/knarr-runtime/galette-output-multivar-2_3/example.model2 deleted file mode 100644 index 2bb247b..0000000 --- a/knarr-runtime/galette-output-multivar-2_3/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_3/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-2_3/galette-test-output/vsum-output.xmi deleted file mode 100644 index 83d5382..0000000 --- a/knarr-runtime/galette-output-multivar-2_3/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_3/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-2_3/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-2_3/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-2_3/vsum/correspondences.correspondence deleted file mode 100644 index 00a1c73..0000000 --- a/knarr-runtime/galette-output-multivar-2_3/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_3/vsum/models.models b/knarr-runtime/galette-output-multivar-2_3/vsum/models.models deleted file mode 100644 index c0632de..0000000 --- a/knarr-runtime/galette-output-multivar-2_3/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-2_3/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_3/example.model2 diff --git a/knarr-runtime/galette-output-multivar-2_3/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-2_3/vsum/uuid.uuid deleted file mode 100644 index 4211fda..0000000 --- a/knarr-runtime/galette-output-multivar-2_3/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-w7iodrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_3/example.model2#/0/@tasks.0 -ord__-xBpQNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_3/example.model2#/0/@tasks.1 -ord__-w2qINrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_3/example.model2#/0 -ord__-xBCMNrDEfC349jx-qcWrA|galette-output-multivar-2_3/example.model#/0/@tasks.1 -ord__-w7ioNrDEfC349jx-qcWrA|galette-output-multivar-2_3/example.model#/0/@tasks.0 -ord__-w2DENrDEfC349jx-qcWrA|galette-output-multivar-2_3/example.model#/0 diff --git a/knarr-runtime/galette-output-multivar-2_4/example.model b/knarr-runtime/galette-output-multivar-2_4/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-2_4/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-2_4/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-2_4/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-2_4/vsum/models.models b/knarr-runtime/galette-output-multivar-2_4/vsum/models.models deleted file mode 100644 index faa04db..0000000 --- a/knarr-runtime/galette-output-multivar-2_4/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-2_4/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_4/example.model2 diff --git a/knarr-runtime/galette-output-multivar-2_4/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-2_4/vsum/uuid.uuid deleted file mode 100644 index 6e016d9..0000000 --- a/knarr-runtime/galette-output-multivar-2_4/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-xWZYNrDEfC349jx-qcWrA|galette-output-multivar-2_4/example.model#/0/@tasks.1 -ord__-xJlENrDEfC349jx-qcWrA|galette-output-multivar-2_4/example.model#/0 -ord__-xPrsNrDEfC349jx-qcWrA|galette-output-multivar-2_4/example.model#/0/@tasks.0 -ord__-xQSwNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_4/example.model2#/0/@tasks.0 -ord__-xKzMNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-2_4/example.model2#/0 diff --git a/knarr-runtime/galette-output-multivar-3_0/example.model b/knarr-runtime/galette-output-multivar-3_0/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-3_0/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_0/example.model2 b/knarr-runtime/galette-output-multivar-3_0/example.model2 deleted file mode 100644 index 3abd92a..0000000 --- a/knarr-runtime/galette-output-multivar-3_0/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_0/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-3_0/galette-test-output/vsum-output.xmi deleted file mode 100644 index 9f1e508..0000000 --- a/knarr-runtime/galette-output-multivar-3_0/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_0/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-3_0/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-3_0/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-3_0/vsum/correspondences.correspondence deleted file mode 100644 index daf8380..0000000 --- a/knarr-runtime/galette-output-multivar-3_0/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_0/vsum/models.models b/knarr-runtime/galette-output-multivar-3_0/vsum/models.models deleted file mode 100644 index a10ae55..0000000 --- a/knarr-runtime/galette-output-multivar-3_0/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-3_0/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_0/example.model2 diff --git a/knarr-runtime/galette-output-multivar-3_0/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-3_0/vsum/uuid.uuid deleted file mode 100644 index cffa1da..0000000 --- a/knarr-runtime/galette-output-multivar-3_0/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-xwCANrDEfC349jx-qcWrA|galette-output-multivar-3_0/example.model#/0/@tasks.1 -ord__-xx3MNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_0/example.model2#/0/@tasks.1 -ord__-xpUUNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_0/example.model2#/0/@tasks.0 -ord__-xe8QNrDEfC349jx-qcWrA|galette-output-multivar-3_0/example.model#/0 -ord__-xotQNrDEfC349jx-qcWrA|galette-output-multivar-3_0/example.model#/0/@tasks.0 -ord__-xgxcNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_0/example.model2#/0 diff --git a/knarr-runtime/galette-output-multivar-3_1/example.model b/knarr-runtime/galette-output-multivar-3_1/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-3_1/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_1/example.model2 b/knarr-runtime/galette-output-multivar-3_1/example.model2 deleted file mode 100644 index 69101ad..0000000 --- a/knarr-runtime/galette-output-multivar-3_1/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_1/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-3_1/galette-test-output/vsum-output.xmi deleted file mode 100644 index a33abda..0000000 --- a/knarr-runtime/galette-output-multivar-3_1/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_1/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-3_1/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-3_1/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-3_1/vsum/correspondences.correspondence deleted file mode 100644 index f8cc9be..0000000 --- a/knarr-runtime/galette-output-multivar-3_1/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_1/vsum/models.models b/knarr-runtime/galette-output-multivar-3_1/vsum/models.models deleted file mode 100644 index e71fb58..0000000 --- a/knarr-runtime/galette-output-multivar-3_1/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-3_1/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_1/example.model2 diff --git a/knarr-runtime/galette-output-multivar-3_1/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-3_1/vsum/uuid.uuid deleted file mode 100644 index 6a71bdd..0000000 --- a/knarr-runtime/galette-output-multivar-3_1/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-x390NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_1/example.model2#/0 -ord__-yAgsNrDEfC349jx-qcWrA|galette-output-multivar-3_1/example.model#/0/@tasks.1 -ord__-yBHwNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_1/example.model2#/0/@tasks.1 -ord__-x8PQNrDEfC349jx-qcWrA|galette-output-multivar-3_1/example.model#/0/@tasks.0 -ord__-x3WwNrDEfC349jx-qcWrA|galette-output-multivar-3_1/example.model#/0 -ord__-x82UNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_1/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-3_2/example.model b/knarr-runtime/galette-output-multivar-3_2/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-3_2/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_2/example.model2 b/knarr-runtime/galette-output-multivar-3_2/example.model2 deleted file mode 100644 index 45f7fb5..0000000 --- a/knarr-runtime/galette-output-multivar-3_2/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_2/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-3_2/galette-test-output/vsum-output.xmi deleted file mode 100644 index 4c47649..0000000 --- a/knarr-runtime/galette-output-multivar-3_2/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_2/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-3_2/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-3_2/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-3_2/vsum/correspondences.correspondence deleted file mode 100644 index b4154a4..0000000 --- a/knarr-runtime/galette-output-multivar-3_2/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_2/vsum/models.models b/knarr-runtime/galette-output-multivar-3_2/vsum/models.models deleted file mode 100644 index 3e4e3c1..0000000 --- a/knarr-runtime/galette-output-multivar-3_2/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-3_2/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_2/example.model2 diff --git a/knarr-runtime/galette-output-multivar-3_2/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-3_2/vsum/uuid.uuid deleted file mode 100644 index 6eb3372..0000000 --- a/knarr-runtime/galette-output-multivar-3_2/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-yMG4NrDEfC349jx-qcWrA|galette-output-multivar-3_2/example.model#/0/@tasks.0 -ord__-yQYUNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_2/example.model2#/0/@tasks.1 -ord__-yH1cNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_2/example.model2#/0 -ord__-yHOYNrDEfC349jx-qcWrA|galette-output-multivar-3_2/example.model#/0 -ord__-yPxQNrDEfC349jx-qcWrA|galette-output-multivar-3_2/example.model#/0/@tasks.1 -ord__-yMt8NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_2/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-3_3/example.model b/knarr-runtime/galette-output-multivar-3_3/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-3_3/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_3/example.model2 b/knarr-runtime/galette-output-multivar-3_3/example.model2 deleted file mode 100644 index 58e6a08..0000000 --- a/knarr-runtime/galette-output-multivar-3_3/example.model2 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_3/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-3_3/galette-test-output/vsum-output.xmi deleted file mode 100644 index 02c7444..0000000 --- a/knarr-runtime/galette-output-multivar-3_3/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_3/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-3_3/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-3_3/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-3_3/vsum/correspondences.correspondence deleted file mode 100644 index 40edc93..0000000 --- a/knarr-runtime/galette-output-multivar-3_3/vsum/correspondences.correspondence +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_3/vsum/models.models b/knarr-runtime/galette-output-multivar-3_3/vsum/models.models deleted file mode 100644 index 04400ac..0000000 --- a/knarr-runtime/galette-output-multivar-3_3/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-3_3/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_3/example.model2 diff --git a/knarr-runtime/galette-output-multivar-3_3/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-3_3/vsum/uuid.uuid deleted file mode 100644 index e175f73..0000000 --- a/knarr-runtime/galette-output-multivar-3_3/vsum/uuid.uuid +++ /dev/null @@ -1,6 +0,0 @@ -ord__-yb-gdrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_3/example.model2#/0/@tasks.0 -ord__-yheEdrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_3/example.model2#/0/@tasks.1 -ord__-yheENrDEfC349jx-qcWrA|galette-output-multivar-3_3/example.model#/0/@tasks.1 -ord__-yb-gNrDEfC349jx-qcWrA|galette-output-multivar-3_3/example.model#/0/@tasks.0 -ord__-yXGANrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_3/example.model2#/0 -ord__-yV34NrDEfC349jx-qcWrA|galette-output-multivar-3_3/example.model#/0 diff --git a/knarr-runtime/galette-output-multivar-3_4/example.model b/knarr-runtime/galette-output-multivar-3_4/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-3_4/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-3_4/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-3_4/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-3_4/vsum/models.models b/knarr-runtime/galette-output-multivar-3_4/vsum/models.models deleted file mode 100644 index 42873cc..0000000 --- a/knarr-runtime/galette-output-multivar-3_4/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-3_4/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_4/example.model2 diff --git a/knarr-runtime/galette-output-multivar-3_4/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-3_4/vsum/uuid.uuid deleted file mode 100644 index 1abd9e6..0000000 --- a/knarr-runtime/galette-output-multivar-3_4/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-ytEQNrDEfC349jx-qcWrA|galette-output-multivar-3_4/example.model#/0/@tasks.0 -ord__-yuSYNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_4/example.model2#/0/@tasks.0 -ord__-ypZ4NrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-3_4/example.model2#/0 -ord__-yoy0NrDEfC349jx-qcWrA|galette-output-multivar-3_4/example.model#/0 -ord__-yzK4NrDEfC349jx-qcWrA|galette-output-multivar-3_4/example.model#/0/@tasks.1 diff --git a/knarr-runtime/galette-output-multivar-4_0/example.model b/knarr-runtime/galette-output-multivar-4_0/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-4_0/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_0/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-4_0/galette-test-output/vsum-output.xmi deleted file mode 100644 index ad395da..0000000 --- a/knarr-runtime/galette-output-multivar-4_0/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_0/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-4_0/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-4_0/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-4_0/vsum/correspondences.correspondence deleted file mode 100644 index ca18141..0000000 --- a/knarr-runtime/galette-output-multivar-4_0/vsum/correspondences.correspondence +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_0/vsum/models.models b/knarr-runtime/galette-output-multivar-4_0/vsum/models.models deleted file mode 100644 index 005c329..0000000 --- a/knarr-runtime/galette-output-multivar-4_0/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-4_0/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_0/example.model2 diff --git a/knarr-runtime/galette-output-multivar-4_0/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-4_0/vsum/uuid.uuid deleted file mode 100644 index f3c9d4c..0000000 --- a/knarr-runtime/galette-output-multivar-4_0/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-zAmQNrDEfC349jx-qcWrA|galette-output-multivar-4_0/example.model#/0/@tasks.1 -ord__-y8U0NrDEfC349jx-qcWrA|galette-output-multivar-4_0/example.model#/0/@tasks.0 -ord__-y4DYNrDEfC349jx-qcWrA|galette-output-multivar-4_0/example.model#/0 -ord__-zBNUNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_0/example.model2#/0/@tasks.0 -ord__-y4qcNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_0/example.model2#/0 diff --git a/knarr-runtime/galette-output-multivar-4_1/example.model b/knarr-runtime/galette-output-multivar-4_1/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-4_1/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_1/example.model2 b/knarr-runtime/galette-output-multivar-4_1/example.model2 deleted file mode 100644 index ee0e6b8..0000000 --- a/knarr-runtime/galette-output-multivar-4_1/example.model2 +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/knarr-runtime/galette-output-multivar-4_1/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-4_1/galette-test-output/vsum-output.xmi deleted file mode 100644 index f690020..0000000 --- a/knarr-runtime/galette-output-multivar-4_1/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_1/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-4_1/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-4_1/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-4_1/vsum/correspondences.correspondence deleted file mode 100644 index 83c927e..0000000 --- a/knarr-runtime/galette-output-multivar-4_1/vsum/correspondences.correspondence +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_1/vsum/models.models b/knarr-runtime/galette-output-multivar-4_1/vsum/models.models deleted file mode 100644 index bbe5db8..0000000 --- a/knarr-runtime/galette-output-multivar-4_1/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-4_1/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_1/example.model2 diff --git a/knarr-runtime/galette-output-multivar-4_1/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-4_1/vsum/uuid.uuid deleted file mode 100644 index 4e5603f..0000000 --- a/knarr-runtime/galette-output-multivar-4_1/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-zIiENrDEfC349jx-qcWrA|galette-output-multivar-4_1/example.model#/0 -ord__-zWkgNrDEfC349jx-qcWrA|galette-output-multivar-4_1/example.model#/0/@tasks.1 -ord__-zXyoNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_1/example.model2#/0/@tasks.0 -ord__-zJwMNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_1/example.model2#/0 -ord__-zRsANrDEfC349jx-qcWrA|galette-output-multivar-4_1/example.model#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-4_2/example.model b/knarr-runtime/galette-output-multivar-4_2/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-4_2/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_2/example.model2 b/knarr-runtime/galette-output-multivar-4_2/example.model2 deleted file mode 100644 index 3b81843..0000000 --- a/knarr-runtime/galette-output-multivar-4_2/example.model2 +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/knarr-runtime/galette-output-multivar-4_2/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-4_2/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-4_2/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-4_2/vsum/correspondences.correspondence deleted file mode 100644 index c8926cf..0000000 --- a/knarr-runtime/galette-output-multivar-4_2/vsum/correspondences.correspondence +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_2/vsum/models.models b/knarr-runtime/galette-output-multivar-4_2/vsum/models.models deleted file mode 100644 index cc3336d..0000000 --- a/knarr-runtime/galette-output-multivar-4_2/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-4_2/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_2/example.model2 diff --git a/knarr-runtime/galette-output-multivar-4_2/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-4_2/vsum/uuid.uuid deleted file mode 100644 index 4d25ffd..0000000 --- a/knarr-runtime/galette-output-multivar-4_2/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-zd5QNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_2/example.model2#/0 -ord__-zdSMNrDEfC349jx-qcWrA|galette-output-multivar-4_2/example.model#/0 -ord__-zjY0NrDEfC349jx-qcWrA|galette-output-multivar-4_2/example.model#/0/@tasks.0 -ord__-zmcINrDEfC349jx-qcWrA|galette-output-multivar-4_2/example.model#/0/@tasks.1 -ord__-zmcIdrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_2/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-4_3/example.model b/knarr-runtime/galette-output-multivar-4_3/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-4_3/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_3/example.model2 b/knarr-runtime/galette-output-multivar-4_3/example.model2 deleted file mode 100644 index 469975c..0000000 --- a/knarr-runtime/galette-output-multivar-4_3/example.model2 +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/knarr-runtime/galette-output-multivar-4_3/galette-test-output/vsum-output.xmi b/knarr-runtime/galette-output-multivar-4_3/galette-test-output/vsum-output.xmi deleted file mode 100644 index 2c4cfe9..0000000 --- a/knarr-runtime/galette-output-multivar-4_3/galette-test-output/vsum-output.xmi +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_3/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-4_3/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-4_3/vsum/correspondences.correspondence b/knarr-runtime/galette-output-multivar-4_3/vsum/correspondences.correspondence deleted file mode 100644 index fad0bcd..0000000 --- a/knarr-runtime/galette-output-multivar-4_3/vsum/correspondences.correspondence +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_3/vsum/models.models b/knarr-runtime/galette-output-multivar-4_3/vsum/models.models deleted file mode 100644 index a821028..0000000 --- a/knarr-runtime/galette-output-multivar-4_3/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-4_3/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_3/example.model2 diff --git a/knarr-runtime/galette-output-multivar-4_3/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-4_3/vsum/uuid.uuid deleted file mode 100644 index 289885d..0000000 --- a/knarr-runtime/galette-output-multivar-4_3/vsum/uuid.uuid +++ /dev/null @@ -1,5 +0,0 @@ -ord__-zu_ANrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_3/example.model2#/0 -ord__-zyCUNrDEfC349jx-qcWrA|galette-output-multivar-4_3/example.model#/0/@tasks.0 -ord__-z1ssNrDEfC349jx-qcWrA|galette-output-multivar-4_3/example.model#/0/@tasks.1 -ord__-zuX8NrDEfC349jx-qcWrA|galette-output-multivar-4_3/example.model#/0 -ord__-z2TwNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_3/example.model2#/0/@tasks.0 diff --git a/knarr-runtime/galette-output-multivar-4_4/example.model b/knarr-runtime/galette-output-multivar-4_4/example.model deleted file mode 100644 index cfe1702..0000000 --- a/knarr-runtime/galette-output-multivar-4_4/example.model +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/knarr-runtime/galette-output-multivar-4_4/test_project.marker_vitruv b/knarr-runtime/galette-output-multivar-4_4/test_project.marker_vitruv deleted file mode 100644 index e69de29..0000000 diff --git a/knarr-runtime/galette-output-multivar-4_4/vsum/models.models b/knarr-runtime/galette-output-multivar-4_4/vsum/models.models deleted file mode 100644 index d11ea1f..0000000 --- a/knarr-runtime/galette-output-multivar-4_4/vsum/models.models +++ /dev/null @@ -1,2 +0,0 @@ -galette-output-multivar-4_4/example.model -file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_4/example.model2 diff --git a/knarr-runtime/galette-output-multivar-4_4/vsum/uuid.uuid b/knarr-runtime/galette-output-multivar-4_4/vsum/uuid.uuid deleted file mode 100644 index a37fd44..0000000 --- a/knarr-runtime/galette-output-multivar-4_4/vsum/uuid.uuid +++ /dev/null @@ -1,4 +0,0 @@ -ord__-0B58NrDEfC349jx-qcWrA|galette-output-multivar-4_4/example.model#/0/@tasks.0 -ord__-z9BcNrDEfC349jx-qcWrA|file:/C:/Users/10239/galette-vitruv/knarr-runtime/galette-output-multivar-4_4/example.model2#/0 -ord__-0FkUNrDEfC349jx-qcWrA|galette-output-multivar-4_4/example.model#/0/@tasks.1 -ord__-z8aYNrDEfC349jx-qcWrA|galette-output-multivar-4_4/example.model#/0 diff --git a/knarr-runtime/pom.xml b/knarr-runtime/pom.xml index f7febd4..9d523cb 100644 --- a/knarr-runtime/pom.xml +++ b/knarr-runtime/pom.xml @@ -1,193 +1,197 @@ - - - 4.0.0 - - edu.neu.ccs.prl.galette - galette - 1.0.0-SNAPSHOT - - knarr-runtime - - Knarr runtime components vendored for Galette integration. - Contains runtime classes for dynamic symbolic execution and constraint solving. - - - - - - edu.neu.ccs.prl.galette - galette-agent - ${project.version} - - - - - edu.gmu.swe.greensolver - green - 1.0-SNAPSHOT - - - - - org.ow2.asm - asm - - - org.ow2.asm - asm-tree - - - org.ow2.asm - asm-commons - - - org.ow2.asm - asm-util - - - - - org.junit.jupiter - junit-jupiter - test - - - - - - - edu.neu.ccs.prl.galette - amalthea-acset-vsum - ${project.version} - - - - - - - - - tools.vitruv - tools.vitruv.change.interaction - 3.1.2 - - - tools.vitruv - tools.vitruv.change.propagation - 3.1.2 - - - tools.vitruv - tools.vitruv.framework.vsum - 3.1.2 - - - - - org.eclipse.emf - org.eclipse.emf.ecore - 2.26.0 - - - org.eclipse.emf - org.eclipse.emf.ecore.xmi - 2.16.0 - - - - - ${edu.neu.ccs.prl.galette:galette-agent:jar} - ${project.build.directory}/galette/java/ - ${project.build.directory}/galette/cache - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 17 - 17 - UTF-8 - - - - -Xlint:deprecation - -Xlint:unchecked - - - - - - - edu.neu.ccs.prl.galette - galette-maven-plugin - ${project.version} - - - instrument - - instrument - - process-resources - - ${galette.java} - - ${galette.cache} - - - - - - - - - maven-dependency-plugin - - - process-resources - - properties - - - - - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.0 - - - false - - - - run-with-agent - - exec - - - java - - -javaagent:${settings.localRepository}/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar - -classpath - - ${exec.mainClass} - - - - - - - - + + + 4.0.0 + + edu.neu.ccs.prl.galette + galette + 1.0.0-SNAPSHOT + + knarr-runtime + + Knarr runtime components vendored for Galette integration. + Contains runtime classes for dynamic symbolic execution and constraint solving. + + + + + + edu.neu.ccs.prl.galette + galette-agent + ${project.version} + + + + + edu.gmu.swe.greensolver + green + 1.0-SNAPSHOT + + + + + org.ow2.asm + asm + + + org.ow2.asm + asm-tree + + + org.ow2.asm + asm-commons + + + org.ow2.asm + asm-util + + + + + org.junit.jupiter + junit-jupiter + test + + + + + + + edu.neu.ccs.prl.galette + amalthea-acset-consistency + ${project.version} + + + edu.neu.ccs.prl.galette + amalthea-acset-vsum + ${project.version} + + + + + + tools.vitruv + tools.vitruv.methodologisttemplate.vsum + 0.1.0-SNAPSHOT + + + + + tools.vitruv + tools.vitruv.change.interaction + 3.1.2 + + + tools.vitruv + tools.vitruv.change.propagation + 3.1.2 + + + tools.vitruv + tools.vitruv.framework.vsum + 3.1.2 + + + + + org.eclipse.emf + org.eclipse.emf.ecore + 2.26.0 + + + org.eclipse.emf + org.eclipse.emf.ecore.xmi + 2.16.0 + + + + + ${edu.neu.ccs.prl.galette:galette-agent:jar} + ${project.build.directory}/galette/java/ + ${project.build.directory}/galette/cache + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 17 + 17 + UTF-8 + + + + -Xlint:deprecation + -Xlint:unchecked + + + + + + + edu.neu.ccs.prl.galette + galette-maven-plugin + ${project.version} + + + instrument + + instrument + + process-resources + + ${galette.java} + + ${galette.cache} + + + + + + + + + maven-dependency-plugin + + + process-resources + + properties + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + + false + + + + run-with-agent + + exec + + + java + + -javaagent:${settings.localRepository}/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar + -classpath + + ${exec.mainClass} + + + + + + + + diff --git a/knarr-runtime/run-instrumented-with-option-flags.sh b/knarr-runtime/run-instrumented-with-option-flags.sh new file mode 100755 index 0000000..b35c0f1 --- /dev/null +++ b/knarr-runtime/run-instrumented-with-option-flags.sh @@ -0,0 +1,276 @@ +#!/bin/bash +set -euo pipefail + +# Resolve key paths +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" + +# Execution mode flags +USE_EXTERNAL=false +INTERACTIVE_MODE=true +EXTERNAL_PATH="/home/anne/CocoPath/Amalthea-acset" +SKIP_EXTERNAL_BUILD=false +COPY_ONLY=false + +usage() { + cat <<'EOF' +Usage: ./run-instrumented-copy.sh [--internal|--external] [--external-path PATH] [--skip-external-build] + +Options: + --internal, -i Use internal amalthea-acset-integration module (default) + --external, -e Use external Amalthea-acset repository + --external-path PATH Override path to external Amalthea-acset checkout + --skip-external-build, -s Skip building external Amalthea-acset (use if nothing changed) + --copy-only, -c Only copy generated files from external to internal, then exit + --help, -h Show this help message +EOF +} + +# Parse arguments +while [[ $# -gt 0 ]]; do + case $1 in + --external|-e) + USE_EXTERNAL=true + INTERACTIVE_MODE=false + shift + ;; + --internal|-i) + USE_EXTERNAL=false + INTERACTIVE_MODE=false + shift + ;; + --external-path) + if [[ $# -lt 2 ]]; then + echo "ERROR: --external-path requires a value" >&2 + exit 1 + fi + EXTERNAL_PATH="$2" + INTERACTIVE_MODE=false + shift 2 + ;; + --skip-external-build|-s) + SKIP_EXTERNAL_BUILD=true + shift + ;; + --copy-only|-c) + COPY_ONLY=true + INTERACTIVE_MODE=false + shift + ;; + --help|-h) + usage + exit 0 + ;; + *) + echo "Unknown option: $1" >&2 + usage + exit 1 + ;; + esac +done + +# Handle copy-only mode +if [[ "$COPY_ONLY" == true ]]; then + echo "Copy-only mode: Copying generated files from external to internal project..." + + # Ensure external path exists + if [[ ! -d "$EXTERNAL_PATH" ]]; then + echo "ERROR: External path does not exist: $EXTERNAL_PATH" >&2 + exit 1 + fi + + INTERNAL_PATH="${ROOT_DIR}/amalthea-acset-integration" + + # Check if generated files exist + if [[ ! -d "$EXTERNAL_PATH/consistency/target/generated-sources/reactions/mir" ]]; then + echo "ERROR: Generated reaction files not found in $EXTERNAL_PATH" >&2 + echo " Run 'mvn clean install' in $EXTERNAL_PATH first" >&2 + exit 1 + fi + + # Copy the files + if [[ -d "$INTERNAL_PATH/consistency/src/main/java/mir" ]]; then + echo "Copying reactions..." + cp -r "$EXTERNAL_PATH/consistency/target/generated-sources/reactions/mir/reactions" \ + "$INTERNAL_PATH/consistency/src/main/java/mir/" 2>/dev/null || true + + echo "Copying routines..." + cp -r "$EXTERNAL_PATH/consistency/target/generated-sources/reactions/mir/routines" \ + "$INTERNAL_PATH/consistency/src/main/java/mir/" 2>/dev/null || true + + echo "Files copied successfully!" + + # Show what was copied + echo "" + echo "Verifying symbolic execution integration in copied files:" + if grep -q "symbolicVitruviusChoice" "$INTERNAL_PATH/consistency/src/main/java/mir/routines/amalthea2ascet/CreateAscetTaskRoutine.java" 2>/dev/null; then + echo "✓ Symbolic execution calls found in CreateAscetTaskRoutine.java" + else + echo "✗ WARNING: Symbolic execution calls NOT found in CreateAscetTaskRoutine.java" + echo " The external project may need to be rebuilt with the updated reactions." + fi + else + echo "ERROR: Internal project structure not found at $INTERNAL_PATH" >&2 + exit 1 + fi + + echo "" + echo "Done! You can now run without --copy-only to execute with the updated files." + exit 0 +fi + +if [[ "$INTERACTIVE_MODE" == true ]]; then + echo "Please select execution mode:" + echo " 1) INTERNAL (uses amalthea-acset-integration module)" + echo " 2) EXTERNAL (uses external Amalthea-acset repository)" + read -rp "Enter your choice (1 or 2): " choice + + case ${choice:-} in + 1) + USE_EXTERNAL=false + echo "Selected: INTERNAL" + ;; + 2) + USE_EXTERNAL=true + echo "Selected: EXTERNAL" + ;; + *) + echo "Invalid choice. Defaulting to INTERNAL." + USE_EXTERNAL=false + ;; + esac + echo "" +fi + +# Prefer Java 17; allow override via JAVA_HOME if already set +JAVA_HOME_DEFAULT="/usr/lib/jvm/java-17-openjdk-amd64" +if [[ -z "${JAVA_HOME:-}" && -x "${JAVA_HOME_DEFAULT}/bin/java" ]]; then + export JAVA_HOME="$JAVA_HOME_DEFAULT" +fi +if [[ -n "${JAVA_HOME:-}" ]]; then + export PATH="$JAVA_HOME/bin:$PATH" +fi + +echo "Using java: $(java -version 2>&1 | head -1)" + +# Python detection for switch-dependency +pick_python() { + if command -v python.exe >/dev/null 2>&1 && python.exe --version >/dev/null 2>&1; then + echo "python.exe" + elif command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; then + echo "python3" + elif command -v python >/dev/null 2>&1 && python --version >/dev/null 2>&1; then + echo "python" + else + echo "" + fi +} + +PYTHON_CMD="$(pick_python)" +if [[ -z "$PYTHON_CMD" ]]; then + echo "ERROR: Python is required to switch dependencies" >&2 + exit 1 +fi + +# Always restore pom.xml on exit +RESTORE_POM=false +cleanup() { + if [[ "$RESTORE_POM" == true && -f "${SCRIPT_DIR}/pom.xml.bak" ]]; then + mv "${SCRIPT_DIR}/pom.xml.bak" "${SCRIPT_DIR}/pom.xml" + fi +} +trap cleanup EXIT + +if [[ "$USE_EXTERNAL" == true ]]; then + echo "Mode: EXTERNAL (full Vitruvius)" + if [[ ! -d "$EXTERNAL_PATH" ]]; then + echo "ERROR: External Amalthea-acset not found at $EXTERNAL_PATH" >&2 + exit 1 + fi + + if [[ "$SKIP_EXTERNAL_BUILD" == true ]]; then + echo "Skipping external Amalthea-acset build (--skip-external-build)" + else + echo "Building external Amalthea-acset for Vitruvius dependencies..." + (cd "$EXTERNAL_PATH" && mvn -q clean install -DskipTests -Dcheckstyle.skip=true) + echo "Done." + fi + + "$PYTHON_CMD" "${SCRIPT_DIR}/switch-dependency.py" external "${SCRIPT_DIR}/pom.xml" + RESTORE_POM=true +else + echo "Mode: INTERNAL (amalthea-acset-integration)" + + if [[ ! -d "$HOME/.m2/repository/tools/vitruv/tools.vitruv.methodologisttemplate.vsum" ]]; then + if [[ -d "$EXTERNAL_PATH" ]]; then + if [[ "$SKIP_EXTERNAL_BUILD" == true ]]; then + echo "WARNING: Vitruvius dependencies missing but --skip-external-build specified" + echo " Build may fail. Run without -s first if you get dependency errors." + else + echo "Vitruvius dependencies missing. Installing from external Amalthea-acset..." + (cd "$EXTERNAL_PATH" && mvn -q clean install -DskipTests -Dcheckstyle.skip=true) + echo "Done." + fi + else + echo "ERROR: Vitruvius dependencies missing and external path not found at $EXTERNAL_PATH" >&2 + echo " Provide --external-path or build Amalthea-acset manually." + exit 1 + fi + fi + + + "$PYTHON_CMD" "${SCRIPT_DIR}/switch-dependency.py" internal "${SCRIPT_DIR}/pom.xml" + RESTORE_POM=true +fi + +# Resolve Galette agent location +GALETTE_AGENT="" +if [[ -f "${ROOT_DIR}/galette-agent/target/galette-agent-1.0.0-SNAPSHOT.jar" ]]; then + GALETTE_AGENT="${ROOT_DIR}/galette-agent/target/galette-agent-1.0.0-SNAPSHOT.jar" +elif [[ -f "$HOME/.m2/repository/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar" ]]; then + GALETTE_AGENT="$HOME/.m2/repository/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT.jar" +else + echo "Galette agent jar not found" >&2 + exit 1 +fi + +echo "Galette agent: $GALETTE_AGENT" + +# Build knarr-runtime with instrumentation (run from root pom) +mvn -q -f "${ROOT_DIR}/pom.xml" clean install -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dskip=true -pl knarr-runtime -am +mvn -q -f "${ROOT_DIR}/pom.xml" process-test-resources -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dskip=true -pl knarr-runtime + +INSTRUMENTED_JAVA="${SCRIPT_DIR}/target/galette/java" +if [[ ! -x "$INSTRUMENTED_JAVA/bin/java" ]]; then + echo "Instrumented java not found at $INSTRUMENTED_JAVA/bin/java" >&2 + exit 1 +fi + +# Build runtime classpath +mvn -q -f "${ROOT_DIR}/pom.xml" -DincludeScope=runtime -Dmdep.outputFile="${SCRIPT_DIR}/cp.txt" -pl knarr-runtime dependency:build-classpath +if [[ ! -f "${SCRIPT_DIR}/cp.txt" ]]; then + echo "Failed to build classpath" >&2 + exit 1 +fi +CP="${SCRIPT_DIR}/target/classes:${SCRIPT_DIR}/target/test-classes:$(cat "${SCRIPT_DIR}/cp.txt")" + +echo "Classpath entries: $(echo "$CP" | tr ':' '\n' | wc -l)" + +mkdir -p target/galette/cache + +MAIN_CLASS="edu.neu.ccs.prl.galette.vitruvius.AutomaticVitruvMultiVarPathExploration" + +set -x +"$INSTRUMENTED_JAVA/bin/java" \ + -cp "$CP" \ + -Xbootclasspath/a:"$GALETTE_AGENT" \ + -javaagent:"$GALETTE_AGENT" \ + -Dgalette.cache=target/galette/cache \ + -Dgalette.coverage=true \ + -Dsymbolic.execution.debug=true \ + -Dgalette.debug=true \ + -Dpath.explorer.max.iterations=30 \ + -DDEBUG=true \ + -Dpath.explorer.debug=true \ + -Dconstraint.solver.debug=true \ + "$MAIN_CLASS" "$@" diff --git a/knarr-runtime/run-instrumented.sh b/knarr-runtime/run-instrumented.sh new file mode 100755 index 0000000..3c31f58 --- /dev/null +++ b/knarr-runtime/run-instrumented.sh @@ -0,0 +1,80 @@ +#!/bin/bash +set -euo pipefail + +# Resolve key paths +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" + +# Prefer Java 17; allow override via JAVA_HOME if already set +JAVA_HOME_DEFAULT="/usr/lib/jvm/java-17-openjdk-amd64" +if [[ -z "${JAVA_HOME:-}" && -x "${JAVA_HOME_DEFAULT}/bin/java" ]]; then + export JAVA_HOME="$JAVA_HOME_DEFAULT" +fi +if [[ -n "${JAVA_HOME:-}" ]]; then + export PATH="$JAVA_HOME/bin:$PATH" +fi + +echo "Using java: $(java -version 2>&1 | head -1)" + +# Resolve Galette agent location +GALETTE_AGENT="" +if [[ -f "${ROOT_DIR}/galette-agent/target/galette-agent-1.0.0-SNAPSHOT.jar" ]]; then + GALETTE_AGENT="${ROOT_DIR}/galette-agent/target/galette-agent-1.0.0-SNAPSHOT.jar" +elif [[ -f "$HOME/.m2/repository/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar" ]]; then + GALETTE_AGENT="$HOME/.m2/repository/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar" +else + echo "Galette agent jar not found" >&2 + exit 1 +fi + +echo "Galette agent: $GALETTE_AGENT" + +# Build external Amalthea-acset (required for Vitruvius classes) +EXTERNAL_PATH="/home/anne/CocoPath/Amalthea-acset" +if [[ -d "$EXTERNAL_PATH" ]]; then + echo "Building external Amalthea-acset for Vitruvius dependencies..." + (cd "$EXTERNAL_PATH" && mvn -q clean install -DskipTests -Dcheckstyle.skip=true) + echo "Done." +else + echo "WARNING: External Amalthea-acset not found at $EXTERNAL_PATH" + echo "Vitruvius transformations may fail without it." +fi + +# Build knarr-runtime with instrumentation (run from root pom) +mvn -q -f "${ROOT_DIR}/pom.xml" clean install -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dskip=true -pl knarr-runtime -am +mvn -q -f "${ROOT_DIR}/pom.xml" process-test-resources -Dmaven.test.skip=true -Dcheckstyle.skip=true -Dskip=true -pl knarr-runtime + +INSTRUMENTED_JAVA="${SCRIPT_DIR}/target/galette/java" +if [[ ! -x "$INSTRUMENTED_JAVA/bin/java" ]]; then + echo "Instrumented java not found at $INSTRUMENTED_JAVA/bin/java" >&2 + exit 1 +fi + +# Build runtime classpath +mvn -q -f "${ROOT_DIR}/pom.xml" -DincludeScope=runtime -Dmdep.outputFile="${SCRIPT_DIR}/cp.txt" -pl knarr-runtime dependency:build-classpath +if [[ ! -f "${SCRIPT_DIR}/cp.txt" ]]; then + echo "Failed to build classpath" >&2 + exit 1 +fi +CP="${SCRIPT_DIR}/target/classes:${SCRIPT_DIR}/target/test-classes:$(cat "${SCRIPT_DIR}/cp.txt")" + +echo "Classpath entries: $(echo "$CP" | tr ':' '\n' | wc -l)" + +mkdir -p target/galette/cache + +MAIN_CLASS="edu.neu.ccs.prl.galette.vitruvius.AutomaticVitruvMultiVarPathExploration" + +set -x +"$INSTRUMENTED_JAVA/bin/java" \ + -cp "$CP" \ + -Xbootclasspath/a:"$GALETTE_AGENT" \ + -javaagent:"$GALETTE_AGENT" \ + -Dgalette.cache=target/galette/cache \ + -Dgalette.coverage=true \ + -Dsymbolic.execution.debug=true \ + -Dgalette.debug=true \ + -Dpath.explorer.max.iterations=30 \ + -DDEBUG=true \ + -Dpath.explorer.debug=true \ + -Dconstraint.solver.debug=true \ + "$MAIN_CLASS" "$@" diff --git a/knarr-runtime/run-symbolic-execution-adapted.sh b/knarr-runtime/run-symbolic-execution-adapted.sh new file mode 100755 index 0000000..6dac1d2 --- /dev/null +++ b/knarr-runtime/run-symbolic-execution-adapted.sh @@ -0,0 +1,438 @@ +#!/bin/bash + +# ============================================================================ +# Galette-Knarr Symbolic Execution Runner +# ============================================================================ +# This script runs automatic path exploration for Vitruvius model transformations. +# It uses the PathExplorer API to automatically generate test inputs by: +# 1. Executing transformations with concrete values +# 2. Collecting path constraints +# 3. Negating constraints to find unexplored paths +# 4. Solving for new inputs automatically +# +# Usage: +# ./run-symbolic-execution.sh # Interactive mode (prompts for choice) +# ./run-symbolic-execution.sh --internal # Single-variable mode (5 paths, simplified) +# ./run-symbolic-execution.sh --external # Single-variable mode (5 paths, full Vitruvius) +# ./run-symbolic-execution.sh --multivar # Multi-variable mode (25 paths, full Vitruvius) +# ./run-symbolic-execution.sh --force-rebuild # Force rebuild of Amalthea-acset even if sources unchanged +# +# ============================================================================ +# CONFIGURATION - Modify this section for your PC +# ============================================================================ +# If using EXTERNAL or MULTIVAR mode, update EXTERNAL_PATH to point to your +# Amalthea-acset repository location. +# +# Example paths: +# Linux: EXTERNAL_PATH="/home/username/Amalthea-acset" +# macOS: EXTERNAL_PATH="/Users/username/Amalthea-acset" +# Windows: EXTERNAL_PATH="C:/Users/username/Amalthea-acset" +# WSL: EXTERNAL_PATH="/mnt/c/Users/username/Amalthea-acset" +# +# Or specify dynamically: +# ./run-symbolic-execution.sh --external --external-path /path/to/Amalthea-acset +# ============================================================================ + +set -e + +USE_EXTERNAL=false +USE_MULTIVAR=false +FORCE_REBUILD=false +EXTERNAL_PATH="/home/anne/CocoPath/Amalthea-acset" # <-- MODIFY THIS for your PC +INTERACTIVE_MODE=true + +# ============================================================================ +# JAVA VERSION CONFIGURATION +# ============================================================================ +# Set JAVA_HOME to use a specific Java version. The script requires Java 17+ +# Modify this to point to your Java 17 installation, or leave empty to use +# the system default. Common locations: +# /usr/lib/jvm/java-17-openjdk +# /usr/lib/jvm/java-17-openjdk-amd64 +# /opt/java/openjdk-17 +# $JAVA_HOME (uses system JAVA_HOME if set) +# +# If you have multiple Java versions, explicitly set it here: +JAVA_HOME_OVERRIDE="/usr/lib/jvm/java-17-openjdk-amd64" # Using Java 17 for compatibility + +# Auto-detect Java 17 if not explicitly set +if [ -z "$JAVA_HOME_OVERRIDE" ]; then + # Try to find Java 17 in common locations + for java_path in \ + "/usr/lib/jvm/java-17-openjdk-amd64" \ + "/usr/lib/jvm/java-17-openjdk" \ + "/usr/libexec/java_home -v 17" \ + "/opt/java/openjdk-17" \ + "$JAVA_HOME"; do + if [ -n "$java_path" ] && [ -x "$java_path/bin/java" ] 2>/dev/null; then + JAVA_HOME_OVERRIDE="$java_path" + break + fi + done +fi + +# Set JAVA_HOME if we found a valid path +if [ -n "$JAVA_HOME_OVERRIDE" ] && [ -x "$JAVA_HOME_OVERRIDE/bin/java" ]; then + export JAVA_HOME="$JAVA_HOME_OVERRIDE" + export PATH="$JAVA_HOME/bin:$PATH" + JAVA_VERSION=$("$JAVA_HOME/bin/java" -version 2>&1 | grep -oP 'version "\K[^"]*' || echo "unknown") + echo "Using Java: $JAVA_VERSION from $JAVA_HOME" + echo "" +else + # Use system default + JAVA_VERSION=$(java -version 2>&1 | grep -oP 'version "\K[^"]*' || echo "unknown") + echo "Using system Java: $JAVA_VERSION" + echo "" +fi + + + +# Parse arguments +while [[ $# -gt 0 ]]; do + case $1 in + --external|-e) + USE_EXTERNAL=true + INTERACTIVE_MODE=false + shift + ;; + --internal|-i) + USE_EXTERNAL=false + INTERACTIVE_MODE=false + shift + ;; + --multivar|-m) + USE_EXTERNAL=true + USE_MULTIVAR=true + INTERACTIVE_MODE=false + shift + ;; + --force-rebuild|-f) + FORCE_REBUILD=true + shift + ;; + --external-path) + EXTERNAL_PATH="$2" + shift 2 + ;; + *) + echo "Unknown option: $1" + echo "Usage: $0 [--internal|--external|--multivar] [--external-path PATH] [--force-rebuild]" + exit 1 + ;; + esac +done + +echo "================================================================================" +echo "CocoPath" +echo "================================================================================" +echo "" + +# Interactive mode selection if no flag provided +if [ "$INTERACTIVE_MODE" = true ]; then + echo "Please select execution mode:" + echo "" + echo " 1) INTERNAL MODE (Fast, simplified stub - single variable)" + echo " - Output: Basic XMI stubs" + echo " - Explores: 5 paths (one user choice)" + echo " - No external repository needed" + echo "" + echo " 2) EXTERNAL MODE (Full Vitruvius transformations - single variable)" + echo " - Output: Complete Vitruvius reactions & transformations" + echo " - Explores: 5 paths (one user choice)" + echo " - Requires external Amalthea-acset repository" + echo "" + echo " 3) MULTI-VARIABLE MODE (Full Vitruvius - TWO user choices)" + echo " - Output: Complete Vitruvius reactions & transformations" + echo " - Explores: 25 paths (5 × 5 combinations)" + echo " - Requires external Amalthea-acset repository" + echo "" + read -p "Enter your choice (1, 2, or 3): " choice + echo "" + + case $choice in + 1) + USE_EXTERNAL=false + USE_MULTIVAR=false + echo "Selected: INTERNAL MODE (single variable)" + ;; + 2) + USE_EXTERNAL=true + USE_MULTIVAR=false + echo "Selected: EXTERNAL MODE (single variable)" + ;; + 3) + USE_EXTERNAL=true + USE_MULTIVAR=true + echo "Selected: MULTI-VARIABLE MODE (two variables, 25 paths)" + ;; + *) + echo "Invalid choice. Defaulting to INTERNAL MODE." + USE_EXTERNAL=false + USE_MULTIVAR=false + ;; + esac + echo "" +fi + +echo "================================================================================" +echo "" + +# Get script directory +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" + +# Function to check if sources in a directory have been modified since last build +check_sources_changed() { + local src_dir="$1" + local target_dir="$src_dir/target" + + if [ ! -d "$target_dir" ]; then + # No target directory means it hasn't been built yet + return 0 # Sources "changed" (first build) + fi + + # Get the most recent modification time of target directory (Linux uses -c%Y) + local target_mtime=$(stat -c%Y "$target_dir" 2>/dev/null || echo 0) + + # Get the most recent modification time in src directory + local src_mtime=$(find "$src_dir/src" -type f -printf '%T@\n' 2>/dev/null | sort -rn | head -1 || echo 0) + + # Also check pom.xml + local pom_mtime=$(stat -c%Y "$src_dir/pom.xml" 2>/dev/null || echo 0) + pom_mtime=${pom_mtime:-0} + + # Get the maximum of src and pom modification times + local max_source_mtime=$src_mtime + if [ "$pom_mtime" -gt "$max_source_mtime" ]; then + max_source_mtime=$pom_mtime + fi + + # If any source is newer than target, sources have changed + if [ "$max_source_mtime" -gt "$target_mtime" ]; then + return 0 # Sources have changed + else + return 1 # Sources have NOT changed + fi +} + +if [ "$USE_EXTERNAL" = true ]; then + echo "Mode: EXTERNAL (switching to external Amalthea-acset)" + echo "" + + # Verify external path exists + if [ ! -d "$EXTERNAL_PATH" ]; then + echo "ERROR: External Amalthea-acset not found at: $EXTERNAL_PATH" + echo "Please check the path" + exit 1 + fi + + # Clean Maven repository to avoid stale JAR issues + echo " Cleaning Maven repository cache..." + rm -rf "$HOME/.m2/repository/tools/vitruv/tools.vitruv.methodologisttemplate.consistency/0.1.0-SNAPSHOT/" 2>/dev/null || true + echo " Removed cached external consistency JAR" + + # Check if rebuild is needed + if [ "$FORCE_REBUILD" = true ]; then + echo "[1/4] Building external Amalthea-acset (--force-rebuild flag set)..." + (cd "$EXTERNAL_PATH" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + elif check_sources_changed "$EXTERNAL_PATH"; then + echo "[1/4] Building external Amalthea-acset (sources have changed)..." + (cd "$EXTERNAL_PATH" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + else + echo "[1/4] Skipping external Amalthea-acset build (sources unchanged)..." + fi + echo " Done." + echo "" + + echo "[2/4] Temporarily switching to external dependency..." + # Use Python script to safely switch dependencies + # Test each Python command to ensure it actually works (not just a stub) + PYTHON_CMD="" + if command -v python.exe &> /dev/null && python.exe --version &> /dev/null; then + PYTHON_CMD="python.exe" + elif command -v python3 &> /dev/null && python3 --version &> /dev/null; then + PYTHON_CMD="python3" + elif command -v python &> /dev/null && python --version &> /dev/null; then + PYTHON_CMD="python" + else + echo "ERROR: Python not found. Cannot switch dependencies." + exit 1 + fi + + $PYTHON_CMD switch-dependency.py external pom.xml + if [ $? -ne 0 ]; then + echo "ERROR: Failed to switch to external dependency" + exit 1 + fi + echo " Switched to external dependency." + echo "" + + STEP_OFFSET=2 +else + echo "Mode: INTERNAL (using amalthea-acset-integration module)" + echo " Note: Requires external Amalthea-acset built once for Vitruvius dependencies" + echo "" + + # Clean Maven repository to avoid stale JAR issues + echo " Cleaning Maven repository cache..." + rm -rf "$HOME/.m2/repository/edu/neu/ccs/prl/galette/amalthea-acset-consistency/1.0.0-SNAPSHOT/" 2>/dev/null || true + echo " Removed cached internal consistency JAR" + echo "" + + # Check if Vitruvius dependencies are available + if [ ! -d "$HOME/.m2/repository/tools/vitruv/tools.vitruv.methodologisttemplate.vsum" ]; then + echo "WARNING: Vitruvius VSUM dependency not found in Maven repository" + echo " Building external Amalthea-acset to install it..." + echo "" + + if [ -d "$EXTERNAL_PATH" ]; then + (cd "$EXTERNAL_PATH" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + if [ $? -ne 0 ]; then + echo "ERROR: Failed to build external Amalthea-acset" + exit 1 + fi + echo " Done. Vitruvius dependencies installed." + echo "" + else + echo "ERROR: External Amalthea-acset not found at: $EXTERNAL_PATH" + echo " Please build it first or specify path with --external-path" + exit 1 + fi + fi + + echo "[1/4] Switching to internal dependency..." + # Use Python script to safely switch dependencies + # Test each Python command to ensure it actually works (not just a stub) + PYTHON_CMD="" + if command -v python.exe &> /dev/null && python.exe --version &> /dev/null; then + PYTHON_CMD="python.exe" + elif command -v python3 &> /dev/null && python3 --version &> /dev/null; then + PYTHON_CMD="python3" + elif command -v python &> /dev/null && python --version &> /dev/null; then + PYTHON_CMD="python" + else + echo "ERROR: Python not found. Cannot switch dependencies." + exit 1 + fi + + $PYTHON_CMD switch-dependency.py internal pom.xml + if [ $? -ne 0 ]; then + echo "ERROR: Failed to switch to internal dependency" + exit 1 + fi + echo " Switched to internal dependency." + echo "" + + # Check if rebuild is needed for internal module + INTERNAL_DIR="$(dirname "$SCRIPT_DIR")/amalthea-acset-integration" + if [ "$FORCE_REBUILD" = true ]; then + echo "[2/4] Building internal amalthea-acset-integration (--force-rebuild flag set)..." + (cd "$INTERNAL_DIR" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + elif check_sources_changed "$INTERNAL_DIR"; then + echo "[2/4] Building internal amalthea-acset-integration (sources have changed)..." + (cd "$INTERNAL_DIR" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + else + echo "[2/4] Skipping internal amalthea-acset-integration build (sources unchanged)..." + fi + echo " Done." + echo "" + + STEP_OFFSET=2 +fi + +STEP1=$((3 + STEP_OFFSET)) +STEP2=$((4 + STEP_OFFSET)) +TOTAL_STEPS=$((4 + STEP_OFFSET)) + +echo "[$STEP1/$TOTAL_STEPS] Cleaning previous outputs..." +rm -rf galette-output-* execution_paths.json 2>/dev/null || true +echo " Done." +echo "" + +echo "[$STEP2/$TOTAL_STEPS] Running symbolic execution..." +echo " With semi-automatic constraint collection in reaction" + +# Determine which main class to use +if [ "$USE_MULTIVAR" = true ]; then + MAIN_CLASS="edu.neu.ccs.prl.galette.vitruvius.AutomaticVitruvMultiVarPathExploration" + echo " Main class: AutomaticVitruvMultiVarPathExploration (multi-variable)" +else + MAIN_CLASS="edu.neu.ccs.prl.galette.vitruvius.AutomaticVitruvPathExploration" + echo " Main class: AutomaticVitruvPathExploration (single-variable)" +fi + +# Build the project first to ensure everything is compiled +echo " Building project..." +mvn compile -U -Dcheckstyle.skip=true -q + +# Check if instrumented Java is available +INSTRUMENTED_JAVA="target/galette/java" +if [ ! -x "$INSTRUMENTED_JAVA/bin/java" ]; then + echo "ERROR: Instrumented Java not found. Building it now..." + mvn process-test-resources -U -Dcheckstyle.skip=true -q +fi + +# Resolve Galette agent +GALETTE_AGENT="" +if [ -f "../galette-agent/target/galette-agent-1.0.0-SNAPSHOT.jar" ]; then + GALETTE_AGENT="../galette-agent/target/galette-agent-1.0.0-SNAPSHOT.jar" +elif [ -f "$HOME/.m2/repository/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar" ]; then + GALETTE_AGENT="$HOME/.m2/repository/edu/neu/ccs/prl/galette/galette-agent/1.0.0-SNAPSHOT/galette-agent-1.0.0-SNAPSHOT.jar" +else + echo "ERROR: Galette agent jar not found" + exit 1 +fi + +# Build classpath +mvn -q -DincludeScope=runtime -Dmdep.outputFile=cp.txt dependency:build-classpath +CP="target/classes:target/test-classes:$(cat cp.txt)" + +echo " Using instrumented JVM with Galette agent" +set +e +"$INSTRUMENTED_JAVA/bin/java" \ + -cp "$CP" \ + -Xbootclasspath/a:"$GALETTE_AGENT" \ + -javaagent:"$GALETTE_AGENT" \ + -Dgalette.cache=target/galette/cache \ + -Dpath.explorer.max.iterations=30 \ + "$MAIN_CLASS" +MVN_EXIT=$? +set -e + +if [ $MVN_EXIT -ne 0 ]; then + echo "" + echo "WARNING: Maven execution had errors" +fi + +# Restore pom.xml from backup +if [ -f "pom.xml.bak" ]; then + echo "" + echo "Restoring pom.xml from backup..." + mv pom.xml.bak pom.xml 2>/dev/null || true + echo " Done." +fi + +if [ ! -f "execution_paths_automatic.json" ]; then + if [ $MVN_EXIT -ne 0 ]; then + echo "" + echo "ERROR: Symbolic execution failed!" + exit 1 + fi +fi + +echo "" +echo "================================================================================" +echo "Completed." +echo "================================================================================" +echo "" +if [ "$USE_MULTIVAR" = true ]; then + echo "Generated files:" + echo " - execution_paths_multivar.json (Path exploration results)" + echo " - galette-output-multivar-*/ (Model outputs per path combination)" + echo "" +else + echo "Generated files:" + echo " - execution_paths_automatic.json (Path exploration results)" + echo " - galette-output-automatic-*/ (Model outputs per path)" + echo "" +fi diff --git a/knarr-runtime/run-symbolic-execution.sh b/knarr-runtime/run-symbolic-execution.sh old mode 100644 new mode 100755 index 2922c82..acebba9 --- a/knarr-runtime/run-symbolic-execution.sh +++ b/knarr-runtime/run-symbolic-execution.sh @@ -15,6 +15,7 @@ # ./run-symbolic-execution.sh --internal # Single-variable mode (5 paths, simplified) # ./run-symbolic-execution.sh --external # Single-variable mode (5 paths, full Vitruvius) # ./run-symbolic-execution.sh --multivar # Multi-variable mode (25 paths, full Vitruvius) +# ./run-symbolic-execution.sh --force-rebuild # Force rebuild of Amalthea-acset even if sources unchanged # # ============================================================================ # CONFIGURATION - Modify this section for your PC @@ -36,9 +37,56 @@ set -e USE_EXTERNAL=false USE_MULTIVAR=false -EXTERNAL_PATH="C:/Users/10239/Amathea-acset" # <-- MODIFY THIS for your PC +FORCE_REBUILD=false +EXTERNAL_PATH="/home/anne/CocoPath/Amalthea-acset" # <-- MODIFY THIS for your PC INTERACTIVE_MODE=true +# ============================================================================ +# JAVA VERSION CONFIGURATION +# ============================================================================ +# Set JAVA_HOME to use a specific Java version. The script requires Java 17+ +# Modify this to point to your Java 17 installation, or leave empty to use +# the system default. Common locations: +# /usr/lib/jvm/java-17-openjdk +# /usr/lib/jvm/java-17-openjdk-amd64 +# /opt/java/openjdk-17 +# $JAVA_HOME (uses system JAVA_HOME if set) +# +# If you have multiple Java versions, explicitly set it here: +JAVA_HOME_OVERRIDE="" # <-- Set to Java 17 path if needed + +# Auto-detect Java 17 if not explicitly set +if [ -z "$JAVA_HOME_OVERRIDE" ]; then + # Try to find Java 17 in common locations + for java_path in \ + "/usr/lib/jvm/java-17-openjdk-amd64" \ + "/usr/lib/jvm/java-17-openjdk" \ + "/usr/libexec/java_home -v 17" \ + "/opt/java/openjdk-17" \ + "$JAVA_HOME"; do + if [ -n "$java_path" ] && [ -x "$java_path/bin/java" ] 2>/dev/null; then + JAVA_HOME_OVERRIDE="$java_path" + break + fi + done +fi + +# Set JAVA_HOME if we found a valid path +if [ -n "$JAVA_HOME_OVERRIDE" ] && [ -x "$JAVA_HOME_OVERRIDE/bin/java" ]; then + export JAVA_HOME="$JAVA_HOME_OVERRIDE" + export PATH="$JAVA_HOME/bin:$PATH" + JAVA_VERSION=$("$JAVA_HOME/bin/java" -version 2>&1 | grep -oP 'version "\K[^"]*' || echo "unknown") + echo "Using Java: $JAVA_VERSION from $JAVA_HOME" + echo "" +else + # Use system default + JAVA_VERSION=$(java -version 2>&1 | grep -oP 'version "\K[^"]*' || echo "unknown") + echo "Using system Java: $JAVA_VERSION" + echo "" +fi + + + # Parse arguments while [[ $# -gt 0 ]]; do case $1 in @@ -58,13 +106,17 @@ while [[ $# -gt 0 ]]; do INTERACTIVE_MODE=false shift ;; + --force-rebuild|-f) + FORCE_REBUILD=true + shift + ;; --external-path) EXTERNAL_PATH="$2" shift 2 ;; *) echo "Unknown option: $1" - echo "Usage: $0 [--internal|--external|--multivar] [--external-path PATH]" + echo "Usage: $0 [--internal|--external|--multivar] [--external-path PATH] [--force-rebuild]" exit 1 ;; esac @@ -129,6 +181,40 @@ echo "" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" +# Function to check if sources in a directory have been modified since last build +check_sources_changed() { + local src_dir="$1" + local target_dir="$src_dir/target" + + if [ ! -d "$target_dir" ]; then + # No target directory means it hasn't been built yet + return 0 # Sources "changed" (first build) + fi + + # Get the most recent modification time of target directory + local target_mtime=$(stat -f%m "$target_dir" 2>/dev/null || stat -c%Y "$target_dir" 2>/dev/null || echo 0) + + # Get the most recent modification time in src directory + local src_mtime=$(find "$src_dir/src" -type f 2>/dev/null -printf '%T@\n' | sort -rn | head -1 || echo 0) + + # Also check pom.xml + local pom_mtime=$(stat -f%m "$src_dir/pom.xml" 2>/dev/null || stat -c%Y "$src_dir/pom.xml" 2>/dev/null || echo 0) + pom_mtime=${pom_mtime:-0} + + # Get the maximum of src and pom modification times + local max_source_mtime=$src_mtime + if [ "$pom_mtime" -gt "$max_source_mtime" ]; then + max_source_mtime=$pom_mtime + fi + + # If any source is newer than target, sources have changed + if [ "$max_source_mtime" -gt "$target_mtime" ]; then + return 0 # Sources have changed + else + return 1 # Sources have NOT changed + fi +} + if [ "$USE_EXTERNAL" = true ]; then echo "Mode: EXTERNAL (switching to external Amalthea-acset)" echo "" @@ -140,8 +226,16 @@ if [ "$USE_EXTERNAL" = true ]; then exit 1 fi - echo "[1/4] Building external Amalthea-acset at $EXTERNAL_PATH..." - (cd "$EXTERNAL_PATH" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + # Check if rebuild is needed + if [ "$FORCE_REBUILD" = true ]; then + echo "[1/4] Building external Amalthea-acset (--force-rebuild flag set)..." + (cd "$EXTERNAL_PATH" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + elif check_sources_changed "$EXTERNAL_PATH"; then + echo "[1/4] Building external Amalthea-acset (sources have changed)..." + (cd "$EXTERNAL_PATH" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + else + echo "[1/4] Skipping external Amalthea-acset build (sources unchanged)..." + fi echo " Done." echo "" @@ -218,8 +312,17 @@ else echo " Switched to internal dependency." echo "" - echo "[2/4] Building internal amalthea-acset-integration..." - (cd "$(dirname "$SCRIPT_DIR")/amalthea-acset-integration" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + # Check if rebuild is needed for internal module + INTERNAL_DIR="$(dirname "$SCRIPT_DIR")/amalthea-acset-integration" + if [ "$FORCE_REBUILD" = true ]; then + echo "[2/4] Building internal amalthea-acset-integration (--force-rebuild flag set)..." + (cd "$INTERNAL_DIR" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + elif check_sources_changed "$INTERNAL_DIR"; then + echo "[2/4] Building internal amalthea-acset-integration (sources have changed)..." + (cd "$INTERNAL_DIR" && mvn clean install -DskipTests -Dcheckstyle.skip=true) + else + echo "[2/4] Skipping internal amalthea-acset-integration build (sources unchanged)..." + fi echo " Done." echo "" diff --git a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/GaletteSymbolicator.java b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/GaletteSymbolicator.java index 9d269c5..a56c48e 100644 --- a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/GaletteSymbolicator.java +++ b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/GaletteSymbolicator.java @@ -2,6 +2,7 @@ import edu.neu.ccs.prl.galette.concolic.knarr.green.GaletteGreenBridge; import edu.neu.ccs.prl.galette.internal.runtime.Tag; +import edu.neu.ccs.prl.galette.internal.runtime.Tainter; import java.io.*; import java.net.Socket; import java.net.UnknownHostException; @@ -43,7 +44,7 @@ public class GaletteSymbolicator { /** * Debug flag. */ - public static final boolean DEBUG = Boolean.valueOf(System.getProperty("DEBUG", "false")); + public static final boolean DEBUG = true; // Boolean.valueOf(System.getProperty("DEBUG", "false")); /** * Internal class name for bytecode instrumentation. @@ -65,6 +66,18 @@ public class GaletteSymbolicator { */ private static final ConcurrentHashMap tagToExpression = new ConcurrentHashMap<>(); + /** + * Map from qualified labels to tags for reuse across iterations. + * This enables the same symbolic variable to be used across different path explorations. + * Format: ClassName:MethodName:variableName + * + * ASSUMPTIONS: + * 1. No nested blocks with same variable names within a method + * 2. Each UserInteraction called at most once per path iteration + * 3. Qualified names uniquely identify symbolic input points + */ + private static final ConcurrentHashMap labelToTag = new ConcurrentHashMap<>(); + static { initializeSymbolicator(); } @@ -123,6 +136,95 @@ public static Tag makeSymbolicInt(String label, int concreteValue) { } } + /** + * Get or create a symbolic integer value with tag reuse. + * + * This method supports tag reuse across path iterations by using qualified names. + * On first encounter, it creates a new tag and records domain constraints. + * On subsequent encounters, it reuses the existing tag but updates value mapping. + * + * @param qualifiedName Fully qualified name (ClassName:MethodName:variableName) + * @param concreteValue The concrete value for this iteration + * @param min Minimum value in domain (inclusive) + * @param max Maximum value in domain (inclusive) + * @return Tagged integer value ready for use + */ + public static Integer getOrMakeSymbolicInt(String qualifiedName, int concreteValue, int min, int max) { + if (qualifiedName == null || qualifiedName.trim().isEmpty()) { + throw new IllegalArgumentException("Qualified name cannot be null or empty"); + } + + try { + // Check if tag already exists for this qualified name + Tag existingTag = labelToTag.get(qualifiedName); + + if (existingTag != null) { + // Reuse existing tag for this iteration + // Update value mapping for this concrete value + valueToTag.put(concreteValue, existingTag); + + if (DEBUG) { + System.out.println("[GaletteSymbolicator:getOrMakeSymbolicInt] Reusing tag for: " + qualifiedName + + " = " + concreteValue); + } + + // Domain constraint already recorded in first iteration + // Apply the tag to the value and return + Integer taggedValue = Tainter.setTag(concreteValue, existingTag); + + // Debug: Verify the tag was actually applied + Tag verifyTag = Tainter.getTag(taggedValue); + if (verifyTag == null) { + System.err.println( + "[GaletteSymbolicator:getOrMakeSymbolicInt] WARNING: Reused tag was not applied!"); + System.err.println(" Instrumentation may not be working. Check that Galette agent is loaded."); + } else { + if (DEBUG) { + System.out.println("[GaletteSymbolicator:getOrMakeSymbolicInt] Verified reused tag applied: " + + verifyTag.getLabels()[0]); + } + } + + return taggedValue; + } + + // First iteration - create new tag + Tag newTag = makeSymbolicInt(qualifiedName, concreteValue); + if (newTag == null) { + return concreteValue; // Return untagged value on error + } + + // Store for reuse in future iterations + labelToTag.put(qualifiedName, newTag); + + // Record domain constraint [min, max] (only on first iteration) + // Note: PathUtils.addIntDomainConstraint uses exclusive upper bound + PathUtils.addIntDomainConstraint(qualifiedName, min, max + 1); + + if (DEBUG) { + System.out.println("[GaletteSymbolicator:getOrMakeSymbolicInt] Created new tag for: " + qualifiedName + + " = " + concreteValue + ", domain: [" + min + ", " + max + "]"); + } + + // Apply the tag to the value and return + Integer taggedValue = Tainter.setTag(concreteValue, newTag); + + // Debug: Verify the tag was actually applied + Tag verifyTag = Tainter.getTag(taggedValue); + if (verifyTag == null) { + System.err.println("[GaletteSymbolicator:getOrMakeSymbolicInt] WARNING: New tag was not applied!"); + System.err.println(" Instrumentation may not be working. Check that Galette agent is loaded."); + } + + return taggedValue; + + } catch (Exception e) { + System.err.println("[GaletteSymbolicator:getOrMakeSymbolicInt] Error: " + e.getMessage()); + e.printStackTrace(); + return concreteValue; // Return untagged value on error + } + } + /** * Create a symbolic long value. * @@ -559,6 +661,7 @@ public static InputSolution sendConstraintToServer(Expression constraint) { public static void reset() { valueToTag.clear(); tagToExpression.clear(); + labelToTag.clear(); // Clear label-to-tag mappings for tag reuse mySoln = null; GaletteGreenBridge.clearVariableCache(); PathUtils.reset(); diff --git a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathExplorer.java b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathExplorer.java index f95da62..993807e 100644 --- a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathExplorer.java +++ b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathExplorer.java @@ -1,7 +1,6 @@ package edu.neu.ccs.prl.galette.concolic.knarr.runtime; import edu.neu.ccs.prl.galette.internal.runtime.Tag; -import edu.neu.ccs.prl.galette.internal.runtime.Tainter; import java.util.*; import za.ac.sun.cs.green.expr.BinaryOperation; import za.ac.sun.cs.green.expr.Expression; @@ -16,8 +15,9 @@ */ public class PathExplorer { - private static final boolean DEBUG = Boolean.getBoolean("path.explorer.debug"); - private static final int MAX_ITERATIONS = Integer.getInteger("path.explorer.max.iterations", 100); + private static final boolean DEBUG = true; // Boolean.getBoolean("path.explorer.debug"); + private static final int MAX_ITERATIONS = + Integer.getInteger("path.explorer.max.iterations", 30); // Reduced from 100 for debugging public static class PathRecord { public final int pathId; @@ -70,7 +70,20 @@ public static Tag getTagForVariable(String varName) { return currentVarToTag.get().get(varName); } - public List exploreInteger(String variableName, int initialValue, PathExecutor executor) { + public List exploreInteger(int initialValue, PathExecutor executor) { + return exploreInteger(initialValue, executor, null); + } + + /** + * Explore integer paths with a custom qualified name for symbolic execution. + * + * @param variableName The display name for the variable + * @param initialValue The initial concrete value + * @param executor The executor to run for each path + * @param qualifiedName The qualified name to use for symbolic execution (e.g., "CreateAscetTaskRoutine:execute:userChoice") + * @return List of explored paths + */ + public List exploreInteger(int initialValue, PathExecutor executor, String qualifiedName) { exploredPaths.clear(); exploredConstraintSignatures.clear(); negatedSwitchConstraints.clear(); @@ -81,30 +94,25 @@ public List exploreInteger(String variableName, int initialValue, Pa while (currentInput != null && iteration < MAX_ITERATIONS) { if (DEBUG) { - System.out.println("Iteration " + (iteration + 1) + ": " + variableName + " = " + currentInput); + System.out.println("[PathExplorer:exploreInteger] Iteration " + (iteration + 1) + ": " + qualifiedName + + " = " + currentInput); } - // Reset symbolic execution state - GaletteSymbolicator.reset(); + // Reset path condition but NOT the symbolicator + // We need to preserve labelToTag mappings for tag reuse PathUtils.resetPC(); - // Create symbolic value - String label = variableName + "_" + iteration; - Tag symbolicTag = GaletteSymbolicator.makeSymbolicInt(label, currentInput); - int taggedValue = Tainter.setTag(currentInput, symbolicTag); - - // Store in ThreadLocal for executor to access (single variable case) - Map varToTag = new HashMap<>(); - varToTag.put(variableName, symbolicTag); - currentVarToTag.set(varToTag); - - // Execute and collect constraints + // Execute with the concrete value + // The reactions will create and apply tags as needed long startTime = System.currentTimeMillis(); - PathConditionWrapper pc = executor.execute(taggedValue); + PathConditionWrapper pc = executor.execute(currentInput); long endTime = System.currentTimeMillis(); + String variableName = extractTagFromValue(currentInput); + if (pc == null || pc.isEmpty()) { - if (DEBUG) System.out.println("No constraints collected - concrete execution"); + if (DEBUG) + System.out.println("[PathExplorer:exploreInteger] No constraints collected - concrete execution"); Map inputs = new HashMap<>(); inputs.put(variableName, currentInput); exploredPaths.add(new PathRecord(iteration, inputs, new ArrayList<>(), endTime - startTime)); @@ -117,15 +125,15 @@ public List exploreInteger(String variableName, int initialValue, Pa String constraintSignature = buildConstraintSignature(constraints); if (DEBUG) { - System.out.println("Collected " + constraints.size() + " constraints"); + System.out.println("[PathExplorer:exploreInteger] Collected " + constraints.size() + " constraints"); for (Expression expr : constraints) { System.out.println(" - " + expr.toString()); } - System.out.println("Execution time: " + (endTime - startTime) + " ms"); + System.out.println("[PathExplorer:exploreInteger] Execution time: " + (endTime - startTime) + " ms"); } if (exploredConstraintSignatures.contains(constraintSignature)) { - if (DEBUG) System.out.println("Path already explored"); + if (DEBUG) System.out.println("[PathExplorer:exploreInteger] Path already explored"); break; } @@ -137,13 +145,15 @@ public List exploreInteger(String variableName, int initialValue, Pa // Extract domain and switch constraints if (iteration == 0 && constraints.size() >= 1) { domainConstraint = constraints.get(0); // First constraint is domain - if (DEBUG) System.out.println("Domain constraint: " + domainConstraint); + if (DEBUG) System.out.println("[PathExplorer:exploreInteger]Domain constraint: " + domainConstraint); } currentInput = generateNextInput(constraints, variableName); if (currentInput == null) { - if (DEBUG) System.out.println("No more satisfiable inputs - terminating exploration"); + if (DEBUG) + System.out.println( + "[PathExplorer:exploreInteger] No more satisfiable inputs - terminating exploration"); break; } @@ -151,9 +161,12 @@ public List exploreInteger(String variableName, int initialValue, Pa } if (iteration >= MAX_ITERATIONS && DEBUG) { - System.out.println("Reached max iterations: " + MAX_ITERATIONS); + System.out.println("[PathExplorer:exploreInteger] Reached max iterations: " + MAX_ITERATIONS); } + // Clean up: reset symbolicator state after exploration completes + GaletteSymbolicator.reset(); + return new ArrayList<>(exploredPaths); } @@ -170,7 +183,8 @@ private Integer generateNextInput(List currentConstraints, String va negatedSwitchConstraints.add(negatedSwitch); if (DEBUG) { - System.out.println("Negating switch constraint: " + switchConstraint + " -> " + negatedSwitch); + System.out.println("[PathExplorer:generateNextInput] Negating switch constraint: " + switchConstraint + + " -> " + negatedSwitch); } // Build combined constraint: domain AND not_switch1 AND not_switch2 AND ... AND not_switchN @@ -185,39 +199,54 @@ private Integer generateNextInput(List currentConstraints, String va } if (DEBUG) { - System.out.println("Combined constraint for solver: " + combinedConstraint); + System.out.println( + "[PathExplorer:generateNextInput] Combined constraint for solver: " + combinedConstraint); } // Solve the combined constraint InputSolution solution = ConstraintSolver.solveConstraint(combinedConstraint); if (solution == null || !solution.isSatisfiable()) { - if (DEBUG) System.out.println("UNSAT - no more inputs satisfy the constraints"); + if (DEBUG) + System.out.println("[PathExplorer:generateNextInput] UNSAT - no more inputs satisfy the constraints"); return null; } // Extract the value for our variable - Object value = solution.getValue(variableName); + // The solver uses the qualified name from the constraints, not the display name + Object value = null; + + // Try all keys in the solution - the solver will have used the actual variable name from constraints + for (String key : solution.getLabels()) { + value = solution.getValue(key); + if (value != null) { + if (DEBUG) + System.out.println( + "[PathExplorer:generateNextInput] Found value under key: " + key + " = " + value); + break; + } + } + + // If still no value, something went wrong if (value == null) { - for (String key : solution.getLabels()) { - if (key.startsWith(variableName) || key.equals("user_choice")) { - value = solution.getValue(key); - if (DEBUG) System.out.println("Found value under key: " + key); - break; - } + if (DEBUG) { + System.out.println( + "[PathExplorer:generateNextInput]Warning: No value found in solution. Available keys: " + + solution.getLabels()); } } if (value instanceof Integer) { - if (DEBUG) System.out.println("Next input from solver: " + value); + if (DEBUG) System.out.println("[PathExplorer:generateNextInput] Next input from solver: " + value); return (Integer) value; } else if (value instanceof Number) { int intVal = ((Number) value).intValue(); - if (DEBUG) System.out.println("Next input from solver (converted): " + intVal); + if (DEBUG) + System.out.println("[PathExplorer:generateNextInput] Next input from solver (converted): " + intVal); return intVal; } - if (DEBUG) System.out.println("Could not extract integer value from solution"); + if (DEBUG) System.out.println("[PathExplorer:generateNextInput] Could not extract integer value from solution"); return null; } @@ -239,23 +268,23 @@ public List getExploredPaths() { return new ArrayList<>(exploredPaths); } + public List exploreMultipleIntegers(List initialValues, MultiVarPathExecutor executor) { + return exploreMultipleIntegers(initialValues, executor, null); + } + /** * Explore all paths for multiple symbolic integer variables. * * This method systematically explores all combinations of values for multiple * symbolic variables by using constraint solving to generate inputs. + * Variable names are extracted from tags created by reactions. * - * @param variableNames Ordered list of variable names - * @param initialValues Initial concrete values for each variable (same order) + * @param initialValues Initial concrete values for each variable * @param executor Execution function that takes a map of variable -> value * @return List of explored paths */ public List exploreMultipleIntegers( - List variableNames, List initialValues, MultiVarPathExecutor executor) { - - if (variableNames.size() != initialValues.size()) { - throw new IllegalArgumentException("Variable names and initial values must have the same size"); - } + List initialValues, MultiVarPathExecutor executor, String qualifiedName) { exploredPaths.clear(); exploredConstraintSignatures.clear(); @@ -263,7 +292,7 @@ public List exploreMultipleIntegers( domainConstraint = null; negationsPerVariable.clear(); - int numVars = variableNames.size(); + int numVars = initialValues.size(); // Initialize negations list for each variable for (int i = 0; i < numVars; i++) { @@ -271,60 +300,79 @@ public List exploreMultipleIntegers( } int iteration = 0; - Map currentInputs = new HashMap<>(); - for (int i = 0; i < numVars; i++) { - currentInputs.put(variableNames.get(i), initialValues.get(i)); - } + List currentInputsList = new ArrayList<>(initialValues); - while (currentInputs != null && iteration < MAX_ITERATIONS) { + while (currentInputsList != null && iteration < MAX_ITERATIONS) { if (DEBUG) { - System.out.println("\n=== Iteration " + (iteration + 1) + " ==="); - for (String varName : variableNames) { - System.out.println(" " + varName + " = " + currentInputs.get(varName)); + System.out.println( + "\n[PathExplorer:exploreMultipleIntegers] === Iteration " + (iteration + 1) + " ==="); + for (int i = 0; i < currentInputsList.size(); i++) { + System.out.println(" Input " + i + " = " + currentInputsList.get(i)); } } - // Reset symbolic execution state - GaletteSymbolicator.reset(); + // Reset path condition but NOT the symbolicator + // We need to preserve labelToTag mappings for tag reuse PathUtils.resetPC(); - // Create symbolic values for ALL variables - Map taggedInputs = new HashMap<>(); - Map varToTag = new HashMap<>(); - - for (String varName : variableNames) { - Integer value = currentInputs.get(varName); - String label = varName + "_iter" + iteration; - Tag symbolicTag = GaletteSymbolicator.makeSymbolicInt(label, value); - int taggedValue = Tainter.setTag(value, symbolicTag); + // Create map with indexed keys for now - will be replaced with actual variable names after execution + Map inputsForExecution = new HashMap<>(); + for (int i = 0; i < currentInputsList.size(); i++) { + inputsForExecution.put("var_" + i, currentInputsList.get(i)); + } - // Use Integer.valueOf to preserve tag during boxing - Integer taggedInteger = Integer.valueOf(taggedValue); + // Execute and collect constraints + // The reactions will create and apply tags as needed + long startTime = System.currentTimeMillis(); + PathConditionWrapper pc = executor.execute(inputsForExecution); + long endTime = System.currentTimeMillis(); - // Store mapping for this variable - varToTag.put(varName, symbolicTag); - taggedInputs.put(varName, taggedInteger); + // Extract variable names from constraints after execution + List variableNames = new ArrayList<>(); + Map currentInputs = new HashMap<>(); + + // If we have constraints, extract variable names from them + if (pc != null && !pc.isEmpty()) { + List tempConstraints = pc.getConstraints(); + // Look for switch constraints (equality constraints) to extract variable names + Set uniqueVarNames = new LinkedHashSet<>(); + for (Expression constraint : tempConstraints) { + String constraintStr = constraint.toString(); + if (constraintStr.contains("==")) { + String varName = constraintStr.split("==")[0]; + uniqueVarNames.add(varName); + } + } + variableNames.addAll(uniqueVarNames); + } - if (DEBUG) { - System.out.println("[PathExplorer] Created symbolic value for " + varName + ": label=" + label - + ", value=" + value + ", tag=" + symbolicTag); + // If we still don't have variable names, use generic names + if (variableNames.isEmpty()) { + for (int i = 0; i < currentInputsList.size(); i++) { + variableNames.add("input_" + i); } } - // Store in ThreadLocal for executor to access - currentVarToTag.set(varToTag); + // Map the values to variable names + for (int i = 0; i < Math.min(currentInputsList.size(), variableNames.size()); i++) { + currentInputs.put(variableNames.get(i), currentInputsList.get(i)); + } - // Execute and collect constraints - long startTime = System.currentTimeMillis(); - PathConditionWrapper pc = executor.execute(taggedInputs); - long endTime = System.currentTimeMillis(); + if (DEBUG) { + System.out.println("[PathExplorer:exploreMultipleIntegers] Extracted variable names from constraints:"); + for (String varName : variableNames) { + System.out.println(" " + varName + " = " + currentInputs.get(varName)); + } + } if (pc == null || pc.isEmpty()) { - if (DEBUG) System.out.println("No constraints collected - concrete execution"); + if (DEBUG) + System.out.println( + "[PathExplorer:exploreMultipleIntegers] No constraints collected - concrete execution"); Map inputs = new HashMap<>(currentInputs); exploredPaths.add(new PathRecord(iteration, inputs, new ArrayList<>(), endTime - startTime)); // Try incrementing first variable - currentInputs = incrementInputs(currentInputs, variableNames); + currentInputsList = incrementInputsList(currentInputsList); iteration++; continue; } @@ -333,15 +381,19 @@ public List exploreMultipleIntegers( String constraintSignature = buildConstraintSignature(constraints); if (DEBUG) { - System.out.println("Collected " + constraints.size() + " constraints:"); + System.out.println( + "[PathExplorer:exploreMultipleIntegers] Collected " + constraints.size() + " constraints:"); for (Expression expr : constraints) { System.out.println(" - " + expr.toString()); } - System.out.println("Execution time: " + (endTime - startTime) + " ms"); + System.out.println( + "[PathExplorer:exploreMultipleIntegers] Execution time: " + (endTime - startTime) + " ms"); } if (exploredConstraintSignatures.contains(constraintSignature)) { - if (DEBUG) System.out.println("Path already explored (duplicate constraint signature)"); + if (DEBUG) + System.out.println( + "[PathExplorer:exploreMultipleIntegers] Path already explored (duplicate constraint signature)"); break; } @@ -355,9 +407,9 @@ public List exploreMultipleIntegers( } // Generate next input combination - currentInputs = generateNextMultiVarInput(constraints, variableNames, numVars); + currentInputsList = generateNextMultiVarInputList(constraints, variableNames, numVars); - if (currentInputs == null) { + if (currentInputsList == null) { if (DEBUG) System.out.println("No more satisfiable inputs - terminating exploration"); break; } @@ -378,34 +430,86 @@ public List exploreMultipleIntegers( } private void extractDomainConstraints(List constraints, int numVars) { - // Domain constraints are the first numVars constraints - // They have the form: (min <= var) AND (var < max) - if (constraints.size() >= numVars) { + // Domain constraints have the form: (min <= var) AND (var <= max) + // They alternate with equality constraints: [domain1, equality1, domain2, equality2, ...] + // We need to extract every other constraint starting from index 0 + if (constraints.size() >= numVars * 2) { List domainExprs = new ArrayList<>(); + + // Extract domain constraints (every other constraint, starting at 0) for (int i = 0; i < numVars; i++) { - domainExprs.add(constraints.get(i)); + int constraintIndex = i * 2; // 0, 2, 4, ... + if (constraintIndex < constraints.size()) { + Expression constraint = constraints.get(constraintIndex); + // Verify it looks like a domain constraint (contains >= or <=) + String constraintStr = constraint.toString(); + if (constraintStr.contains(">=") || constraintStr.contains("<=")) { + domainExprs.add(constraint); + } + } } // Combine domain constraints with AND - domainConstraint = domainExprs.get(0); - for (int i = 1; i < domainExprs.size(); i++) { - domainConstraint = new BinaryOperation(Operator.AND, domainConstraint, domainExprs.get(i)); + if (!domainExprs.isEmpty()) { + domainConstraint = domainExprs.get(0); + for (int i = 1; i < domainExprs.size(); i++) { + domainConstraint = new BinaryOperation(Operator.AND, domainConstraint, domainExprs.get(i)); + } + + if (DEBUG) { + System.out.println("Extracted domain constraints: " + domainConstraint); + } } + } + } + /** + * Helper method to increment a list of inputs for simple exploration fallback + */ + private List incrementInputsList(List inputs) { + if (inputs == null || inputs.isEmpty()) { + return null; + } + List newInputs = new ArrayList<>(inputs); + newInputs.set(0, newInputs.get(0) + 1); + return newInputs; + } + + /** + * Generate next multi-variable input as a list instead of a map. + * This allows us to work without knowing variable names upfront. + */ + private List generateNextMultiVarInputList( + List currentConstraints, List variableNames, int numVars) { + + Map resultMap = generateNextMultiVarInput(currentConstraints, variableNames, numVars); + + if (resultMap == null) { + return null; + } + + // Since variableNames might be empty, we need to extract values based on the order + // they appear in the resultMap. The resultMap contains qualified names from constraints. + List resultList = new ArrayList<>(); + + // Sort the keys to ensure consistent ordering + List sortedKeys = new ArrayList<>(resultMap.keySet()); + Collections.sort(sortedKeys); + + for (String key : sortedKeys) { + resultList.add(resultMap.get(key)); if (DEBUG) { - System.out.println("Extracted domain constraints: " + domainConstraint); + System.out.println("Adding to result list: " + key + " = " + resultMap.get(key)); } } + + return resultList; } /** - * Generate the next input combination for multi-variable exploration with proper backtracking. - * - * Strategy: Enumerate combinations like an odometer - * - Variables indexed 0 (leftmost) to n-1 (rightmost) - * - Increment rightmost variable first - * - When rightmost exhausted, reset it and increment previous variable - * - Track negations separately per variable for proper backtracking + * Generate the next input combination for multi-variable exploration. + * This version extracts variable names from the constraints themselves, + * similar to how generateNextInput works for single variables. */ private Map generateNextMultiVarInput( List currentConstraints, List variableNames, int numVars) { @@ -414,82 +518,223 @@ private Map generateNextMultiVarInput( return null; } - // Path constraints are after domain constraints - // For 2 variables: constraints = [domain1, domain2, switch1, switch2] - int numDomain = numVars; - int numPath = currentConstraints.size() - numDomain; + // Extract switch constraints + // After first iteration, we only get switch constraints (no domain constraints) + // So we need to handle both cases: with and without domain constraints + List switchConstraints = new ArrayList<>(); - if (numPath <= 0) { - if (DEBUG) System.out.println("No path constraints to negate"); - return null; + if (currentConstraints.size() == numVars * 2) { + // First iteration: has both domain and switch constraints + // Extract switch constraints from odd indices: 1, 3, 5, ... + for (int i = 0; i < numVars; i++) { + int switchIndex = i * 2 + 1; + if (switchIndex < currentConstraints.size()) { + switchConstraints.add(currentConstraints.get(switchIndex)); + } + } + } else if (currentConstraints.size() == numVars) { + // Subsequent iterations: only switch constraints + switchConstraints.addAll(currentConstraints); + } else { + if (DEBUG) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Unexpected number of constraints: " + + currentConstraints.size() + " for " + numVars + " variables"); + } + // Try to handle it anyway - assume they're all switch constraints + switchConstraints.addAll(currentConstraints); } - // Extract path constraints (one per variable, in order) - List pathConstraints = new ArrayList<>(); - for (int i = 0; i < numPath; i++) { - pathConstraints.add(currentConstraints.get(numDomain + i)); + if (switchConstraints.isEmpty()) { + if (DEBUG) System.out.println("[PathExplorer:generateNextMultiVarInput] No switch constraints to negate"); + return null; } - // Try to increment the rightmost (last) variable first - int rightmostVarIdx = numPath - 1; - Expression rightmostConstraint = pathConstraints.get(rightmostVarIdx); - Expression negatedRightmost = ConstraintSolver.negateConstraint(rightmostConstraint); + // Extract domain size from domain constraint to avoid hard-coding + // Domain constraint looks like: (0<=var)&&(var<5) which means domain is [0,4] + int maxDomainSize = 5; // Default + if (domainConstraint != null) { + String domainStr = domainConstraint.toString(); + if (DEBUG) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Domain constraint string: " + domainStr); + } - // Add negation for rightmost variable - negationsPerVariable.get(rightmostVarIdx).add(negatedRightmost); + // Look for pattern "variable 0 && upperBound <= 100) { + maxDomainSize = upperBound; + if (DEBUG) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Extracted upper bound: " + + upperBound + " from pattern <" + upperBound + ")"); + } + } + } catch (NumberFormatException e) { + // Keep default + } + } + } if (DEBUG) { - System.out.println("Incrementing rightmost variable (var" + rightmostVarIdx + "): " + negatedRightmost); + System.out.println("[PathExplorer:generateNextMultiVarInput] Using domain size: " + maxDomainSize); + } + + // Multi-variable exploration: properly handle backtracking + // Strategy: For 2 variables with domain [0,4], we want: + // (0,0), (0,1), (0,2), (0,3), (0,4), then + // (1,0), (1,1), (1,2), (1,3), (1,4), then + // (2,0), etc. up to (4,4) = 25 total combinations + + // Count how many negations we have for each variable + int[] negationsPerVar = new int[numVars]; + for (Expression neg : negatedSwitchConstraints) { + String negStr = neg.toString(); + // Check which variable this negation is for + for (int i = 0; i < numVars && i < switchConstraints.size(); i++) { + String varName = switchConstraints.get(i).toString().split("==")[0]; + if (negStr.contains(varName)) { + negationsPerVar[i]++; + break; + } + } } - // Try to solve - Map result = trySolveMultiVarWithPerVarNegations(variableNames); - - if (result != null) { - return result; // Success - found next value for rightmost variable + if (DEBUG) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Negations per variable: " + + Arrays.toString(negationsPerVar)); } - // Rightmost variable exhausted - need to backtrack - if (DEBUG) System.out.println("Rightmost variable exhausted, backtracking..."); + // Find which variable to negate next + boolean foundVariableToNegate = false; - // Backtrack: find a previous variable that can be incremented - for (int varIdx = rightmostVarIdx; varIdx >= 0; varIdx--) { - // Clear negations for this and all later variables (reset them) - for (int j = varIdx; j < numVars; j++) { - negationsPerVariable.get(j).clear(); + // Check if we can increment the rightmost variable + int lastVarIdx = numVars - 1; + if (lastVarIdx < switchConstraints.size() && negationsPerVar[lastVarIdx] < maxDomainSize - 1) { + // Can still negate the last variable + Expression lastSwitch = switchConstraints.get(lastVarIdx); + Expression negatedSwitch = ConstraintSolver.negateConstraint(lastSwitch); + negatedSwitchConstraints.add(negatedSwitch); + foundVariableToNegate = true; + + if (DEBUG) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Negating last variable: " + lastSwitch + + " -> " + negatedSwitch); } + } else if (lastVarIdx >= 0 && negationsPerVar[lastVarIdx] >= maxDomainSize - 1) { + // Last variable is exhausted, need to backtrack + if (DEBUG) + System.out.println("[PathExplorer:generateNextMultiVarInput] Last variable exhausted, backtracking..."); + + // Find the first variable from the right that can be incremented + for (int i = lastVarIdx - 1; i >= 0; i--) { + if (i < switchConstraints.size() && negationsPerVar[i] < maxDomainSize - 1) { + // Found a variable that can be incremented + + // First, clear all negations for variables to the right of this one + List toRemove = new ArrayList<>(); + for (Expression neg : negatedSwitchConstraints) { + String negStr = neg.toString(); + // Check if this negation is for a variable after i + for (int j = i + 1; j < numVars && j < switchConstraints.size(); j++) { + String varName = switchConstraints.get(j).toString().split("==")[0]; + if (negStr.contains(varName)) { + toRemove.add(neg); + break; + } + } + } + negatedSwitchConstraints.removeAll(toRemove); - if (varIdx == 0) { - // Can't backtrack further - all combinations exhausted - if (DEBUG) System.out.println("Backtracked to first variable - all paths explored"); - return null; + if (DEBUG && !toRemove.isEmpty()) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Cleared " + toRemove.size() + + " negations for variables after " + i); + } + + // Now negate variable i + Expression switchToNegate = switchConstraints.get(i); + Expression negatedSwitch = ConstraintSolver.negateConstraint(switchToNegate); + negatedSwitchConstraints.add(negatedSwitch); + foundVariableToNegate = true; + + if (DEBUG) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Negating variable " + i + ": " + + switchToNegate + " -> " + negatedSwitch); + } + break; + } } + } - // Try to increment the previous variable (varIdx - 1) - int prevVarIdx = varIdx - 1; - Expression prevConstraint = pathConstraints.get(prevVarIdx); - Expression negatedPrev = ConstraintSolver.negateConstraint(prevConstraint); - negationsPerVariable.get(prevVarIdx).add(negatedPrev); + if (!foundVariableToNegate) { + if (DEBUG) + System.out.println( + "[PathExplorer:generateNextMultiVarInput] All variables exhausted - exploration complete"); + return null; + } - if (DEBUG) { - System.out.println("Backtracking to var" + prevVarIdx + ", adding negation: " + negatedPrev); + if (DEBUG) { + System.out.println("[PathExplorer:generateNextMultiVarInput] Total negated constraints: " + + negatedSwitchConstraints.size()); + } + + // Build combined constraint: domain AND all negated switches + Expression combinedConstraint = domainConstraint; + + // Add all negated switch constraints + for (Expression negated : negatedSwitchConstraints) { + if (combinedConstraint == null) { + combinedConstraint = negated; + } else { + combinedConstraint = new BinaryOperation(Operator.AND, combinedConstraint, negated); } + } + + if (DEBUG) { + System.out.println( + "[PathExplorer:generateNextMultiVarInput] Combined constraint for solver: " + combinedConstraint); + } + + // Solve the combined constraint + InputSolution solution = ConstraintSolver.solveConstraint(combinedConstraint); + + if (solution == null || !solution.isSatisfiable()) { + if (DEBUG) + System.out.println( + "[PathExplorer:generateNextMultiVarInput] UNSAT - no more inputs satisfy the constraints"); + return null; + } + + // Extract values for all variables from the solution + Map resultMap = new HashMap<>(); - result = trySolveMultiVarWithPerVarNegations(variableNames); + // The solver returns values with the qualified names from constraints + for (String key : solution.getLabels()) { + Object value = solution.getValue(key); + if (value != null) { + if (DEBUG) { + System.out.println( + "[PathExplorer:generateNextMultiVarInput] Found value in solution: " + key + " = " + value); + } - if (result != null) { - // Success - found next value at this level - if (DEBUG) System.out.println("Found solution after backtracking: " + result); - return result; + if (value instanceof Integer) { + resultMap.put(key, (Integer) value); + } else if (value instanceof Number) { + resultMap.put(key, ((Number) value).intValue()); + } } + } - // This variable also exhausted, continue backtracking - if (DEBUG) System.out.println("Variable " + prevVarIdx + " also exhausted, continuing backtrack..."); + if (resultMap.isEmpty()) { + if (DEBUG) { + System.out.println("Warning: No values found in solution. Available keys: " + solution.getLabels()); + } + return null; } - // All variables exhausted - if (DEBUG) System.out.println("All combinations exhausted"); - return null; + return resultMap; } /** @@ -554,19 +799,31 @@ private Map trySolveMultiVarWithPerVarNegations(List va return nextInputs; } - private Map incrementInputs(Map current, List variableNames) { - if (variableNames.isEmpty()) { - return null; - } - - Map next = new HashMap<>(current); - String firstVar = variableNames.get(0); - Integer val = next.get(firstVar); - if (val == null) { - return null; + /** + * This may not be needed at all, as in Anne's run this did not find a tag but the exploration worked anyway. + * @param selected + * @return + */ + private String extractTagFromValue(Integer selected) { + // Check if the value has a tag + Tag tag = null; + try { + // Try to extract tag using Galette's Tainter + tag = edu.neu.ccs.prl.galette.internal.runtime.Tainter.getTag(selected); + if (tag != null && !tag.isEmpty()) { + System.out.println("[PathExplorer:extractTagFromValue] - Tag found: " + tag); + System.out.println("[PathExplorer:extractTagFromValue] - Tag labels: " + + java.util.Arrays.toString(tag.getLabels())); + + // Extract qualified name from tag label + String qualifiedName = tag.getLabels()[0].toString(); + return qualifiedName; + } else { + System.out.println("[PathExplorer:extractTagFromValue] - No tag found on value"); + } + } catch (Exception e) { + System.out.println("[PathExplorer:extractTagFromValue] - Error extracting tag: " + e.getMessage()); } - - next.put(firstVar, val + 1); - return next; + return null; } } diff --git a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathUtils.java b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathUtils.java index bf5cb81..691a8d0 100644 --- a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathUtils.java +++ b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/PathUtils.java @@ -279,10 +279,11 @@ public static void addIntDomainConstraint(String varName, int min, int max) { getCurPC().addConstraint(domain); if (GaletteSymbolicator.DEBUG) { - System.out.println("[PathUtils] Added domain constraint: " + min + " <= " + varName + " < " + max); + System.out.println("[PathUtils:addIntDomainConstraint] Added domain constraint: " + min + " <= " + + varName + " < " + max); } } catch (Exception e) { - System.err.println("[PathUtils] Failed to add domain constraint: " + e.getMessage()); + System.err.println("[PathUtils:addIntDomainConstraint] Failed to add domain constraint: " + e.getMessage()); } } @@ -314,6 +315,110 @@ public static void addSwitchConstraint(String varName, int concreteValue) { } } + /** + * Add a switch constraint using a Tag (similar to old Knarr-Phosphor version). + * This extracts the symbolic expression from the tag and records the constraint. + * + * @param tag The symbolic tag associated with the switched value + * @param concreteValue The concrete value taken in this execution + */ + public static void addSwitchConstraint(Tag tag, int concreteValue) { + if (tag == null || tag.isEmpty()) { + // Fallback to string-based constraint with default name + addSwitchConstraint("switch_value", concreteValue); + return; + } + + try { + // Extract symbolic expression from tag + Expression varExpr = GaletteGreenBridge.tagToExpression(tag); + if (varExpr == null) { + // Create a new symbolic variable based on tag + String varName = "tagged_var_" + tag.toString().hashCode(); + varExpr = new IntVariable(varName, Integer.MIN_VALUE, Integer.MAX_VALUE); + } + + // Create constraint: varExpr == concreteValue + IntConstant valueConst = new IntConstant(concreteValue); + Expression constraint = new BinaryOperation(Operator.EQ, varExpr, valueConst); + + getCurPC().addConstraint(constraint); + + if (GaletteSymbolicator.DEBUG) { + System.out.println("[PathUtils] Added tagged switch constraint: " + varExpr + " == " + concreteValue); + } + } catch (Exception e) { + System.err.println("[PathUtils] Failed to add tagged switch constraint: " + e.getMessage()); + // Fallback to string-based + addSwitchConstraint("switch_value", concreteValue); + } + } + + /** + * Add a switch constraint with all possible case values (similar to old Knarr-Phosphor). + * This method records the taken value and can optionally record NOT constraints for other cases. + * + * @param tag The symbolic tag + * @param concreteValue The value that was taken + * @param allCases All possible case values in the switch + */ + public static void addSwitchConstraint(Tag tag, int concreteValue, int[] allCases) { + if (tag == null || tag.isEmpty()) { + // Fallback to simple constraint + addSwitchConstraint("switch_value", concreteValue); + return; + } + + try { + Expression varExpr = GaletteGreenBridge.tagToExpression(tag); + if (varExpr == null) { + String varName = "tagged_switch_" + tag.toString().hashCode(); + varExpr = new IntVariable(varName, Integer.MIN_VALUE, Integer.MAX_VALUE); + } + + // Add domain constraint based on all cases + if (allCases != null && allCases.length > 0) { + int minCase = allCases[0]; + int maxCase = allCases[0]; + for (int c : allCases) { + minCase = Math.min(minCase, c); + maxCase = Math.max(maxCase, c); + } + + // Domain constraint: min <= var <= max + Expression lowerBound = new BinaryOperation(Operator.GE, varExpr, new IntConstant(minCase)); + Expression upperBound = new BinaryOperation(Operator.LE, varExpr, new IntConstant(maxCase)); + Expression domainConstraint = new BinaryOperation(Operator.AND, lowerBound, upperBound); + getCurPC().addConstraint(domainConstraint); + } + + // Add the equality constraint for the taken value + Expression takenConstraint = new BinaryOperation(Operator.EQ, varExpr, new IntConstant(concreteValue)); + getCurPC().addConstraint(takenConstraint); + + // Optionally add NOT constraints for other cases (for better constraint propagation) + if (allCases != null) { + for (int caseValue : allCases) { + if (caseValue != concreteValue) { + // This branch was NOT taken + Expression notTakenConstraint = + new BinaryOperation(Operator.NE, varExpr, new IntConstant(caseValue)); + // Note: We might not want to add all NOT constraints as it could overconstrain + // Only add if specifically needed for the solver + } + } + } + + if (GaletteSymbolicator.DEBUG) { + System.out.println("[PathUtils] Added switch constraint with cases: " + varExpr + " == " + concreteValue + + " (cases: " + java.util.Arrays.toString(allCases) + ")"); + } + } catch (Exception e) { + System.err.println("[PathUtils] Failed to add switch constraint with cases: " + e.getMessage()); + addSwitchConstraint("switch_value", concreteValue); + } + } + /** * Automatically record a branch constraint when a conditional jump is taken/not taken. * This method is called by bytecode instrumentation at branch points. diff --git a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/SymbolicComparison.java b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/SymbolicComparison.java index 4ceceb1..8a3a47d 100644 --- a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/SymbolicComparison.java +++ b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/concolic/knarr/runtime/SymbolicComparison.java @@ -182,4 +182,191 @@ public static void addBooleanConstraint(boolean condition, String description) { System.err.println("Error adding boolean constraint: " + e.getMessage()); } } + + /** + * Handle a symbolic switch statement and record the constraint for the taken path. + * This method is designed to be called from Vitruvius reactions or any switch-like decision point. + * + * @param value The concrete value being switched on + * @param tag The symbolic tag associated with the value (can be null for concrete values) + * @param cases All possible case values in the switch + * @return The original value (for transparent integration) + */ + public static int symbolicSwitch(int value, Tag tag, int... cases) { + try { + System.out.println("[SymbolicComparison:symbolicSwitch] called with value: " + value + ", cases: " + + java.util.Arrays.toString(cases)); + // If we have a symbolic tag, record the constraint + if (tag != null && !tag.isEmpty()) { + // Get or create symbolic expression for the tag + Expression varExpr = GaletteGreenBridge.tagToExpression(tag); + if (varExpr == null) { + // Create a new symbolic variable if needed + String varName = "switch_var_" + tag.toString().hashCode(); + varExpr = new IntVariable(varName, Integer.MIN_VALUE, Integer.MAX_VALUE); + } + + // Add domain constraint based on the cases + if (cases.length > 0) { + int minCase = cases[0]; + int maxCase = cases[0]; + for (int c : cases) { + minCase = Math.min(minCase, c); + maxCase = Math.max(maxCase, c); + } + + // Add domain constraint: min <= var <= max + Expression lowerBound = new BinaryOperation(Operator.GE, varExpr, new IntConstant(minCase)); + Expression upperBound = new BinaryOperation(Operator.LE, varExpr, new IntConstant(maxCase)); + Expression domainConstraint = new BinaryOperation(Operator.AND, lowerBound, upperBound); + + PathConditionWrapper pc = PathUtils.getCurPC(); + pc.addConstraint(domainConstraint); + } + + // Add the equality constraint for the taken path + Expression takenConstraint = new BinaryOperation(Operator.EQ, varExpr, new IntConstant(value)); + PathConditionWrapper pc = PathUtils.getCurPC(); + pc.addConstraint(takenConstraint); + + if (GaletteSymbolicator.DEBUG) { + System.out.println( + "Symbolic switch: value=" + value + ", cases=" + java.util.Arrays.toString(cases)); + System.out.println("Added constraint: " + varExpr + " == " + value); + } + } else { + // No tag, but still record as a concrete constraint using variable name inference + String varName = "user_choice"; // Default variable name + PathUtils.addSwitchConstraint(varName, value); + + if (GaletteSymbolicator.DEBUG) { + System.out.println("Concrete switch (no tag): value=" + value); + } + } + } catch (Exception e) { + System.err.println("Error in symbolicSwitch: " + e.getMessage()); + if (GaletteSymbolicator.DEBUG) { + e.printStackTrace(); + } + } + + return value; + } + + /** + * Handle a symbolic choice (e.g., from user interaction dialog) and record constraints. + * This is specifically designed for Vitruvius user interaction scenarios. + * + * @param value The chosen value + * @param tag The symbolic tag (can be null) + * @param min Minimum valid choice (inclusive) + * @param max Maximum valid choice (inclusive) + * @return The original value (for transparent integration) + */ + public static int symbolicChoice(int value, Tag tag, int min, int max) { + try { + System.out.println("[SymbolicComparison:symbolicChoice] called with value: " + value + ", range: [" + min + + "," + max + "]"); + if (tag != null && !tag.isEmpty()) { + // Tagged symbolic value + Expression varExpr = GaletteGreenBridge.tagToExpression(tag); + if (varExpr == null) { + String varName = "choice_var_" + tag.toString().hashCode(); + varExpr = new IntVariable(varName, min, max); + } + + // Add domain constraint: min <= var <= max + Expression lowerBound = new BinaryOperation(Operator.GE, varExpr, new IntConstant(min)); + Expression upperBound = new BinaryOperation(Operator.LE, varExpr, new IntConstant(max)); + Expression domainConstraint = new BinaryOperation(Operator.AND, lowerBound, upperBound); + + // Add chosen value constraint: var == value + Expression choiceConstraint = new BinaryOperation(Operator.EQ, varExpr, new IntConstant(value)); + + PathConditionWrapper pc = PathUtils.getCurPC(); + pc.addConstraint(domainConstraint); + pc.addConstraint(choiceConstraint); + + if (GaletteSymbolicator.DEBUG) { + System.out.println("Symbolic choice: value=" + value + ", range=[" + min + "," + max + "]"); + } + } else { + // Fallback to string-based constraint recording + String varName = "user_choice"; + PathUtils.addIntDomainConstraint( + varName, min, max + 1); // max+1 because our method uses exclusive upper bound + PathUtils.addSwitchConstraint(varName, value); + + if (GaletteSymbolicator.DEBUG) { + System.out.println( + "Concrete choice (no tag): value=" + value + ", range=[" + min + "," + max + "]"); + } + } + } catch (Exception e) { + System.err.println("Error in symbolicChoice: " + e.getMessage()); + if (GaletteSymbolicator.DEBUG) { + e.printStackTrace(); + } + } + + return value; + } + + /** + * Handle a symbolic choice for use directly in Vitruvius reactions. + * This version takes an Integer (boxed) to work with Vitruvius user interaction results. + * + * In the new design: + * - Domain constraints are handled by GaletteSymbolicator.getOrMakeSymbolicInt + * - This method only records the specific choice constraint + * + * @param selected The selected choice (can be null if dialog cancelled) + * @param min Minimum valid choice + * @param max Maximum valid choice + * @return The selected value, or -1 if null + */ + public static int symbolicVitruviusChoice(Integer selected, int min, int max) { + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] CALLED!"); + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Input value: " + selected); + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Range: [" + min + ", " + max + "]"); + + if (selected == null) { + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Selected is null, returning -1"); + return -1; // Dialog cancelled + } + + // Check if the value has a tag + Tag tag = null; + try { + // Try to extract tag using Galette's Tainter + tag = edu.neu.ccs.prl.galette.internal.runtime.Tainter.getTag(selected); + if (tag != null && !tag.isEmpty()) { + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Tag found: " + tag); + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Tag labels: " + + java.util.Arrays.toString(tag.getLabels())); + + // Extract qualified name from tag label + String qualifiedName = tag.getLabels()[0].toString(); + + // Record ONLY the switch constraint (domain already handled elsewhere) + PathUtils.addSwitchConstraint(qualifiedName, selected); + + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Recorded switch constraint: " + + qualifiedName + " == " + selected); + } else { + System.out.println( + "[SymbolicComparison:symbolicVitruviusChoice] - No tag or empty tag on Integer value"); + // Fallback: use generic variable name + // PathUtils.addSwitchConstraint("user_choice", selected); + } + } catch (Exception e) { + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Exception getting tag: " + + e.getClass().getName() + ": " + e.getMessage()); + // Fallback to concrete handling + // PathUtils.addSwitchConstraint("user_choice", selected); + } + + System.out.println("[SymbolicComparison:symbolicVitruviusChoice] - Returning: " + selected); + return selected; + } } diff --git a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvMultiVarPathExploration.java b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvMultiVarPathExploration.java index 2759299..0186da8 100644 --- a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvMultiVarPathExploration.java +++ b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvMultiVarPathExploration.java @@ -1,17 +1,11 @@ package edu.neu.ccs.prl.galette.vitruvius; -import edu.neu.ccs.prl.galette.concolic.knarr.runtime.*; -import edu.neu.ccs.prl.galette.internal.runtime.Tag; -import edu.neu.ccs.prl.galette.internal.runtime.Tainter; -import java.io.IOException; +import edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathConditionWrapper; +import edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathExplorer; +import edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathUtils; import java.lang.reflect.Method; -import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.*; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; -import za.ac.sun.cs.green.expr.Expression; /** * Automatic multi-variable path exploration for Vitruvius transformations. @@ -28,51 +22,52 @@ public class AutomaticVitruvMultiVarPathExploration { private static final boolean DEBUG = Boolean.getBoolean("path.explorer.debug"); public static void main(String[] args) { - System.out.println("CocoPath\n"); + System.out.println("[AutomaticVitruvMultiVarPathExploration:main] CocoPath\n"); - // Register XMI resource factory (CRITICAL for EMF resource creation) - Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); + // Verify instrumentation is working + AutomaticVitruvPathExplorationHelper.verifyInstrumentation(); + + // Initialize EMF + AutomaticVitruvPathExplorationHelper.initializeEMF(); try { // Load Vitruvius Test class - Class testClass = Class.forName("tools.vitruv.methodologisttemplate.vsum.Test"); - Object testInstance = testClass.getDeclaredConstructor().newInstance(); + Object testInstance = AutomaticVitruvPathExplorationHelper.loadVitruviusTestClass(); // Setup path explorer PathExplorer explorer = new PathExplorer(); - // Variable names for two user choices - List variableNames = Arrays.asList("user_choice_1", "user_choice_2"); - // Initial values (start with 0, 0) List initialValues = Arrays.asList(0, 0); // Explore all paths - System.out.println("Starting multi-variable path exploration..."); + System.out.println( + "[AutomaticVitruvMultiVarPathExploration:main] Starting multi-variable path exploration..."); - List paths = - explorer.exploreMultipleIntegers(variableNames, initialValues, inputs -> { - return executeVitruvWithTwoInputs(testInstance, inputs, variableNames); - }); + List paths = explorer.exploreMultipleIntegers(initialValues, inputs -> { + return executeVitruvWithTwoInputs(testInstance, inputs); + }); // Display results - System.out.println("\nResults"); - System.out.println("Total paths explored: " + paths.size()); + System.out.println("\n[AutomaticVitruvMultiVarPathExploration:main] Results"); + System.out.println("[AutomaticVitruvMultiVarPathExploration:main] Total paths explored: " + paths.size()); System.out.println(); for (PathExplorer.PathRecord path : paths) { System.out.println(path); } - // Save results to JSON - saveResultsToJson(paths, "execution_paths_multivar.json"); + // Save results to JSON (variable names will be extracted from path records) + AutomaticVitruvPathExplorationHelper.exportMultiVarResults(paths, "execution_paths_multivar.json"); - System.out.println("\nComplete "); - System.out.println("Results saved to: execution_paths_multivar.json"); - System.out.println("Generated models saved to: galette-output-multivar-*/"); + System.out.println("\n[AutomaticVitruvMultiVarPathExploration:main] Complete "); + System.out.println( + "[AutomaticVitruvMultiVarPathExploration:main] Results saved to: execution_paths_multivar.json"); + System.out.println( + "[AutomaticVitruvMultiVarPathExploration:main] Generated models saved to: galette-output-multivar-*/"); } catch (Exception e) { - System.err.println("Error during path exploration:"); + System.err.println("[AutomaticVitruvMultiVarPathExploration:main] Error during path exploration:"); e.printStackTrace(); System.exit(1); } @@ -82,131 +77,53 @@ public static void main(String[] args) { * Execute Vitruvius transformation with TWO user inputs. * * This method: - * 1. Adds domain constraints for both variables - * 2. Invokes insertTwoTasks() method with both inputs - * 3. Records path constraints for both variables - * 4. Returns collected constraints + * 1. Invokes insertTwoTasks() method with both inputs + * 2. The reactions will create tags and record constraints + * 3. Returns collected constraints * * @param testInstance Instance of Test class - * @param inputs Map containing user_choice_1 and user_choice_2 - * @param variableNames List of variable names (for constraint generation) + * @param inputs Map containing the two input values * @return Path condition with all collected constraints */ - private static PathConditionWrapper executeVitruvWithTwoInputs( - Object testInstance, Map inputs, List variableNames) { - // Get the TAGGED values (preserve symbolic tags for constraint collection) - Integer taggedInput1 = (Integer) inputs.get(variableNames.get(0)); - Integer taggedInput2 = (Integer) inputs.get(variableNames.get(1)); - - if (taggedInput1 == null) taggedInput1 = 0; - if (taggedInput2 == null) taggedInput2 = 0; - - // NEW: Try to read tags from inputs to get variable names and expressions dynamically - // First try Tainter.getTag (works with javaagent) - Tag tag1 = Tainter.getTag(taggedInput1); - Tag tag2 = Tainter.getTag(taggedInput2); - - // Fallback 1: try PathExplorer.getTagForVariable (works without javaagent, uses ThreadLocal) - if (tag1 == null && variableNames.size() > 0) { - tag1 = PathExplorer.getTagForVariable(variableNames.get(0)); - } - if (tag2 == null && variableNames.size() > 1) { - tag2 = PathExplorer.getTagForVariable(variableNames.get(1)); + private static PathConditionWrapper executeVitruvWithTwoInputs(Object testInstance, Map inputs) { + // Extract the two input values from the map + // PathExplorer passes them with keys like "var_0", "var_1" initially + List valuesList = new ArrayList<>(); + for (Object value : inputs.values()) { + valuesList.add((Integer) value); } - // Fallback 2: try GaletteSymbolicator.getTagForValue (may not work with duplicate values) - if (tag1 == null) { - tag1 = GaletteSymbolicator.getTagForValue(taggedInput1); - } - if (tag2 == null) { - tag2 = GaletteSymbolicator.getTagForValue(taggedInput2); + // If we have the expected 2 values + while (valuesList.size() < 2) { + valuesList.add(0); } - // Use variable names from parameter, falling back to defaults if not provided - String varName1 = variableNames.size() > 0 ? variableNames.get(0) : "default1"; - String varName2 = variableNames.size() > 1 ? variableNames.get(1) : "default2"; - Expression symbolicExpr1 = null; - Expression symbolicExpr2 = null; + Integer taggedInput1 = valuesList.get(0); + Integer taggedInput2 = valuesList.get(1); - if (tag1 != null && tag1.size() > 0) { - // Tag-aware mode: extract variable name and expression from tag - Object[] labels1 = tag1.getLabels(); - String label1 = labels1[0].toString(); - - // Extract variable name from label (remove _iterN suffix) - // Label format: "user_choice_1_iter0" -> extract "user_choice_1" - if (label1.contains("_iter")) { - varName1 = label1.substring(0, label1.lastIndexOf("_iter")); - } else { - varName1 = label1; - } - - // Get the symbolic expression associated with this tag - symbolicExpr1 = GaletteSymbolicator.getExpressionForTag(tag1); - - System.out.println( - "✓ Tag detected for input 1: label = \"" + label1 + "\", variable name = \"" + varName1 + "\""); - if (symbolicExpr1 != null) { - System.out.println(" Symbolic expression: " + symbolicExpr1); - } - } else { - - System.out.println("No tag found for input 1"); - } - - if (tag2 != null && tag2.size() > 0) { - // Tag-aware mode: extract variable name and expression from tag - Object[] labels2 = tag2.getLabels(); - String label2 = labels2[0].toString(); - - // Extract variable name from label (remove _iterN suffix) - // Label format: "user_choice_2_iter0" -> extract "user_choice_2" - if (label2.contains("_iter")) { - varName2 = label2.substring(0, label2.lastIndexOf("_iter")); - } else { - varName2 = label2; - } - - // Get the symbolic expression associated with this tag - symbolicExpr2 = GaletteSymbolicator.getExpressionForTag(tag2); - - System.out.println( - "✓ Tag detected for input 2: label = \"" + label2 + "\", variable name = \"" + varName2 + "\""); - if (symbolicExpr2 != null) { - System.out.println(" Symbolic expression: " + symbolicExpr2); - } - } else { - System.out.println("No tag found for input 2"); - } + // Tags are already attached to inputs from PathExplorer + // The reactions will handle all symbolic execution concerns + System.out.println( + "[AutomaticVitruvMultiVarPathExploration:executeVitruvWithTwoInputs] Tagged inputs received from PathExplorer"); + System.out.println( + "[AutomaticVitruvMultiVarPathExploration:executeVitruvWithTwoInputs] Input 1: " + taggedInput1); + System.out.println( + "[AutomaticVitruvMultiVarPathExploration:executeVitruvWithTwoInputs] Input 2: " + taggedInput2); // Extract concrete values for display/directory naming int input1 = taggedInput1.intValue(); int input2 = taggedInput2.intValue(); - // Create unique working directory for this path - Path workDir = Paths.get("galette-output-multivar-" + input1 + "_" + input2); - - try { - Files.createDirectories(workDir); - } catch (IOException e) { - System.err.println("Warning: Could not create working directory: " + e.getMessage()); - } + // Create unique working directory for this path, cleaning any stale outputs to avoid proxy issues + Path workDir = AutomaticVitruvPathExplorationHelper.createWorkingDirectory( + "galette-output-multivar", input1 + "_" + input2); // Reset path condition PathUtils.resetPC(); - // Step 1: Add domain constraints for BOTH variables - - PathUtils.addIntDomainConstraint(varName1, 0, 5); - PathUtils.addIntDomainConstraint(varName2, 0, 5); - - // Step 2: Record path constraints for BOTH variables - - PathUtils.addSwitchConstraint(varName1, taggedInput1); - PathUtils.addSwitchConstraint(varName2, taggedInput2); - if (DEBUG) { - System.out.println("[Execute] Added constraints:"); + System.out.println( + "[AutomaticVitruvMultiVarPathExploration:executeVitruvWithTwoInputs] Constraints will be recorded by reactions via SymbolicExecutionHelper"); } try { @@ -216,13 +133,15 @@ private static PathConditionWrapper executeVitruvWithTwoInputs( if (DEBUG) { System.out.println( - "[Execute] Invoking insertTwoTasks(" + workDir + ", " + input1 + ", " + input2 + ")"); + "[AutomaticVitruvMultiVarPathExploration:executeVitruvWithTwoInputs] Invoking insertTwoTasks(" + + workDir + ", " + input1 + ", " + input2 + ")"); } insertTwoTasks.invoke(testInstance, workDir, taggedInput1, taggedInput2); } catch (Exception e) { - System.err.println("Error executing Vitruvius transformation:"); + System.err.println( + "[AutomaticVitruvMultiVarPathExploration:executeVitruvWithTwoInputs] Error executing Vitruvius transformation:"); e.printStackTrace(); // Return collected constraints even if execution failed } @@ -231,89 +150,10 @@ private static PathConditionWrapper executeVitruvWithTwoInputs( PathConditionWrapper pc = PathUtils.getCurPC(); if (DEBUG && pc != null) { - System.out.println("[Execute] Collected " + pc.getConstraints().size() + " total constraints"); + System.out.println("[AutomaticVitruvMultiVarPathExploration:executeVitruvWithTwoInputs] Collected " + + pc.getConstraints().size() + " total constraints"); } return pc; } - - /** - * Save path exploration results to JSON file (manually formatted). - */ - private static void saveResultsToJson(List paths, String filename) { - try { - StringBuilder json = new StringBuilder(); - json.append("{\n"); - json.append(" \"total_paths\": ").append(paths.size()).append(",\n"); - json.append(" \"num_variables\": 2,\n"); - json.append(" \"variable_names\": [\"user_choice_1\", \"user_choice_2\"],\n"); - json.append(" \"paths\": [\n"); - - for (int i = 0; i < paths.size(); i++) { - PathExplorer.PathRecord path = paths.get(i); - json.append(" {\n"); - json.append(" \"path_id\": ").append(path.pathId).append(",\n"); - - // Format inputs - json.append(" \"inputs\": {"); - boolean first = true; - for (Map.Entry entry : path.inputs.entrySet()) { - if (!first) json.append(", "); - json.append("\"").append(entry.getKey()).append("\": ").append(entry.getValue()); - first = false; - } - json.append("},\n"); - - // Format constraints - json.append(" \"constraints\": ["); - for (int j = 0; j < path.constraints.size(); j++) { - json.append("\"") - .append(escapeJson(path.constraints.get(j).toString())) - .append("\""); - if (j < path.constraints.size() - 1) json.append(", "); - } - json.append("],\n"); - - json.append(" \"num_constraints\": ") - .append(path.constraints.size()) - .append(",\n"); - json.append(" \"execution_time_ms\": ") - .append(path.executionTimeMs) - .append("\n"); - json.append(" }"); - if (i < paths.size() - 1) json.append(","); - json.append("\n"); - } - - json.append(" ]\n"); - json.append("}\n"); - - Path outputPath = Paths.get(filename); - Files.write(outputPath, json.toString().getBytes()); - - System.out.println("\nSaved results to: " + outputPath.toAbsolutePath()); - - } catch (IOException e) { - System.err.println("Error saving JSON results: " + e.getMessage()); - } - } - - private static String escapeJson(String str) { - return str.replace("\\", "\\\\").replace("\"", "\\\""); - } - - /** - * Recursively delete directory and its contents. - */ - private static void deleteDirectory(Path dir) throws IOException { - if (Files.isDirectory(dir)) { - Files.walk(dir).sorted(Comparator.reverseOrder()).forEach(path -> { - try { - Files.delete(path); - } catch (IOException e) { - // Ignore - } - }); - } - } } diff --git a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvPathExploration.java b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvPathExploration.java index d0a5824..37b2baa 100644 --- a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvPathExploration.java +++ b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvPathExploration.java @@ -1,24 +1,20 @@ package edu.neu.ccs.prl.galette.vitruvius; -import edu.neu.ccs.prl.galette.concolic.knarr.runtime.GaletteSymbolicator; +import edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathConditionWrapper; import edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathExplorer; import edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathUtils; -import edu.neu.ccs.prl.galette.internal.runtime.Tag; -import edu.neu.ccs.prl.galette.internal.runtime.Tainter; import java.lang.reflect.Method; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.List; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; -import za.ac.sun.cs.green.expr.Expression; /** * Automatic Vitruvius path exploration using constraint-based input generation. * * This example demonstrates PROPER symbolic execution: - * - Inputs generated automatically by negating constraints - * - Iterative path exploration until all paths covered + * 1. No manual domain constraints - extracted from switch statements + * 2. Automatic constraint collection via bytecode instrumentation + * 3. Constraint-based input generation to explore all feasible paths + * 4. No hardcoded test inputs - the solver finds them! * * @purpose Automatic path exploration for Vitruvius VSUM * @feature Explores all user dialog choices @@ -28,20 +24,14 @@ public class AutomaticVitruvPathExploration { public static void main(String[] args) { + // Verify instrumentation is working + AutomaticVitruvPathExplorationHelper.verifyInstrumentation(); - // Register XMI resource factory - Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); + // Initialize EMF + AutomaticVitruvPathExplorationHelper.initializeEMF(); // Load Vitruvius Test class - Object testInstance; - try { - Class testClass = Class.forName("tools.vitruv.methodologisttemplate.vsum.Test"); - testInstance = testClass.getDeclaredConstructor().newInstance(); - System.out.println("Loaded Vitruvius Test class"); - } catch (Exception e) { - System.err.println(" Failed to load Vitruvius Test class: " + e.getMessage()); - return; - } + Object testInstance = AutomaticVitruvPathExplorationHelper.loadVitruviusTestClass(); // Create path explorer PathExplorer explorer = new PathExplorer(); @@ -58,189 +48,72 @@ public static void main(String[] args) { // final Object finalTestInstance = testInstance; List paths = explorer.exploreInteger( - "user_choice", 0, // Initial value to start exploration - input -> executeVitruvWithInput(finalTestInstance, input)); + input -> executeVitruvWithInput(finalTestInstance, input), + "CreateAscetTaskRoutine:execute:userChoice"); // Qualified name matching the reaction // Export results - exportResultsToJson(paths, "execution_paths_automatic.json"); + AutomaticVitruvPathExplorationHelper.exportSingleVarResults(paths, "execution_paths_automatic.json"); } /** * Execute Vitruvius transformation with given input. * * IMPORTANT: The input is a TAGGED integer value from PathExplorer. - * We must pass it directly to insertTask WITHOUT unboxing to preserve the tag. + * We pass it directly to insertTask to preserve the tag. + * The reaction will handle all symbolic execution concerns. */ - private static edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathConditionWrapper executeVitruvWithInput( - Object testInstance, Object input) { - - // NEW: Try to read tag from input to get variable name and expression dynamically - // First try Tainter.getTag (works with javaagent) - Tag tag = Tainter.getTag(input); - - // Fallback 1: try PathExplorer.getTagForVariable (works without javaagent, uses ThreadLocal) - if (tag == null) { - tag = PathExplorer.getTagForVariable("user_choice"); - } - - // Fallback 2: try GaletteSymbolicator.getTagForValue - if (tag == null) { - tag = GaletteSymbolicator.getTagForValue(input); - } - - String varName; - Expression symbolicExpr = null; - - if (tag != null && tag.size() > 0) { - // Tag-aware mode: extract variable name and expression from tag - Object[] labels = tag.getLabels(); - String label = labels[0].toString(); - - // Extract variable name from label (remove _N suffix) - // Label format: "user_choice_0" -> extract "user_choice" - if (label.contains("_")) { - int lastUnderscore = label.lastIndexOf("_"); - // Check if the part after underscore is a number - String suffix = label.substring(lastUnderscore + 1); - try { - Integer.parseInt(suffix); - varName = label.substring(0, lastUnderscore); - } catch (NumberFormatException e) { - varName = label; - } - } else { - varName = label; - } - - // Get the symbolic expression associated with this tag - symbolicExpr = GaletteSymbolicator.getExpressionForTag(tag); + private static PathConditionWrapper executeVitruvWithInput(Object testInstance, Object input) { - System.out.println("✓ Tag detected: label = \"" + label + "\", variable name = \"" + varName + "\""); - if (symbolicExpr != null) { - System.out.println(" Symbolic expression: " + symbolicExpr); - } - } else { - // Fallback mode: use hardcoded variable name - varName = "user_choice"; - System.out.println("⚠ No tag found, using fallback variable name: \"" + varName + "\""); - } - - // Extract concrete value ONLY for display/directory name - // DO NOT use this for execution - it loses the tag! + // Extract concrete value for display/directory name int concreteValue = (input instanceof Integer) ? (Integer) input : 0; - System.out.println("→ Executing with " + varName + " = " + concreteValue); + System.out.println( + "[AutomaticVitruvPathExploration:executeVitruvWithInput] → Executing with input = " + concreteValue); // Create output directory for this execution - Path workDir = Paths.get("galette-output-automatic-" + concreteValue); - - // NOTE: When running with javaagent, domain and switch constraints are automatically added - // by TagPropagator bytecode instrumentation. However, mvn exec:java doesn't support javaagent, - // so we add them manually as a fallback. - - // IMPROVED: Add domain constraint using variable name from tag (if available) - PathUtils.addIntDomainConstraint(varName, 0, 5); + Path workDir = + AutomaticVitruvPathExplorationHelper.createWorkingDirectory("galette-output-automatic", concreteValue); try { // Execute Vitruvius transformation first - System.out.println(" Attempting to invoke insertTask with workDir=" + workDir + ", input=" + input); + System.out.println( + "[AutomaticVitruvPathExploration:executeVitruvWithInput] Attempting to invoke insertTask with workDir=" + + workDir + ", input=" + input); Method insertTask = testInstance.getClass().getMethod("insertTask", Path.class, Integer.class); - System.out.println(" Found method: " + insertTask); + System.out.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Found method: " + insertTask); insertTask.invoke(testInstance, workDir, input); - System.out.println(" Method invocation succeeded"); - - // IMPROVED: Record switch constraint using variable name from tag (if available) - PathUtils.addSwitchConstraint(varName, concreteValue); + System.out.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Method invocation succeeded"); - System.out.println(" Vitruvius transformation executed"); - System.out.println(" Constraints: " + PathUtils.getCurPC().size()); + System.out.println( + "[AutomaticVitruvPathExploration:executeVitruvWithInput] Vitruvius transformation executed"); + System.out.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Constraints: " + + PathUtils.getCurPC().size()); } catch (Exception e) { - System.err.println("Execution failed: " + e.getClass().getName() + ": " + e.getMessage()); + System.err.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Execution failed: " + + e.getClass().getName() + ": " + e.getMessage()); if (e.getCause() != null) { - System.err.println(" Cause: " + e.getCause().getClass().getName() + ": " + System.err.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Cause: " + + e.getCause().getClass().getName() + ": " + e.getCause().getMessage()); if (e.getCause().getCause() != null) { - System.err.println(" Root Cause: " + System.err.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Root Cause: " + e.getCause().getCause().getClass().getName() + ": " + e.getCause().getCause().getMessage()); } } e.printStackTrace(); - return new edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathConditionWrapper(); + return new PathConditionWrapper(); } // Return collected constraints - edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathConditionWrapper pc = PathUtils.getCurPC(); - System.out.println(" Returning PC with " + pc.size() + " constraints"); + PathConditionWrapper pc = PathUtils.getCurPC(); + System.out.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Constraints: " + pc.size()); + System.out.println("[AutomaticVitruvPathExploration:executeVitruvWithInput] Returning PC with " + pc.size() + + " constraints"); return pc; } - - /** - * Export results to JSON for visualization. - */ - private static void exportResultsToJson(List paths, String filename) { - try { - java.io.PrintWriter writer = new java.io.PrintWriter(filename); - writer.println("["); - - for (int i = 0; i < paths.size(); i++) { - PathExplorer.PathRecord path = paths.get(i); - - writer.println(" {"); - writer.println(" \"pathId\": " + (i + 1) + ","); - writer.println(" \"symbolicInputs\": {"); - - // Write inputs - int inputCount = 0; - for (java.util.Map.Entry entry : path.inputs.entrySet()) { - writer.print(" \"" + entry.getKey() + "\": "); - if (entry.getValue() instanceof String) { - writer.print("\"" + entry.getValue() + "\""); - } else { - writer.print(entry.getValue()); - } - inputCount++; - if (inputCount < path.inputs.size()) { - writer.println(","); - } else { - writer.println(); - } - } - - writer.println(" },"); - writer.println(" \"constraints\": ["); - - // Write constraints - for (int j = 0; j < path.constraints.size(); j++) { - writer.print(" \"" + path.constraints.get(j).toString() + "\""); - if (j < path.constraints.size() - 1) { - writer.println(","); - } else { - writer.println(); - } - } - - writer.println(" ],"); - writer.println(" \"executionTime\": " + path.executionTimeMs); - - if (i < paths.size() - 1) { - writer.println(" },"); - } else { - writer.println(" }"); - } - } - - writer.println("]"); - writer.close(); - - System.out.println("\n📄 Results exported to: " + filename); - - } catch (Exception e) { - System.err.println("Failed to export results: " + e.getMessage()); - } - } } diff --git a/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvPathExplorationHelper.java b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvPathExplorationHelper.java new file mode 100644 index 0000000..583befd --- /dev/null +++ b/knarr-runtime/src/main/java/edu/neu/ccs/prl/galette/vitruvius/AutomaticVitruvPathExplorationHelper.java @@ -0,0 +1,287 @@ +package edu.neu.ccs.prl.galette.vitruvius; + +import edu.neu.ccs.prl.galette.concolic.knarr.runtime.PathExplorer; +import edu.neu.ccs.prl.galette.internal.runtime.Tag; +import edu.neu.ccs.prl.galette.internal.runtime.Tainter; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; + +/** + * Helper class for Vitruvius path exploration utilities. + * Provides common functionality for both single and multi-variable path exploration. + */ +public class AutomaticVitruvPathExplorationHelper { + + /** + * Verify that Galette instrumentation is working. + * Exits the program if instrumentation is not functional. + */ + public static void verifyInstrumentation() { + System.out.println("[PathExplorationHelper] Checking instrumentation..."); + try { + Integer testValue = 42; + Tag testTag = Tag.of("test"); + Integer taggedTest = Tainter.setTag(testValue, testTag); + Tag retrievedTag = Tainter.getTag(taggedTest); + + if (retrievedTag == null) { + System.err.println("ERROR: Instrumentation is NOT working! Tainter.getTag() returned null."); + System.err.println("The program must be run with the instrumented JVM and Galette agent."); + System.err.println("Exiting - symbolic execution will not work without instrumentation."); + System.exit(1); + } else { + System.out.println("✓ Instrumentation is working. Tag retrieved: " + + retrievedTag.getLabels()[0]); + } + } catch (Exception e) { + System.err.println("ERROR: Failed to verify instrumentation: " + e.getMessage()); + e.printStackTrace(); + System.exit(1); + } + } + + /** + * Initialize EMF resource factories for XMI handling. + */ + public static void initializeEMF() { + Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); + } + + /** + * Load and instantiate the Vitruvius Test class. + * + * @return Instance of the Test class + * @throws RuntimeException if class cannot be loaded + */ + public static Object loadVitruviusTestClass() { + try { + Class testClass = Class.forName("tools.vitruv.methodologisttemplate.vsum.Test"); + Object testInstance = testClass.getDeclaredConstructor().newInstance(); + System.out.println("[PathExplorationHelper] Loaded Vitruvius Test class"); + return testInstance; + } catch (Exception e) { + throw new RuntimeException("Failed to load Vitruvius Test class: " + e.getMessage(), e); + } + } + + /** + * Create a unique working directory for output. + * Deletes existing directory if present to avoid conflicts. + * + * @param prefix Directory prefix (e.g., "galette-output-automatic") + * @param suffixes Additional path components + * @return Path to created directory + */ + public static Path createWorkingDirectory(String prefix, Object... suffixes) { + StringBuilder pathName = new StringBuilder(prefix); + for (Object suffix : suffixes) { + pathName.append("-").append(suffix); + } + + Path workDir = Paths.get(pathName.toString()); + + try { + if (Files.exists(workDir)) { + deleteDirectory(workDir); + } + Files.createDirectories(workDir); + } catch (IOException e) { + System.err.println("Warning: Could not create working directory: " + e.getMessage()); + } + + return workDir; + } + + /** + * Recursively delete a directory and all its contents. + * + * @param dir Directory to delete + */ + public static void deleteDirectory(Path dir) { + if (Files.exists(dir)) { + try { + Files.walk(dir).sorted(Comparator.reverseOrder()).forEach(path -> { + try { + Files.delete(path); + } catch (IOException e) { + // Ignore errors during deletion + } + }); + } catch (IOException e) { + System.err.println("Warning: Could not delete directory: " + e.getMessage()); + } + } + } + + /** + * Export single-variable path exploration results to JSON. + * + * @param paths List of explored paths + * @param filename Output filename + */ + public static void exportSingleVarResults(List paths, String filename) { + System.out.println("\n[PathExplorationHelper:exportResultsToJson] 📄 Results exported to: " + filename); + + try (PrintWriter writer = new PrintWriter(filename)) { + writer.println("["); + + for (int i = 0; i < paths.size(); i++) { + PathExplorer.PathRecord path = paths.get(i); + + writer.println(" {"); + writer.println(" \"pathId\": " + (i + 1) + ","); + writer.println(" \"symbolicInputs\": {"); + + // Write inputs + int inputCount = 0; + for (Map.Entry entry : path.inputs.entrySet()) { + writer.print(" \"" + entry.getKey() + "\": "); + if (entry.getValue() instanceof String) { + writer.print("\"" + escapeJson(entry.getValue().toString()) + "\""); + } else { + writer.print(entry.getValue()); + } + + if (++inputCount < path.inputs.size()) { + writer.println(","); + } else { + writer.println(); + } + } + + writer.println(" },"); + writer.println(" \"pathConstraints\": ["); + + // Write constraints + for (int j = 0; j < path.constraints.size(); j++) { + writer.print(" \"" + escapeJson(path.constraints.get(j).toString()) + "\""); + if (j < path.constraints.size() - 1) { + writer.println(","); + } else { + writer.println(); + } + } + + writer.println(" ],"); + writer.println(" \"numConstraints\": " + path.constraints.size() + ","); + writer.println(" \"executionTimeMs\": " + path.executionTimeMs); + writer.print(" }"); + + if (i < paths.size() - 1) { + writer.println(","); + } else { + writer.println(); + } + } + + writer.println("]"); + writer.flush(); + + } catch (IOException e) { + System.err.println("Error writing results to JSON: " + e.getMessage()); + } + } + + /** + * Export multi-variable path exploration results to JSON. + * Variable names are extracted from the path records. + * + * @param paths List of explored paths + * @param filename Output filename + */ + public static void exportMultiVarResults(List paths, String filename) { + try { + // Extract variable names from the first path record + List variableNames = new java.util.ArrayList<>(); + if (!paths.isEmpty() && paths.get(0).inputs != null) { + variableNames.addAll(paths.get(0).inputs.keySet()); + java.util.Collections.sort(variableNames); // Sort for consistent ordering + } + + StringBuilder json = new StringBuilder(); + json.append("{\n"); + json.append(" \"total_paths\": ").append(paths.size()).append(",\n"); + json.append(" \"num_variables\": ").append(variableNames.size()).append(",\n"); + json.append(" \"variable_names\": ["); + + for (int i = 0; i < variableNames.size(); i++) { + json.append("\"").append(variableNames.get(i)).append("\""); + if (i < variableNames.size() - 1) json.append(", "); + } + json.append("],\n"); + + json.append(" \"paths\": [\n"); + + for (int i = 0; i < paths.size(); i++) { + PathExplorer.PathRecord path = paths.get(i); + json.append(" {\n"); + json.append(" \"path_id\": ").append(path.pathId).append(",\n"); + + // Format inputs + json.append(" \"inputs\": {"); + boolean first = true; + for (Map.Entry entry : path.inputs.entrySet()) { + if (!first) json.append(", "); + json.append("\"").append(entry.getKey()).append("\": ").append(entry.getValue()); + first = false; + } + json.append("},\n"); + + // Format constraints + json.append(" \"constraints\": ["); + for (int j = 0; j < path.constraints.size(); j++) { + json.append("\"") + .append(escapeJson(path.constraints.get(j).toString())) + .append("\""); + if (j < path.constraints.size() - 1) json.append(", "); + } + json.append("],\n"); + + json.append(" \"num_constraints\": ") + .append(path.constraints.size()) + .append(",\n"); + json.append(" \"execution_time_ms\": ") + .append(path.executionTimeMs) + .append("\n"); + json.append(" }"); + if (i < paths.size() - 1) json.append(","); + json.append("\n"); + } + + json.append(" ]\n"); + json.append("}\n"); + + Path outputPath = Paths.get(filename); + Files.write(outputPath, json.toString().getBytes()); + + System.out.println( + "\n[PathExplorationHelper:exportMultiVarResults] Saved results to: " + outputPath.toAbsolutePath()); + + } catch (IOException e) { + System.err.println( + "[PathExplorationHelper:exportMultiVarResults] Error saving JSON results: " + e.getMessage()); + } + } + + /** + * Escape special characters for JSON output. + * + * @param str String to escape + * @return Escaped string + */ + private static String escapeJson(String str) { + return str.replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\n", "\\n") + .replace("\r", "\\r") + .replace("\t", "\\t"); + } +} diff --git a/original-galette-readme.md b/original-galette-readme.md new file mode 100644 index 0000000..9650e46 --- /dev/null +++ b/original-galette-readme.md @@ -0,0 +1,192 @@ +# Galette + +Galette is a system for performing dynamic taint tracking in the Java Virtual Machine (JVM). +Galette uses Java bytecode instrumentation to associate labels, also called "taint tags", +with program data and to propagate these labels along information "flows" at runtime. + +Galette requires Java 17 to build, but it can also be used on Java 8 through 21. + +## Building Galette + +### Requirements + +* Java Development Kit (JDK) 17 +* [Apache Maven](https://maven.apache.org/) 3.6.0+ + +### Steps + +1. Clone or download this repository. +2. Ensure that some version of the JDK 17 is installed. + We recommend using a JDK from [Oracle](https://www.oracle.com/java/technologies/downloads/), + the [Adoptium Working Group](https://adoptium.net/temurin/releases/), or [Amazon](https://aws.amazon.com/corretto/). +3. Set the JAVA_HOME environmental variable to the path of this JDK installation. + On Linux and Mac, this can be done by running `export JAVA_HOME=`, where <PATH-TO-JDK> is the path + of the JDK installation. +4. Ensure that you have installed Apache Maven 3.6.0+. + Directions for [downloading](https://maven.apache.org/download.cgi) + and [installing](https://maven.apache.org/install.html) Maven are available on the project page for Maven. +5. In the root directory of this project (the one where this README file is located), run `mvn -DskipTests install`. + This will compile Galette's source code, package the source code into JARs, and install the produced JARs into your local Maven repository. + +## Running Galette's Tests + +Once you have built Galette according to the directions described above, you can run the tests and examples. +Although Galette currently requires Java 17 to build, it can also be used on Java 8. +If you would like to run Galette's tests on Java 8, build Galette using Java 17, then change the +`JAVA_HOME` environmental variable to the path of a JDK 8 installation before running the tests. +To run the root directory of this project, run `mvn -pl :galette-integration-tests verify`. +The first time you run this command, Maven will invoke the Galette Maven plugin to create +Galette-instrumented Java installations. +These instrumented Java installations are cached for future use and will not be recreated unless one of the +Galette JARs, the configuration used to create them, or the value of `JAVA_HOME` changes. +Once the Galette Maven plugin finishes creating the instrumented Java installations, the tests will run. +These tests demonstrate how Galette can be used and are a good reference when first learning Galette. + +## Creating an Instrumented Java Installation + +To track the flow of information through classes in the Java Class Library (JCL), such as `java.lang.String` +and `java.util.List`, Galette must instrument the bytecode of JCL classes. +Therefore, the first step when using Galette is to create an instrumented Java installation +(i.e., Java Development Kit or Java Runtime Environment). +A Java installation can be downloaded from [Oracle](https://www.oracle.com/java/technologies/downloads/) or +the [Adoptium Working Group](https://adoptium.net/temurin/releases/). +Once you have obtained a Java installation, it can be instrumented using Galette's +Maven plugin. + +**Important note on Oracle's Java installations:** +Oracle's Java installations require that the JAR that contains the cryptography routines `jce.jar` be signed by +Oracle for export control purposes. +Galette instrumentation will break these signatures. +Therefore, it is not possible to use Galette with Oracle's Java installation *and* use the +cryptography functionality. + +### Using the Galette Maven Plugin +To create a Galette-instrumented Java installation as part of your Maven build, add the +`galette-maven-plugin` in your pom: + +``` + + ... + + ... + + edu.neu.ccs.prl.galette + galette-maven-plugin + VERSION + + ... + + ... + +``` + +See the documentation for the +[InstrumentMojo](galette-maven-plugin/src/main/java/edu/neu/ccs/prl/galette/plugin/InstrumentMojo.java) +for more information about the Galette Maven plugin. + +### Using the Galette Instrument JAR + +Galette-instrumented Java installations can also be created using the Galette instrument JAR by running: + +```shell +/bin/java -jar +``` + +Where: +- `` is the path of the Java installation to be instrumented. +- `` is the path of Galette's instrument JAR. + If you built Galette according to instructions in this manual, this will be + `galette-instrument/target/galette-instrument-1.0.0-SNAPSHOT.jar`. +- `` is the location to which the instrumented Java installation should be written. + +## Running Your Application with Galette +Once you have created an instrumented Java installation, you can use Galette to track information flows in any Java application. +All Java applications are run by invoking the `java` executable. +This invocation comes in two forms. + +The first form specifies the class to be invoked: +```shell +java [ ] [ ... ] +``` + +The second form specifies a JAR file. +```shell +java [ ] -jar [ ... ] +``` + +Where: +- `` is the name of the class to be invoked. +- `` is an argument passed to the main function. +- `` specifies command-line options used to configure the Java runtime. +- `` is the name of the jar file to be invoked. + +When using Galette you will modify these commands in two ways. +First, you will invoke the `java` executable in the instrumented Java installation that you created instead of the +original `java` executable. +Second, you will add Java options that will configure the Java runtime to load Galette as a Java programming language agent. + +For class-based `java` invocations, use: +```shell +/bin/java [ ] -Xbootclasspath/a: -javaagent: [ ... ] +``` + +For JAR-based invocations, use: +```shell +/bin/java [ ] -Xbootclasspath/a: -javaagent: -jar [ ... ] +``` + +Where: +- `` is the name of the class to be invoked. +- `` is an argument passed to the main function. +- `` specifies command-line options used to configure the Java runtime. +- `` is the name of the jar file to be invoked. +- `` is the path of Galette's agent JAR. +If you built Galette according to instructions in this manual, this will be +`galette-agent/target/galette-agent-1.0.0-SNAPSHOT.jar`. +- `` is the path of the Galette-instrumented Java installation that you created. + + +## Interacting with Galette +The [`edu.neu.ccs.prl.galette.internal.runtime.Tainter`](galette-agent/src/main/java/edu/neu/ccs/prl/galette/internal/runtime/Tainter.java) +class provides methods that can be used to associate taint tags with values and to access the taint tag associated with a value. + +To associate a taint tag with a value, start by creating an instance of +[`edu.neu.ccs.prl.galette.internal.runtime.Tag`](galette-agent/src/main/java/edu/neu/ccs/prl/galette/internal/runtime/Tag.java). +Now, call the static method `Tainter#setTag`, passing it the value and the tag you created: +```java +import edu.neu.ccs.prl.galette.internal.runtime.Tainter; +import edu.neu.ccs.prl.galette.internal.runtime.Tag; + +public class SetExample { + public static int set(int x) { + Tag tag = Tag.of("my_label"); + return Tainter.setTag(x, tag); + } +} +``` + +To access the taint tag associated with a value, call the static method `Tainter#getTag`, +passing it the value whose tag you want to retrieve: +```java +import edu.neu.ccs.prl.galette.internal.runtime.Tainter; +import edu.neu.ccs.prl.galette.internal.runtime.Tag; + +public class GetExample { + public static void get(int x) { + Tag tag = Tainter.getTag(x); + Object[] labels = Tag.getLabels(tag); + assert(labels[0].equals("my_label")); + } +} +``` + +For more examples, see the tests in the [`galette-integration-tests`](galette-integration-tests) module. + +## Acknowledgements + +Galette makes use of the following libraries: + +* [ASM](http://asm.ow2.org/), (c) INRIA, France + Telecom, [license](http://asm.ow2.org/license.html) +* [Apache Harmony](https://harmony.apache.org), (c) The Apache Software + Foundation, [license](http://www.apache.org/licenses/LICENSE-2.0) \ No newline at end of file