Search in sources :

Example 1 with BuildModelAction

use of org.gradle.tooling.internal.provider.action.BuildModelAction in project gradle by gradle.

the class BuildModelActionRunner method run.

@Override
public Result run(BuildAction action, final BuildTreeLifecycleController buildController) {
    if (!(action instanceof BuildModelAction)) {
        return Result.nothing();
    }
    BuildModelAction buildModelAction = (BuildModelAction) action;
    ModelCreateAction createAction = new ModelCreateAction(buildModelAction);
    try {
        if (buildModelAction.isCreateModel()) {
            Object result = buildController.fromBuildModel(buildModelAction.isRunTasks(), createAction);
            SerializedPayload serializedResult = payloadSerializer.serialize(result);
            return Result.of(serializedResult);
        } else {
            buildController.scheduleAndRunTasks();
            return Result.of(null);
        }
    } catch (RuntimeException e) {
        RuntimeException clientFailure = e;
        if (createAction.modelLookupFailure != null) {
            clientFailure = (RuntimeException) new InternalUnsupportedModelException().initCause(createAction.modelLookupFailure);
        }
        return Result.failed(e, clientFailure);
    }
}
Also used : SerializedPayload(org.gradle.tooling.internal.provider.serialization.SerializedPayload) InternalUnsupportedModelException(org.gradle.tooling.internal.protocol.InternalUnsupportedModelException) BuildModelAction(org.gradle.tooling.internal.provider.action.BuildModelAction)

Example 2 with BuildModelAction

use of org.gradle.tooling.internal.provider.action.BuildModelAction in project gradle by gradle.

the class BuildTreeLifecycleBuildActionExecutor method execute.

@Override
public BuildActionRunner.Result execute(BuildAction action, BuildSessionContext buildSession) {
    BuildActionRunner.Result result = null;
    try {
        buildLayoutValidator.validate(action.getStartParameter());
        BuildActionModelRequirements actionRequirements;
        if (action instanceof BuildModelAction && action.isCreateModel()) {
            BuildModelAction buildModelAction = (BuildModelAction) action;
            actionRequirements = new QueryModelRequirements(action.getStartParameter(), action.isRunTasks(), buildModelAction.getModelName());
        } else if (action instanceof ClientProvidedBuildAction) {
            actionRequirements = new RunActionRequirements(action.getStartParameter(), action.isRunTasks());
        } else if (action instanceof ClientProvidedPhasedAction) {
            actionRequirements = new RunPhasedActionRequirements(action.getStartParameter(), action.isRunTasks());
        } else {
            actionRequirements = new RunTasksRequirements(action.getStartParameter());
        }
        BuildTreeModelControllerServices.Supplier modelServices = buildTreeModelControllerServices.servicesForBuildTree(actionRequirements);
        BuildTreeState buildTree = new BuildTreeState(buildSession.getServices(), modelServices);
        try {
            result = buildTree.run(context -> context.execute(action));
        } finally {
            buildTree.close();
        }
    } catch (Throwable t) {
        if (result == null) {
            // whereas console failure logging based on the _thrown exception_ happens up outside session scope. It would be better to refactor so that a result can be returned from here
            throw UncheckedException.throwAsUncheckedException(t);
        } else {
            // whereas console failure logging based on the _thrown exception_ happens up outside session scope. It would be better to refactor so that a result can be returned from here
            throw UncheckedException.throwAsUncheckedException(result.addFailure(t).getBuildFailure());
        }
    }
    return result;
}
Also used : BuildActionRunner(org.gradle.internal.buildtree.BuildActionRunner) BuildTreeState(org.gradle.internal.buildtree.BuildTreeState) BuildActionModelRequirements(org.gradle.internal.buildtree.BuildActionModelRequirements) ClientProvidedBuildAction(org.gradle.tooling.internal.provider.action.ClientProvidedBuildAction) BuildTreeModelControllerServices(org.gradle.internal.buildtree.BuildTreeModelControllerServices) ClientProvidedPhasedAction(org.gradle.tooling.internal.provider.action.ClientProvidedPhasedAction) BuildSessionActionExecutor(org.gradle.internal.session.BuildSessionActionExecutor) UncheckedException(org.gradle.internal.UncheckedException) RunTasksRequirements(org.gradle.internal.buildtree.RunTasksRequirements) BuildAction(org.gradle.internal.invocation.BuildAction) BuildSessionContext(org.gradle.internal.session.BuildSessionContext) BuildModelAction(org.gradle.tooling.internal.provider.action.BuildModelAction) BuildLayoutValidator(org.gradle.internal.build.BuildLayoutValidator) ClientProvidedPhasedAction(org.gradle.tooling.internal.provider.action.ClientProvidedPhasedAction) BuildActionModelRequirements(org.gradle.internal.buildtree.BuildActionModelRequirements) BuildTreeState(org.gradle.internal.buildtree.BuildTreeState) BuildActionRunner(org.gradle.internal.buildtree.BuildActionRunner) ClientProvidedBuildAction(org.gradle.tooling.internal.provider.action.ClientProvidedBuildAction) BuildTreeModelControllerServices(org.gradle.internal.buildtree.BuildTreeModelControllerServices) RunTasksRequirements(org.gradle.internal.buildtree.RunTasksRequirements) BuildModelAction(org.gradle.tooling.internal.provider.action.BuildModelAction)

Example 3 with BuildModelAction

use of org.gradle.tooling.internal.provider.action.BuildModelAction in project gradle by gradle.

the class ProviderConnection method run.

public Object run(String modelName, BuildCancellationToken cancellationToken, ProviderOperationParameters providerParameters) {
    List<String> tasks = providerParameters.getTasks();
    if (modelName.equals(ModelIdentifier.NULL_MODEL) && tasks == null) {
        throw new IllegalArgumentException("No model type or tasks specified.");
    }
    Parameters params = initParams(providerParameters);
    if (BuildEnvironment.class.getName().equals(modelName)) {
        // we don't really need to launch the daemon to acquire information needed for BuildEnvironment
        if (tasks != null) {
            throw new IllegalArgumentException("Cannot run tasks and fetch the build environment model.");
        }
        return new DefaultBuildEnvironment(new DefaultBuildIdentifier(providerParameters.getProjectDir()), params.buildLayout.getGradleUserHomeDir(), GradleVersion.current().getVersion(), params.daemonParams.getEffectiveJvm().getJavaHome(), params.daemonParams.getEffectiveJvmArgs());
    }
    StartParameterInternal startParameter = new ProviderStartParameterConverter().toStartParameter(providerParameters, params.buildLayout, params.properties);
    ProgressListenerConfiguration listenerConfig = ProgressListenerConfiguration.from(providerParameters, consumerVersion);
    BuildAction action = new BuildModelAction(startParameter, modelName, tasks != null, listenerConfig.clientSubscriptions);
    return run(action, cancellationToken, listenerConfig, listenerConfig.buildEventConsumer, providerParameters, params);
}
Also used : DefaultBuildEnvironment(org.gradle.tooling.internal.build.DefaultBuildEnvironment) ProviderConnectionParameters(org.gradle.tooling.internal.provider.connection.ProviderConnectionParameters) ProviderOperationParameters(org.gradle.tooling.internal.provider.connection.ProviderOperationParameters) DaemonParameters(org.gradle.launcher.daemon.configuration.DaemonParameters) BuildActionParameters(org.gradle.launcher.exec.BuildActionParameters) DefaultBuildIdentifier(org.gradle.tooling.internal.gradle.DefaultBuildIdentifier) BuildEnvironment(org.gradle.tooling.model.build.BuildEnvironment) DefaultBuildEnvironment(org.gradle.tooling.internal.build.DefaultBuildEnvironment) StartParameterInternal(org.gradle.api.internal.StartParameterInternal) ClientProvidedBuildAction(org.gradle.tooling.internal.provider.action.ClientProvidedBuildAction) BuildAction(org.gradle.internal.invocation.BuildAction) BuildModelAction(org.gradle.tooling.internal.provider.action.BuildModelAction)

Aggregations

BuildModelAction (org.gradle.tooling.internal.provider.action.BuildModelAction)3 BuildAction (org.gradle.internal.invocation.BuildAction)2 ClientProvidedBuildAction (org.gradle.tooling.internal.provider.action.ClientProvidedBuildAction)2 StartParameterInternal (org.gradle.api.internal.StartParameterInternal)1 UncheckedException (org.gradle.internal.UncheckedException)1 BuildLayoutValidator (org.gradle.internal.build.BuildLayoutValidator)1 BuildActionModelRequirements (org.gradle.internal.buildtree.BuildActionModelRequirements)1 BuildActionRunner (org.gradle.internal.buildtree.BuildActionRunner)1 BuildTreeModelControllerServices (org.gradle.internal.buildtree.BuildTreeModelControllerServices)1 BuildTreeState (org.gradle.internal.buildtree.BuildTreeState)1 RunTasksRequirements (org.gradle.internal.buildtree.RunTasksRequirements)1 BuildSessionActionExecutor (org.gradle.internal.session.BuildSessionActionExecutor)1 BuildSessionContext (org.gradle.internal.session.BuildSessionContext)1 DaemonParameters (org.gradle.launcher.daemon.configuration.DaemonParameters)1 BuildActionParameters (org.gradle.launcher.exec.BuildActionParameters)1 DefaultBuildEnvironment (org.gradle.tooling.internal.build.DefaultBuildEnvironment)1 DefaultBuildIdentifier (org.gradle.tooling.internal.gradle.DefaultBuildIdentifier)1 InternalUnsupportedModelException (org.gradle.tooling.internal.protocol.InternalUnsupportedModelException)1 ClientProvidedPhasedAction (org.gradle.tooling.internal.provider.action.ClientProvidedPhasedAction)1 ProviderConnectionParameters (org.gradle.tooling.internal.provider.connection.ProviderConnectionParameters)1