in src/ulsp/controller/quick-actions/actions-java/action_java_sync.go [41:89]
func (a *ActionJavaSync) Execute(ctx context.Context, params *action.ExecuteParams, args json.RawMessage) error {
s, err := params.Sessions.GetFromContext(ctx)
if err != nil {
return fmt.Errorf("getting session from context: %w", err)
}
resultArgs := argsJavaSync{}
err = json.Unmarshal(args, &resultArgs)
if err != nil {
return fmt.Errorf("unmarshalling args: %w", err)
}
// Command preparations set stdout and stderr to writer
ideOutWriter, err := params.IdeGateway.GetLogMessageWriter(ctx, _commandJavaSync)
if err != nil {
return fmt.Errorf("getting writer: %w", err)
}
filepath, err := a.getRelativeFilePath(s.WorkspaceRoot, resultArgs.Document)
if err != nil {
return err
}
cmd, env := a.prepareCommandAndEnv(ctx, ideOutWriter, s.WorkspaceRoot, filepath)
err = params.IdeGateway.LogMessage(ctx, &protocol.LogMessageParams{
Message: fmt.Sprintf(_startMessageJavaSync, strings.Join(cmd.Args, " ")),
Type: protocol.MessageTypeInfo,
})
if err != nil {
return fmt.Errorf("logging message: %w", err)
}
// Command execution will go here
err = params.Executor.RunCommand(cmd, env)
if err != nil {
// Log message even if context is already done.
params.IdeGateway.LogMessage(context.WithoutCancel(ctx), &protocol.LogMessageParams{
Message: fmt.Errorf("Error during run: %w", err).Error(),
Type: protocol.MessageTypeError,
})
return err
}
_, err = ideOutWriter.Write([]byte(_endMessageJavaSync))
if err != nil {
return fmt.Errorf("logging message: %w", err)
}
return nil
}