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

1import pathlib 

2from collections.abc import Sequence 

3from logging import getLogger 

4from typing import Any, Literal 

5 

6from pydantic import Field, ValidationInfo, field_validator 

7 

8from .base import LanguageEnvironment, OjVerifyUserDefinedConfig 

9from .user_defined import UserDefinedLanguage 

10 

11logger = getLogger(__name__) 

12 

13 

14class OjVerifyJavaConfig(OjVerifyUserDefinedConfig): 

15 execute: None = None # pyright: ignore[reportIncompatibleVariableOverride] 

16 

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') 

23 

24 

25class JavaLanguageEnvironment(LanguageEnvironment): 

26 @property 

27 def name(self) -> str: 

28 return "Java" 

29 

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)] 

34 

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] 

41 

42 

43class JavaLanguage(UserDefinedLanguage): 

44 extension: Literal["java"] = "java" # pyright: ignore[reportIncompatibleVariableOverride] 

45 config: OjVerifyJavaConfig = Field(default_factory=OjVerifyJavaConfig) # pyright: ignore[reportIncompatibleVariableOverride] 

46 

47 def list_environments( 

48 self, path: pathlib.Path, *, basedir: pathlib.Path 

49 ) -> Sequence[LanguageEnvironment]: 

50 return [JavaLanguageEnvironment()]