Skip to content

Commit 112cd5a

Browse files
author
Martin Krulis
committed
Fixing Java compilation.
1 parent f9865d6 commit 112cd5a

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/JavacCompilationBox.php

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55
use App\Exceptions\ExerciseConfigException;
66
use App\Helpers\ExerciseConfig\Compilation\CompilationParams;
77
use App\Helpers\ExerciseConfig\Pipeline\Box\Params\ConfigParams;
8+
use App\Helpers\ExerciseConfig\Pipeline\Box\Params\Priorities;
9+
use App\Helpers\ExerciseConfig\Pipeline\Box\Params\TaskCommands;
10+
use App\Helpers\ExerciseConfig\Pipeline\Box\Params\TaskType;
811
use App\Helpers\ExerciseConfig\Pipeline\Ports\Port;
912
use App\Helpers\ExerciseConfig\Pipeline\Ports\PortMeta;
1013
use App\Helpers\ExerciseConfig\VariableTypes;
14+
use App\Helpers\JobConfig\Tasks\Task;
1115
use Nette\Utils\Strings;
1216

1317

@@ -19,6 +23,7 @@ class JavacCompilationBox extends CompilationBox
1923
/** Type key */
2024
public static $JAVAC_TYPE = "javac";
2125
public static $JAVAC_BINARY = "/usr/bin/javac";
26+
public static $COMPILATION_SUBDIR = 'compiled-classes';
2227
public static $CLASS_FILES_WILDCARD = "*.class";
2328
public static $JAVA_FILES_EXT_REGEX = "[.java]";
2429
public static $CLASS_FILES_PORT_KEY = "class-files";
@@ -101,27 +106,39 @@ public function getDefaultName(): string {
101106
* @throws ExerciseConfigException
102107
*/
103108
public function compile(CompilationParams $params): array {
104-
$task = $this->compileBaseTask($params);
105-
$task->setCommandBinary(self::$JAVAC_BINARY);
109+
// Create a separate directory where all *.class files will end up.
110+
$mkdirTask = new Task();
111+
$mkdirTask->setPriority(Priorities::$INITIATION);
112+
$mkdirTask->setType(TaskType::$INITIATION);
113+
$mkdirTask->setCommandBinary(TaskCommands::$MKDIR);
114+
$mkdirTask->setCommandArguments([
115+
ConfigParams::$SOURCE_DIR . $this->getDirectory() . ConfigParams::$PATH_DELIM . self::$COMPILATION_SUBDIR
116+
]);
117+
118+
// Prepare compile task
119+
$compileTask = $this->compileBaseTask($params);
120+
$compileTask->setCommandBinary(self::$JAVAC_BINARY);
106121

107122
$args = [];
108123
if ($this->hasInputPortValue(self::$ARGS_PORT_KEY)) {
109124
$args = $this->getInputPortValue(self::$ARGS_PORT_KEY)->getValue();
110125
}
111126

127+
// First order of business -- make sure all *.class files will be yielded to prepared dir (but in eval box)
128+
$args[] = '-d';
129+
$args[] = ConfigParams::$EVAL_DIR . self::$COMPILATION_SUBDIR;
130+
112131
// if there were some provided jar files, lets add them to the command line args
113132
$classpath = JavaUtils::constructClasspath($this->getInputPortValue(self::$JAR_FILES_PORT_KEY));
114133
$args = array_merge($args, $classpath);
115134

116135
// set wildcards for class files, which are derived from compiled classes
117-
$wildClassFiles = [];
118-
foreach ($this->getInputPortValue(self::$SOURCE_FILES_PORT_KEY)->getValueAsArray() as $srcFile) {
119-
$className = Strings::replace($srcFile, self::$JAVA_FILES_EXT_REGEX, "");
120-
$wildClassFiles[] = $className . self::$CLASS_FILES_WILDCARD;
121-
}
136+
$wildClassFiles = [
137+
self::$COMPILATION_SUBDIR . ConfigParams::$PATH_DELIM . self::$CLASS_FILES_WILDCARD
138+
];
122139
$this->getOutputPortValue(self::$CLASS_FILES_PORT_KEY)->setValue($wildClassFiles);
123140

124-
$task->setCommandArguments(
141+
$compileTask->setCommandArguments(
125142
array_merge(
126143
$args,
127144
$this->getInputPortValue(self::$SOURCE_FILES_PORT_KEY)
@@ -131,7 +148,7 @@ public function compile(CompilationParams $params): array {
131148
)
132149
);
133150

134-
return [$task];
151+
return [$mkdirTask, $compileTask];
135152
}
136153

137154
}

0 commit comments

Comments
 (0)