Skip to content

Commit

Permalink
Hoist generic JVM types out of java backend and into jvm subdir. (#13110
Browse files Browse the repository at this point in the history
)

These are the most obvious types that were reused by the WIP Scala backend. Happy to change names or further refactor this, for now I'm trying to push these moves as I find them to avoid merge churn while I continue to work on Scala integration.

[ci skip-rust]
[ci skip-build-wheels]
  • Loading branch information
patricklaw authored Oct 5, 2021
1 parent a744978 commit 45a144c
Show file tree
Hide file tree
Showing 15 changed files with 124 additions and 118 deletions.
4 changes: 2 additions & 2 deletions src/python/pants/backend/experimental/java/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
# Licensed under the Apache License, Version 2.0 (see LICENSE).

from pants.backend.java import classpath, tailor
from pants.backend.java import util_rules as java_util_rules
from pants.backend.java.compile import javac
from pants.backend.java.dependency_inference import (
import_parser,
Expand All @@ -21,6 +20,7 @@
)
from pants.backend.java.target_types import rules as target_types_rules
from pants.backend.java.test import junit
from pants.jvm import jdk_rules
from pants.jvm import util_rules as jvm_util_rules
from pants.jvm.goals import coursier
from pants.jvm.resolve import coursier_fetch, coursier_setup
Expand Down Expand Up @@ -55,6 +55,6 @@ def rules():
*dependency_inference_rules.rules(),
*tailor.rules(),
*jvm_util_rules.rules(),
*java_util_rules.rules(),
*jdk_rules.rules(),
*target_types_rules(),
]
3 changes: 2 additions & 1 deletion src/python/pants/backend/java/classpath.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
from dataclasses import dataclass
from typing import Callable, Iterator

from pants.backend.java.compile.javac import CompiledClassfiles, CompileJavaSourceRequest
from pants.backend.java.compile.javac import CompileJavaSourceRequest
from pants.engine.fs import AddPrefix, Digest, MergeDigests, Snapshot
from pants.engine.rules import Get, MultiGet, collect_rules, rule
from pants.engine.target import CoarsenedTargets, Targets
from pants.jvm.compile import CompiledClassfiles
from pants.jvm.resolve.coursier_fetch import (
CoursierLockfileForTargetRequest,
CoursierResolvedLockfile,
Expand Down
78 changes: 2 additions & 76 deletions src/python/pants/backend/java/compile/javac.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,13 @@

import logging
from dataclasses import dataclass
from enum import Enum
from itertools import chain

from pants.backend.java.target_types import JavaSourceField
from pants.backend.java.util_rules import JdkSetup
from pants.core.goals.check import CheckRequest, CheckResult, CheckResults
from pants.core.util_rules.archive import ZipBinary
from pants.core.util_rules.source_files import SourceFiles, SourceFilesRequest
from pants.engine.addresses import Addresses
from pants.engine.engine_aware import EngineAwareReturnType
from pants.engine.fs import (
EMPTY_DIGEST,
AddPrefix,
Expand All @@ -28,6 +25,8 @@
from pants.engine.rules import Get, MultiGet, collect_rules, rule
from pants.engine.target import CoarsenedTarget, CoarsenedTargets, FieldSet, Sources, Targets
from pants.engine.unions import UnionRule
from pants.jvm.compile import CompiledClassfiles, CompileResult, FallibleCompiledClassfiles
from pants.jvm.jdk_rules import JdkSetup
from pants.jvm.resolve.coursier_fetch import (
CoursierLockfileForTargetRequest,
CoursierResolvedLockfile,
Expand All @@ -36,7 +35,6 @@
)
from pants.jvm.resolve.coursier_setup import Coursier
from pants.util.logging import LogLevel
from pants.util.strutil import strip_v2_chroot_path

logger = logging.getLogger(__name__)

Expand All @@ -57,78 +55,6 @@ class CompileJavaSourceRequest:
component: CoarsenedTarget


@dataclass(frozen=True)
class CompiledClassfiles:
"""The outputs of a compilation contained in either zero or one JAR file.
TODO: Rename this type to align with the guarantee about its content.
"""

digest: Digest


class CompileResult(Enum):
SUCCEEDED = "succeeded"
FAILED = "failed"
DEPENDENCY_FAILED = "dependency failed"


@dataclass(frozen=True)
class FallibleCompiledClassfiles(EngineAwareReturnType):
description: str
result: CompileResult
output: CompiledClassfiles | None
exit_code: int
stdout: str | None = None
stderr: str | None = None

@classmethod
def from_fallible_process_result(
cls,
description: str,
process_result: FallibleProcessResult,
output: CompiledClassfiles | None,
*,
strip_chroot_path: bool = False,
) -> FallibleCompiledClassfiles:
def prep_output(s: bytes) -> str:
return strip_v2_chroot_path(s) if strip_chroot_path else s.decode()

exit_code = process_result.exit_code
# TODO: Coursier renders this line on macOS.
stderr = "\n".join(
line
for line in prep_output(process_result.stderr).splitlines()
if line != "setrlimit to increase file descriptor limit failed, errno 22"
)
return cls(
description=description,
result=(CompileResult.SUCCEEDED if exit_code == 0 else CompileResult.FAILED),
output=output,
exit_code=exit_code,
stdout=prep_output(process_result.stdout),
stderr=stderr,
)

def level(self) -> LogLevel:
return LogLevel.ERROR if self.exit_code != 0 else LogLevel.INFO

def message(self) -> str:
message = self.description
message += (
" succeeded." if self.exit_code == 0 else f" failed (exit code {self.exit_code})."
)
if self.stdout:
message += f"\n{self.stdout}"
if self.stderr:
message += f"\n{self.stderr}"
return message

def cacheable(self) -> bool:
# Failed compile outputs should be re-rendered in every run.
return self.exit_code == 0


@rule(desc="Compile with javac")
async def compile_java_source(
bash: BashBinary,
Expand Down
13 changes: 4 additions & 9 deletions src/python/pants/backend/java/compile/javac_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,7 @@

import pytest

from pants.backend.java import util_rules as java_util_rules
from pants.backend.java.compile.javac import (
CompiledClassfiles,
CompileJavaSourceRequest,
CompileResult,
FallibleCompiledClassfiles,
JavacCheckRequest,
)
from pants.backend.java.compile.javac import CompileJavaSourceRequest, JavacCheckRequest
from pants.backend.java.compile.javac import rules as javac_rules
from pants.backend.java.target_types import JavaSourcesGeneratorTarget
from pants.backend.java.target_types import rules as target_types_rules
Expand All @@ -30,6 +23,8 @@
from pants.engine.process import Process, ProcessResult
from pants.engine.rules import Get, MultiGet, rule
from pants.engine.target import CoarsenedTarget, CoarsenedTargets, Targets
from pants.jvm import jdk_rules
from pants.jvm.compile import CompiledClassfiles, CompileResult, FallibleCompiledClassfiles
from pants.jvm.goals.coursier import rules as coursier_rules
from pants.jvm.resolve.coursier_fetch import (
Coordinate,
Expand Down Expand Up @@ -61,7 +56,7 @@ def rule_runner() -> RuleRunner:
*util_rules(),
*target_types_rules(),
*coursier_rules(),
*java_util_rules.rules(),
*jdk_rules.rules(),
QueryRule(CheckResults, (JavacCheckRequest,)),
QueryRule(FallibleCompiledClassfiles, (CompileJavaSourceRequest,)),
QueryRule(CompiledClassfiles, (CompileJavaSourceRequest,)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@
)
from pants.backend.java.target_types import JavaSourceField, JavaSourcesGeneratorTarget
from pants.backend.java.target_types import rules as java_target_rules
from pants.backend.java.util_rules import rules as java_util_rules
from pants.core.util_rules import config_files, source_files
from pants.core.util_rules.external_tool import rules as external_tool_rules
from pants.engine.addresses import UnparsedAddressInputs
from pants.engine.process import rules as process_rules
from pants.engine.target import Targets
from pants.jvm.jdk_rules import rules as java_util_rules
from pants.jvm.resolve.coursier_fetch import rules as coursier_fetch_rules
from pants.jvm.resolve.coursier_setup import rules as coursier_setup_rules
from pants.jvm.testutil import maybe_skip_jdk_test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
java_parser_artifact_requirements,
)
from pants.backend.java.dependency_inference.types import JavaSourceDependencyAnalysis
from pants.backend.java.util_rules import JdkSetup
from pants.core.util_rules.source_files import SourceFiles
from pants.engine.fs import AddPrefix, Digest, DigestContents, MergeDigests
from pants.engine.process import BashBinary, FallibleProcessResult, Process, ProcessExecutionFailure
from pants.engine.rules import Get, MultiGet, collect_rules, rule
from pants.jvm.jdk_rules import JdkSetup
from pants.jvm.resolve.coursier_fetch import MaterializedClasspath, MaterializedClasspathRequest
from pants.option.global_options import GlobalOptions
from pants.util.logging import LogLevel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@

import pkg_resources

from pants.backend.java.compile.javac import CompiledClassfiles
from pants.backend.java.util_rules import JdkSetup
from pants.engine.fs import CreateDigest, Digest, Directory, FileContent, MergeDigests, RemovePrefix
from pants.engine.process import BashBinary, Process, ProcessResult
from pants.engine.rules import Get, MultiGet, collect_rules, rule
from pants.jvm.compile import CompiledClassfiles
from pants.jvm.jdk_rules import JdkSetup
from pants.jvm.resolve.coursier_fetch import (
ArtifactRequirements,
Coordinate,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import pytest

from pants.backend.java import util_rules as java_util_rules
from pants.backend.java.compile.javac import rules as javac_rules
from pants.backend.java.dependency_inference.java_parser import (
FallibleJavaSourceDependencyAnalysisResult,
Expand All @@ -25,6 +24,7 @@
from pants.engine.internals.scheduler import ExecutionError
from pants.engine.process import ProcessExecutionFailure
from pants.engine.target import Sources
from pants.jvm import jdk_rules
from pants.jvm.resolve.coursier_fetch import CoursierResolvedLockfile
from pants.jvm.resolve.coursier_fetch import rules as coursier_fetch_rules
from pants.jvm.resolve.coursier_setup import rules as coursier_setup_rules
Expand All @@ -47,7 +47,7 @@ def rule_runner() -> RuleRunner:
*javac_rules(),
*source_files.rules(),
*util_rules(),
*java_util_rules.rules(),
*jdk_rules.rules(),
QueryRule(FallibleJavaSourceDependencyAnalysisResult, (SourceFiles,)),
QueryRule(JavaSourceDependencyAnalysis, (SourceFiles,)),
QueryRule(SourceFiles, (SourceFilesRequest,)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
)
from pants.backend.java.target_types import rules as java_target_rules
from pants.backend.java.test.junit import rules as junit_rules
from pants.backend.java.util_rules import rules as java_util_rules
from pants.core.util_rules import config_files, source_files
from pants.core.util_rules.external_tool import rules as external_tool_rules
from pants.engine.addresses import Address, Addresses, UnparsedAddressInputs
Expand All @@ -30,6 +29,7 @@
InferredDependencies,
Targets,
)
from pants.jvm.jdk_rules import rules as java_util_rules
from pants.jvm.resolve.coursier_fetch import rules as coursier_fetch_rules
from pants.jvm.resolve.coursier_setup import rules as coursier_setup_rules
from pants.jvm.testutil import maybe_skip_jdk_test
Expand Down
32 changes: 14 additions & 18 deletions src/python/pants/backend/java/package/deploy_jar_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,14 @@

import pytest

from pants.backend.java import util_rules as java_util_rules
from pants.backend.java.classpath import Classpath
from pants.backend.java.classpath import rules as classpath_rules
from pants.backend.java.compile.javac import (
CompiledClassfiles,
CompileJavaSourceRequest,
FallibleCompiledClassfiles,
JavacCheckRequest,
)
from pants.backend.java.compile.javac import CompileJavaSourceRequest, JavacCheckRequest
from pants.backend.java.compile.javac import rules as javac_rules
from pants.backend.java.package.deploy_jar import DeployJarFieldSet
from pants.backend.java.package.deploy_jar import rules as deploy_jar_rules
from pants.backend.java.target_types import DeployJar, JavaSourcesGeneratorTarget
from pants.backend.java.target_types import rules as target_types_rules
from pants.backend.java.util_rules import JdkSetup
from pants.build_graph.address import Address
from pants.core.goals.check import CheckResults
from pants.core.goals.package import BuiltPackage
Expand All @@ -30,7 +23,10 @@
from pants.engine.addresses import Addresses
from pants.engine.fs import Digest, MergeDigests, Snapshot
from pants.engine.process import BashBinary, Process, ProcessResult
from pants.jvm import jdk_rules
from pants.jvm.compile import CompiledClassfiles, FallibleCompiledClassfiles
from pants.jvm.goals.coursier import rules as coursier_rules
from pants.jvm.jdk_rules import JdkSetup
from pants.jvm.resolve.coursier_fetch import CoursierResolvedLockfile
from pants.jvm.resolve.coursier_fetch import rules as coursier_fetch_rules
from pants.jvm.resolve.coursier_setup import rules as coursier_setup_rules
Expand All @@ -46,25 +42,25 @@ def rule_runner() -> RuleRunner:
rules=[
# TODO: delete a few of these (they were copied from junit tests; not sure which
# are needed)
*classpath_rules(),
*config_files.rules(),
*coursier_fetch_rules(),
*coursier_rules(),
*coursier_setup_rules(),
*external_tool_rules(),
*source_files.rules(),
*classpath_rules(),
*deploy_jar_rules(),
*external_tool_rules(),
*javac_rules(),
*util_rules(),
*jdk_rules.rules(),
*source_files.rules(),
*target_types_rules(),
*coursier_rules(),
*java_util_rules.rules(),
*util_rules(),
QueryRule(BashBinary, ()),
QueryRule(BuiltPackage, (DeployJarFieldSet,)),
QueryRule(CheckResults, (JavacCheckRequest,)),
QueryRule(FallibleCompiledClassfiles, (CompileJavaSourceRequest,)),
QueryRule(CompiledClassfiles, (CompileJavaSourceRequest,)),
QueryRule(Classpath, (Addresses,)),
QueryRule(BuiltPackage, (DeployJarFieldSet,)),
QueryRule(CompiledClassfiles, (CompileJavaSourceRequest,)),
QueryRule(FallibleCompiledClassfiles, (CompileJavaSourceRequest,)),
QueryRule(JdkSetup, ()),
QueryRule(BashBinary, ()),
QueryRule(ProcessResult, (Process,)),
QueryRule(Snapshot, (Digest,)),
],
Expand Down
2 changes: 1 addition & 1 deletion src/python/pants/backend/java/test/junit.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
from pants.backend.java.classpath import Classpath
from pants.backend.java.subsystems.junit import JUnit
from pants.backend.java.target_types import JavaTestSourceField
from pants.backend.java.util_rules import JdkSetup
from pants.core.goals.test import TestDebugRequest, TestFieldSet, TestResult, TestSubsystem
from pants.engine.addresses import Addresses
from pants.engine.fs import Digest, DigestSubset, MergeDigests, PathGlobs, RemovePrefix, Snapshot
from pants.engine.process import BashBinary, FallibleProcessResult, Process
from pants.engine.rules import Get, collect_rules, rule
from pants.engine.unions import UnionRule
from pants.jvm.jdk_rules import JdkSetup
from pants.jvm.resolve.coursier_fetch import (
ArtifactRequirements,
Coordinate,
Expand Down
2 changes: 1 addition & 1 deletion src/python/pants/backend/java/test/junit_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
from pants.backend.java.target_types import rules as target_types_rules
from pants.backend.java.test.junit import JavaTestFieldSet
from pants.backend.java.test.junit import rules as junit_rules
from pants.backend.java.util_rules import rules as java_util_rules
from pants.build_graph.address import Address
from pants.core.goals.test import TestResult
from pants.core.util_rules import config_files, source_files
from pants.core.util_rules.external_tool import rules as external_tool_rules
from pants.engine.addresses import Addresses
from pants.engine.fs import FileDigest
from pants.engine.target import CoarsenedTargets
from pants.jvm.jdk_rules import rules as java_util_rules
from pants.jvm.resolve.coursier_fetch import (
Coordinate,
Coordinates,
Expand Down
Loading

0 comments on commit 45a144c

Please sign in to comment.