mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-06 16:08:05 +00:00
The Dependency Analyzer lists Gradle projects next to Maven modules. For a Gradle project it runs `<project>:dependencies --configuration <name>` (compile/runtime/test classpaths) in the background (on the project host for remote projects), cancellable and cached per session, and reuses the list/tree views, search, conflicts-only filter and usage paths: an exact request Gradle replaced (1.0 -> 1.1) is a conflict showing the requested version, constraints are left out, unresolved dependencies are marked and build projects (quoted or not) are recognised. Exclude / Jump to Source stay Maven-only. Opened from the Gradle tool window toolbar, a Gradle project's context menu and a build script's menus. Closes #1005
126 lines
4.2 KiB
Rust
126 lines
4.2 KiB
Rust
//! IPC commands of `ide_host::ops::build` (the shared implementation).
|
||
|
||
use crate::state::AppState;
|
||
use ide_build::compile::{BuildEvent, BuildKind, BuildResult};
|
||
use ide_build::pom_edit::ArtifactKey;
|
||
use ide_build::{BuildModel, BuildTool, SyncProgress};
|
||
use ide_core::{IdeResult, Location, RequestId};
|
||
#[allow(unused_imports)]
|
||
pub use ide_host::ops::build::*;
|
||
use tauri::ipc::Channel;
|
||
use tauri::{State, Window};
|
||
|
||
/// Maven and Gradle projects of the window's project, from the build files plus the last sync.
|
||
#[tauri::command]
|
||
#[specta::specta]
|
||
pub async fn build_model(window: Window, state: State<'_, AppState>) -> IdeResult<BuildModel> {
|
||
ide_host::ops::build::build_model(&state.host, window.label()).await
|
||
}
|
||
|
||
/// Runs Maven (`help:effective-pom dependency:tree`) or Gradle (`tasks --all`) in the
|
||
/// background, reporting progress on `on_progress`; cancellable with `cancel_request(request)`.
|
||
/// Returns the refreshed model; a failed build is reported in its `syncError`.
|
||
#[tauri::command]
|
||
#[specta::specta]
|
||
pub async fn build_sync(
|
||
window: Window,
|
||
state: State<'_, AppState>,
|
||
tool: BuildTool,
|
||
request: RequestId,
|
||
offline: bool,
|
||
profiles: Vec<String>,
|
||
on_progress: Channel<SyncProgress>,
|
||
) -> IdeResult<BuildModel> {
|
||
ide_host::ops::build::build_sync(
|
||
&state.host,
|
||
window.label(),
|
||
tool,
|
||
request,
|
||
offline,
|
||
profiles,
|
||
crate::commands::sender(on_progress),
|
||
)
|
||
.await
|
||
}
|
||
|
||
/// The resolved dependency tree of a Gradle project for one configuration (Dependency Analyzer).
|
||
#[tauri::command]
|
||
#[specta::specta]
|
||
pub async fn gradle_dependencies(
|
||
window: Window,
|
||
state: State<'_, AppState>,
|
||
gradle_path: String,
|
||
configuration: String,
|
||
offline: bool,
|
||
request: RequestId,
|
||
) -> IdeResult<Vec<ide_build::GradleDependency>> {
|
||
ide_host::ops::build::gradle_dependencies(&state.host, window.label(), gradle_path, configuration, offline, request)
|
||
.await
|
||
}
|
||
|
||
/// The `.toml` of a version catalog the build imports as `group:artifact:version`, once a
|
||
/// build has downloaded it.
|
||
#[tauri::command]
|
||
#[specta::specta]
|
||
pub async fn gradle_published_catalog(
|
||
window: Window,
|
||
state: State<'_, AppState>,
|
||
coordinates: String,
|
||
) -> IdeResult<Option<ide_core::IpcPath>> {
|
||
ide_host::ops::build::gradle_published_catalog(&state.host, window.label(), coordinates).await
|
||
}
|
||
|
||
/// Where the direct dependency `dependency` of the Maven module `pom` is declared.
|
||
#[tauri::command]
|
||
#[specta::specta]
|
||
pub async fn maven_dependency_declaration(
|
||
window: Window,
|
||
state: State<'_, AppState>,
|
||
pom: String,
|
||
dependency: ArtifactKey,
|
||
) -> IdeResult<Location> {
|
||
ide_host::ops::build::maven_dependency_declaration(&state.host, window.label(), pom, dependency).await
|
||
}
|
||
|
||
/// Adds an `<exclusion>` of `exclusion` to the declaration of the direct dependency
|
||
/// `dependency` of the Maven module `pom`, through the open document when there is one
|
||
/// (saved). Returns the declaration; nothing changes when it already excludes it.
|
||
#[tauri::command]
|
||
#[specta::specta]
|
||
pub async fn maven_exclude_dependency(
|
||
window: Window,
|
||
state: State<'_, AppState>,
|
||
pom: String,
|
||
dependency: ArtifactKey,
|
||
exclusion: ArtifactKey,
|
||
) -> IdeResult<Location> {
|
||
ide_host::ops::build::maven_exclude_dependency(&state.host, window.label(), pom, dependency, exclusion).await
|
||
}
|
||
|
||
/// Build › Build Project / Rebuild Project / Build Module (`file`: a file or folder of the
|
||
/// module) / Build Artifacts, streaming the console and messages on `on_event`; cancellable
|
||
/// with `cancel_request(request)`. Diagnostics of `clear` (the files of the previous build)
|
||
/// are cleared first; the new messages are published as `build` diagnostics.
|
||
#[tauri::command]
|
||
#[specta::specta]
|
||
pub async fn build_run(
|
||
window: Window,
|
||
state: State<'_, AppState>,
|
||
kind: BuildKind,
|
||
file: Option<std::path::PathBuf>,
|
||
request: RequestId,
|
||
clear: Vec<std::path::PathBuf>,
|
||
on_event: Channel<BuildEvent>,
|
||
) -> IdeResult<BuildResult> {
|
||
ide_host::ops::build::build_run(
|
||
&state.host,
|
||
window.label(),
|
||
kind,
|
||
file,
|
||
request,
|
||
clear,
|
||
crate::commands::sender(on_event),
|
||
)
|
||
.await
|
||
}
|