• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 18517631058

15 Oct 2025 04:18AM UTC coverage: 69.207% (-11.1%) from 80.267%
18517631058

Pull #22745

github

web-flow
Merge 642a76ca1 into 99919310e
Pull Request #22745: [windows] Add windows support in the stdio crate.

53815 of 77759 relevant lines covered (69.21%)

2.42 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/python/pants/backend/java/lint/google_java_format/rules.py
1
# Copyright 2021 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3
import logging
×
4
from dataclasses import dataclass
×
5

6
from pants.backend.java.lint.google_java_format.skip_field import SkipGoogleJavaFormatField
×
7
from pants.backend.java.lint.google_java_format.subsystem import GoogleJavaFormatSubsystem
×
8
from pants.backend.java.target_types import JavaSourceField
×
9
from pants.core.goals.fmt import FmtResult, FmtTargetsRequest
×
10
from pants.core.goals.resolves import ExportableTool
×
11
from pants.core.util_rules.partitions import PartitionerType
×
12
from pants.engine.process import execute_process_or_raise
×
13
from pants.engine.rules import collect_rules, implicitly, rule
×
14
from pants.engine.target import FieldSet, Target
×
15
from pants.engine.unions import UnionRule
×
16
from pants.jvm.jdk_rules import InternalJdk, JvmProcess
×
17
from pants.jvm.resolve import jvm_tool
×
18
from pants.jvm.resolve.coursier_fetch import ToolClasspathRequest, materialize_classpath_for_tool
×
19
from pants.jvm.resolve.jvm_tool import GenerateJvmLockfileFromTool
×
20
from pants.util.logging import LogLevel
×
21
from pants.util.strutil import pluralize
×
22

23
logger = logging.getLogger(__name__)
×
24

25

26
@dataclass(frozen=True)
×
27
class GoogleJavaFormatFieldSet(FieldSet):
×
28
    required_fields = (JavaSourceField,)
×
29

30
    source: JavaSourceField
×
31

32
    @classmethod
×
33
    def opt_out(cls, tgt: Target) -> bool:
×
34
        return tgt.get(SkipGoogleJavaFormatField).value
×
35

36

37
class GoogleJavaFormatRequest(FmtTargetsRequest):
×
38
    field_set_type = GoogleJavaFormatFieldSet
×
39
    tool_subsystem = GoogleJavaFormatSubsystem
×
40
    partitioner_type = PartitionerType.DEFAULT_SINGLE_PARTITION
×
41

42

43
@rule(desc="Format with Google Java Format", level=LogLevel.DEBUG)
×
44
async def google_java_format_fmt(
×
45
    request: GoogleJavaFormatRequest.Batch,
46
    tool: GoogleJavaFormatSubsystem,
47
    jdk: InternalJdk,
48
) -> FmtResult:
49
    lockfile_request = GenerateJvmLockfileFromTool.create(tool)
×
50
    tool_classpath = await materialize_classpath_for_tool(
×
51
        ToolClasspathRequest(lockfile=lockfile_request)
52
    )
53

54
    toolcp_relpath = "__toolcp"
×
55
    extra_immutable_input_digests = {
×
56
        toolcp_relpath: tool_classpath.digest,
57
    }
58

59
    maybe_java11_or_higher_options = []
×
60
    if jdk.jre_major_version >= 11:
×
61
        maybe_java11_or_higher_options = [
×
62
            "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
63
            "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
64
            "--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
65
            "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
66
            "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
67
        ]
68

69
    args = [
×
70
        *maybe_java11_or_higher_options,
71
        "com.google.googlejavaformat.java.Main",
72
        *(["--aosp"] if tool.aosp else []),
73
        "--replace",
74
        *request.files,
75
    ]
76

77
    result = await execute_process_or_raise(
×
78
        **implicitly(
79
            JvmProcess(
80
                jdk=jdk,
81
                argv=args,
82
                classpath_entries=tool_classpath.classpath_entries(toolcp_relpath),
83
                input_digest=request.snapshot.digest,
84
                extra_jvm_options=tool.jvm_options,
85
                extra_immutable_input_digests=extra_immutable_input_digests,
86
                extra_nailgun_keys=extra_immutable_input_digests,
87
                output_files=request.files,
88
                description=f"Run Google Java Format on {pluralize(len(request.files), 'file')}.",
89
                level=LogLevel.DEBUG,
90
            ),
91
        )
92
    )
93
    return await FmtResult.create(request, result)
×
94

95

96
def rules():
×
97
    return [
×
98
        *collect_rules(),
99
        *jvm_tool.rules(),
100
        *GoogleJavaFormatRequest.rules(),
101
        UnionRule(ExportableTool, GoogleJavaFormatSubsystem),
102
    ]
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc