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

pantsbuild / pants / 22285099215

22 Feb 2026 08:52PM UTC coverage: 75.854% (-17.1%) from 92.936%
22285099215

Pull #23121

github

web-flow
Merge c7299df9c into ba8359840
Pull Request #23121: fix issue with optional fields in dependency validator

28 of 29 new or added lines in 2 files covered. (96.55%)

11174 existing lines in 400 files now uncovered.

53694 of 70786 relevant lines covered (75.85%)

1.88 hits per line

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

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

6
from pants.backend.java.bsp.spec import JavacOptionsItem, JavacOptionsParams, JavacOptionsResult
1✔
7
from pants.backend.java.target_types import JavaFieldSet, JavaSourceField
1✔
8
from pants.base.build_root import BuildRoot
1✔
9
from pants.bsp.protocol import BSPHandlerMapping
1✔
10
from pants.bsp.spec.base import BuildTargetIdentifier
1✔
11
from pants.bsp.util_rules.lifecycle import BSPLanguageSupport
1✔
12
from pants.bsp.util_rules.queries import compute_handler_query_rules
1✔
13
from pants.bsp.util_rules.targets import (
1✔
14
    BSPBuildTargetsMetadataRequest,
15
    BSPBuildTargetsMetadataResult,
16
    BSPCompileRequest,
17
    BSPCompileResult,
18
    BSPResourcesRequest,
19
    BSPResourcesResult,
20
)
21
from pants.engine.internals.selectors import concurrently
1✔
22
from pants.engine.rules import collect_rules, implicitly, rule
1✔
23
from pants.engine.target import FieldSet
1✔
24
from pants.engine.unions import UnionRule
1✔
25
from pants.jvm.bsp.compile import _jvm_bsp_compile, jvm_classes_directory
1✔
26
from pants.jvm.bsp.compile import rules as jvm_compile_rules
1✔
27
from pants.jvm.bsp.resources import _jvm_bsp_resources
1✔
28
from pants.jvm.bsp.resources import rules as jvm_resources_rules
1✔
29
from pants.jvm.compile import ClasspathEntryRequestFactory
1✔
30
from pants.jvm.target_types import JvmResolveField
1✔
31

32
LANGUAGE_ID = "java"
1✔
33

34
_logger = logging.getLogger(__name__)
1✔
35

36

37
class JavaBSPLanguageSupport(BSPLanguageSupport):
1✔
38
    language_id = LANGUAGE_ID
1✔
39
    can_compile = True
1✔
40
    can_provide_resources = True
1✔
41

42

43
@dataclass(frozen=True)
1✔
44
class JavaMetadataFieldSet(FieldSet):
1✔
45
    required_fields = (JavaSourceField, JvmResolveField)
1✔
46

47
    source: JavaSourceField
48
    resolve: JvmResolveField
49

50

51
class JavaBSPBuildTargetsMetadataRequest(BSPBuildTargetsMetadataRequest):
1✔
52
    language_id = LANGUAGE_ID
1✔
53
    can_merge_metadata_from = ()
1✔
54
    field_set_type = JavaMetadataFieldSet
1✔
55

56
    resolve_prefix = "jvm"
1✔
57
    resolve_field = JvmResolveField
1✔
58

59

60
@rule
1✔
61
async def bsp_resolve_java_metadata(
1✔
62
    _: JavaBSPBuildTargetsMetadataRequest,
63
) -> BSPBuildTargetsMetadataResult:
UNCOV
64
    return BSPBuildTargetsMetadataResult()
×
65

66

67
# -----------------------------------------------------------------------------------------------
68
# Javac Options Request
69
# See https://build-server-protocol.github.io/docs/extensions/java.html#javac-options-request
70
# -----------------------------------------------------------------------------------------------
71

72

73
class JavacOptionsHandlerMapping(BSPHandlerMapping):
1✔
74
    method_name = "buildTarget/javacOptions"
1✔
75
    request_type = JavacOptionsParams
1✔
76
    response_type = JavacOptionsResult
1✔
77

78

79
@dataclass(frozen=True)
1✔
80
class HandleJavacOptionsRequest:
1✔
81
    bsp_target_id: BuildTargetIdentifier
82

83

84
@dataclass(frozen=True)
1✔
85
class HandleJavacOptionsResult:
1✔
86
    item: JavacOptionsItem
87

88

89
@rule
1✔
90
async def handle_bsp_java_options_request(
1✔
91
    request: HandleJavacOptionsRequest,
92
    build_root: BuildRoot,
93
) -> HandleJavacOptionsResult:
94
    return HandleJavacOptionsResult(
×
95
        JavacOptionsItem(
96
            target=request.bsp_target_id,
97
            options=(),
98
            classpath=(),
99
            # TODO: Why is this hardcoded and not under pants_workdir?
100
            class_directory=build_root.pathlib_path.joinpath(
101
                ".pants.d", "bsp", jvm_classes_directory(request.bsp_target_id)
102
            ).as_uri(),
103
        )
104
    )
105

106

107
@rule
1✔
108
async def bsp_javac_options_request(request: JavacOptionsParams) -> JavacOptionsResult:
1✔
109
    results = await concurrently(
×
110
        handle_bsp_java_options_request(HandleJavacOptionsRequest(btgt), **implicitly())
111
        for btgt in request.targets
112
    )
113
    return JavacOptionsResult(items=tuple(result.item for result in results))
×
114

115

116
# -----------------------------------------------------------------------------------------------
117
# Compile Request
118
# -----------------------------------------------------------------------------------------------
119

120

121
@dataclass(frozen=True)
1✔
122
class JavaBSPCompileRequest(BSPCompileRequest):
1✔
123
    field_set_type = JavaFieldSet
1✔
124

125

126
@rule
1✔
127
async def bsp_java_compile_request(
1✔
128
    request: JavaBSPCompileRequest, classpath_entry_request: ClasspathEntryRequestFactory
129
) -> BSPCompileResult:
UNCOV
130
    result: BSPCompileResult = await _jvm_bsp_compile(request, classpath_entry_request)
×
UNCOV
131
    return result
×
132

133

134
# -----------------------------------------------------------------------------------------------
135
# Resources Request
136
# -----------------------------------------------------------------------------------------------
137

138

139
@dataclass(frozen=True)
1✔
140
class JavaBSPResourcesRequest(BSPResourcesRequest):
1✔
141
    field_set_type = JavaFieldSet
1✔
142

143

144
@rule
1✔
145
async def bsp_java_resources_request(
1✔
146
    request: JavaBSPResourcesRequest,
147
    build_root: BuildRoot,
148
) -> BSPResourcesResult:
UNCOV
149
    result: BSPResourcesResult = await _jvm_bsp_resources(request, build_root)
×
UNCOV
150
    return result
×
151

152

153
def rules():
1✔
154
    base_rules = (
1✔
155
        *collect_rules(),
156
        *jvm_compile_rules(),
157
        *jvm_resources_rules(),
158
        UnionRule(BSPLanguageSupport, JavaBSPLanguageSupport),
159
        UnionRule(BSPBuildTargetsMetadataRequest, JavaBSPBuildTargetsMetadataRequest),
160
        UnionRule(BSPHandlerMapping, JavacOptionsHandlerMapping),
161
        UnionRule(BSPCompileRequest, JavaBSPCompileRequest),
162
        UnionRule(BSPResourcesRequest, JavaBSPResourcesRequest),
163
    )
164
    return (*base_rules, *compute_handler_query_rules(base_rules))
1✔
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

© 2026 Coveralls, Inc