Coverage for src / competitive_verifier / oj / languages / java.py: 94%
31 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-04-26 12:38 +0900
« prev ^ index » next coverage.py v7.13.1, created at 2026-04-26 12:38 +0900
1import pathlib
2from collections.abc import Sequence
3from logging import getLogger
4from typing import Any, Literal
6from pydantic import Field, ValidationInfo, field_validator
8from .base import LanguageEnvironment, OjVerifyUserDefinedConfig
9from .user_defined import UserDefinedLanguage
11logger = getLogger(__name__)
14class OjVerifyJavaConfig(OjVerifyUserDefinedConfig):
15 execute: None = None # pyright: ignore[reportIncompatibleVariableOverride]
17 @field_validator("execute", "compile", mode="before")
18 @classmethod
19 def name_must_contain_space(cls, v: Any, info: ValidationInfo) -> None: # noqa: ANN401
20 if v is None: 20 ↛ 21line 20 didn't jump to line 21 because the condition on line 20 was never true
21 return
22 raise ValueError(f'You cannot overwrite "{info.field_name}" for Java language')
25class JavaLanguageEnvironment(LanguageEnvironment):
26 @property
27 def name(self) -> str:
28 return "Java"
30 def get_compile_command(
31 self, path: pathlib.Path, *, basedir: pathlib.Path, tempdir: pathlib.Path
32 ) -> list[str]:
33 return ["javac", str(basedir / path)]
35 def get_execute_command(
36 self, path: pathlib.Path, *, basedir: pathlib.Path, tempdir: pathlib.Path
37 ) -> list[str]:
38 relative_path = (basedir / path).relative_to(basedir)
39 class_path = ".".join([*relative_path.parent.parts, relative_path.stem])
40 return ["java", class_path]
43class JavaLanguage(UserDefinedLanguage):
44 extension: Literal["java"] = "java" # pyright: ignore[reportIncompatibleVariableOverride]
45 config: OjVerifyJavaConfig = Field(default_factory=OjVerifyJavaConfig) # pyright: ignore[reportIncompatibleVariableOverride]
47 def list_environments(
48 self, path: pathlib.Path, *, basedir: pathlib.Path
49 ) -> Sequence[LanguageEnvironment]:
50 return [JavaLanguageEnvironment()]