mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-206109 maven build tool window - remove external api integration - will be restored in future
This commit is contained in:
-1
@@ -22,7 +22,6 @@ import icons.MavenIcons;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.util.MavenExternalSystemTaskRunner;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
import org.jetbrains.idea.maven.project.MavenGeneralSettings;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration;
|
||||
|
||||
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
|
||||
import com.intellij.openapi.externalSystem.service.settings.AbstractImportFromExternalSystemControl;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemSettingsControl;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.settings.*;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
import org.jetbrains.idea.maven.utils.MavenLog;
|
||||
|
||||
public class ImportFromMavenControl
|
||||
extends AbstractImportFromExternalSystemControl<MavenProjectSettings, MavenSettingsListener, MavenSettings> {
|
||||
public ImportFromMavenControl() {
|
||||
super(MavenConstants.SYSTEM_ID, MavenSettings.getInstance(ProjectManager.getInstance().getDefaultProject()), MavenProjectSettings.getInitial(),
|
||||
true);
|
||||
}
|
||||
|
||||
protected ImportFromMavenControl(@NotNull ProjectSystemId externalSystemId,
|
||||
@NotNull MavenSettings systemSettings,
|
||||
@NotNull MavenProjectSettings projectSettings, boolean showProjectFormatPanel) {
|
||||
super(externalSystemId, systemSettings, projectSettings, showProjectFormatPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLinkedProjectPathChange(@NotNull String path) {
|
||||
MavenLog.LOG.warn("onLinkedProjectPathChange " + path);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected ExternalSystemSettingsControl<MavenProjectSettings> createProjectSettingsControl(@NotNull MavenProjectSettings settings) {
|
||||
return new MavenProjectSettingsControl(settings);
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected ExternalSystemSettingsControl<MavenSettings> createSystemSettingsControl(@NotNull MavenSettings settings) {
|
||||
return new MavenSystemSettingsControl(settings);
|
||||
}
|
||||
}
|
||||
-113
@@ -1,113 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration;
|
||||
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.configurations.SearchScopeProvider;
|
||||
import com.intellij.execution.configurations.SimpleJavaParameters;
|
||||
import com.intellij.openapi.externalSystem.ExternalSystemManager;
|
||||
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
|
||||
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings;
|
||||
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil;
|
||||
import com.intellij.openapi.externalSystem.service.project.ExternalSystemProjectResolver;
|
||||
import com.intellij.openapi.externalSystem.task.ExternalSystemTaskManager;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.PathsList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.ContainerUtilRt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.run.MavenTaskManager;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.settings.*;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
import org.jetbrains.idea.maven.server.MavenServerManager;
|
||||
import org.jetbrains.idea.maven.utils.MavenUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Set;
|
||||
|
||||
public class MavenExternalManager implements ExternalSystemManager<
|
||||
MavenProjectSettings,
|
||||
MavenSettingsListener,
|
||||
MavenSettings,
|
||||
MavenLocalSettings,
|
||||
MavenExecutionSettings> {
|
||||
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ProjectSystemId getSystemId() {
|
||||
return MavenConstants.SYSTEM_ID;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Function<Project, MavenSettings> getSettingsProvider() {
|
||||
return project -> MavenSettings.getInstance(project);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Function<Project, MavenLocalSettings> getLocalSettingsProvider() {
|
||||
return project -> MavenLocalSettings.getInstance(project);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Function<Pair<Project, String>, MavenExecutionSettings> getExecutionSettingsProvider() {
|
||||
return pair -> {
|
||||
Project project = pair.first;
|
||||
MavenSettings settings = MavenSettings.getInstance(project);
|
||||
File mavenHome = MavenServerManager.getMavenHomeFile(MavenServerManager.BUNDLED_MAVEN_3);
|
||||
MavenExecutionSettings mavenExecutionSettings = new MavenExecutionSettings(
|
||||
mavenHome, MavenUtil.getMavenVersion(mavenHome),
|
||||
ExternalSystemJdkUtil
|
||||
.getJdk(project, settings.getJdkToUse()).getHomePath(),
|
||||
LocalFileSystem.getInstance().findFileByIoFile(new File(pair.second)).findChild("pom.xml"));
|
||||
return mavenExecutionSettings;
|
||||
};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Class<? extends ExternalSystemProjectResolver<MavenExecutionSettings>> getProjectResolverClass() {
|
||||
return MavenProjectResolver.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends ExternalSystemTaskManager<MavenExecutionSettings>> getTaskManagerClass() {
|
||||
return MavenTaskManager.class;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FileChooserDescriptor getExternalProjectDescriptor() {
|
||||
return new FileChooserDescriptor(true, false, false, false, false, false)
|
||||
.withTitle("Choose Maven File")
|
||||
.withFileFilter(MavenUtil::isPomFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enhanceRemoteProcessing(@NotNull SimpleJavaParameters parameters) throws ExecutionException {
|
||||
final Set<String> additionalEntries = ContainerUtilRt.newHashSet();
|
||||
ContainerUtil.addIfNotNull(additionalEntries, PathUtil.getJarPathForClass(MavenServerManager.class));
|
||||
ContainerUtil.addIfNotNull(additionalEntries, PathUtil.getJarPathForClass(MavenConstants.class));
|
||||
|
||||
final PathsList classPath = parameters.getClassPath();
|
||||
for (String entry : additionalEntries) {
|
||||
classPath.add(entry);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public GlobalSearchScope getSearchScope(@NotNull Project project, @NotNull ExternalSystemTaskExecutionSettings taskExecutionSettings) {
|
||||
return SearchScopeProvider.createSearchScope(project, null);
|
||||
}
|
||||
}
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration;
|
||||
|
||||
import com.intellij.ide.util.projectWizard.WizardContext;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.externalSystem.model.DataNode;
|
||||
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
|
||||
import com.intellij.openapi.externalSystem.model.internal.InternalExternalProjectInfo;
|
||||
import com.intellij.openapi.externalSystem.model.project.ProjectData;
|
||||
import com.intellij.openapi.externalSystem.service.project.ExternalProjectRefreshCallback;
|
||||
import com.intellij.openapi.externalSystem.service.project.ProjectDataManager;
|
||||
import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalProjectImportBuilder;
|
||||
import com.intellij.openapi.externalSystem.service.ui.ExternalProjectDataSelectorDialog;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.NotNullFactory;
|
||||
import icons.MavenIcons;
|
||||
import icons.OpenapiIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
|
||||
public class MavenProjectImportBuilder extends AbstractExternalProjectImportBuilder<ImportFromMavenControl> {
|
||||
public MavenProjectImportBuilder(@NotNull ProjectDataManager projectDataManager) {
|
||||
super(projectDataManager, () -> new ImportFromMavenControl(), MavenConstants.SYSTEM_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPrepare(@NotNull WizardContext context) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void beforeCommit(@NotNull DataNode<ProjectData> dataNode, @NotNull Project project) {
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected File getExternalProjectConfigToUse(@NotNull File file) {
|
||||
return file.isDirectory() ? file : file.getParentFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyExtraSettings(@NotNull WizardContext context) {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Maven";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return OpenapiIcons.RepositoryLibraryLogo;
|
||||
}
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration;
|
||||
|
||||
import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalProjectImportProvider;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
import org.jetbrains.idea.maven.utils.MavenUtil;
|
||||
|
||||
public class MavenProjectImportProvider extends AbstractExternalProjectImportProvider {
|
||||
|
||||
public MavenProjectImportProvider(MavenProjectImportBuilder builder) {
|
||||
super(builder, MavenConstants.SYSTEM_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canImportFromFile(VirtualFile file) {
|
||||
return MavenUtil.isPomFile(file);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getFileSample() {
|
||||
return "<b>Maven</b> build file (pom.xml)";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration;
|
||||
|
||||
import com.intellij.openapi.externalSystem.model.DataNode;
|
||||
import com.intellij.openapi.externalSystem.model.ExternalSystemException;
|
||||
import com.intellij.openapi.externalSystem.model.project.ProjectData;
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId;
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener;
|
||||
import com.intellij.openapi.externalSystem.service.project.ExternalSystemProjectResolver;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.settings.MavenExecutionSettings;
|
||||
|
||||
public class MavenProjectResolver implements ExternalSystemProjectResolver<MavenExecutionSettings> {
|
||||
@Nullable
|
||||
@Override
|
||||
public DataNode<ProjectData> resolveProjectInfo(@NotNull ExternalSystemTaskId id,
|
||||
@NotNull String projectPath,
|
||||
boolean isPreviewMode,
|
||||
@Nullable MavenExecutionSettings settings,
|
||||
@NotNull ExternalSystemTaskNotificationListener listener)
|
||||
throws ExternalSystemException, IllegalArgumentException, IllegalStateException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cancelTask(@NotNull ExternalSystemTaskId taskId, @NotNull ExternalSystemTaskNotificationListener listener) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
-138
@@ -1,138 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.run;
|
||||
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId;
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener;
|
||||
import com.intellij.openapi.externalSystem.model.task.event.*;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.Stack;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
public class MavenExecutionStatusListener {
|
||||
|
||||
private final ExternalSystemTaskId mySystemTaskId;
|
||||
private final ExternalSystemTaskNotificationListener myListener;
|
||||
private final Set<MavenSubTask> runningTasks = ContainerUtil.newConcurrentSet();
|
||||
|
||||
public MavenExecutionStatusListener(ExternalSystemTaskId systemTaskId, ExternalSystemTaskNotificationListener listener) {
|
||||
mySystemTaskId = systemTaskId;
|
||||
myListener = listener;
|
||||
}
|
||||
|
||||
public MavenSubTask start(String name) {
|
||||
return new MavenSubTask(name, null);
|
||||
}
|
||||
|
||||
public void failAllNonCompleted(Exception e) {
|
||||
Set<MavenSubTask> toFail = ContainerUtil.newHashSet(runningTasks);
|
||||
|
||||
for (MavenSubTask subTask : toFail) {
|
||||
subTask.failure(e);
|
||||
}
|
||||
}
|
||||
|
||||
public class MavenSubTask {
|
||||
private final String myName;
|
||||
private final String myParentName;
|
||||
private final long myStartTime;
|
||||
private final TaskOperationDescriptor myDescriptor;
|
||||
|
||||
MavenSubTask(String name, String parentName) {
|
||||
myName = name;
|
||||
myParentName = parentName;
|
||||
myStartTime = System.currentTimeMillis();
|
||||
|
||||
myDescriptor = new TaskOperationDescriptorImpl(name, myStartTime, name);
|
||||
|
||||
myListener.onStatusChange(new ExternalSystemTaskExecutionEvent(mySystemTaskId,
|
||||
new ExternalSystemStartEventImpl<>(
|
||||
myName, myParentName,
|
||||
myDescriptor
|
||||
))
|
||||
);
|
||||
runningTasks.add(this);
|
||||
}
|
||||
|
||||
public MavenSubTask startChild(String name) {
|
||||
return new MavenSubTask(name, myName);
|
||||
}
|
||||
|
||||
public void failure(Throwable e) {
|
||||
myListener.onStatusChange(new ExternalSystemTaskExecutionEvent(mySystemTaskId,
|
||||
new ExternalSystemFinishEventImpl<>(
|
||||
myName, myParentName,
|
||||
myDescriptor,
|
||||
new FailureResultImpl(myStartTime, System.currentTimeMillis(),
|
||||
getFailures(e)))
|
||||
));
|
||||
runningTasks.remove(this);
|
||||
}
|
||||
|
||||
public void failure(List<String> messages) {
|
||||
myListener.onStatusChange(new ExternalSystemTaskExecutionEvent(mySystemTaskId,
|
||||
new ExternalSystemFinishEventImpl<>(
|
||||
myName, myParentName,
|
||||
myDescriptor,
|
||||
new FailureResultImpl(myStartTime, System.currentTimeMillis(),
|
||||
getFailures(messages)))
|
||||
));
|
||||
runningTasks.remove(this);
|
||||
}
|
||||
|
||||
|
||||
public void success() {
|
||||
myListener.onStatusChange(new ExternalSystemTaskExecutionEvent(mySystemTaskId,
|
||||
new ExternalSystemFinishEventImpl<>(
|
||||
myName, myParentName,
|
||||
myDescriptor,
|
||||
new SuccessResultImpl(myStartTime, System.currentTimeMillis(),
|
||||
false))
|
||||
));
|
||||
runningTasks.remove(this);
|
||||
}
|
||||
|
||||
public void skip() {
|
||||
myListener.onStatusChange(new ExternalSystemTaskExecutionEvent(mySystemTaskId,
|
||||
new ExternalSystemFinishEventImpl<>(
|
||||
myName, myParentName,
|
||||
myDescriptor,
|
||||
new SkippedResultImpl(myStartTime, System.currentTimeMillis()))
|
||||
));
|
||||
runningTasks.remove(this);
|
||||
}
|
||||
|
||||
|
||||
private List<Failure> getFailures(Throwable e) {
|
||||
return Collections.singletonList(new FailureImpl(e.getMessage(), e.getMessage(), ContainerUtil.emptyList()));
|
||||
}
|
||||
|
||||
private List<Failure> getFailures(List<String> messages) {
|
||||
List<Failure> result = new SmartList<>();
|
||||
for (String message : messages) {
|
||||
result.add(new FailureImpl(message, message, ContainerUtil.emptyList()));
|
||||
}
|
||||
;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
MavenSubTask task = (MavenSubTask)o;
|
||||
return myName.equals(task.myName) &&
|
||||
Objects.equals(myParentName, task.myParentName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(myName, myParentName);
|
||||
}
|
||||
}
|
||||
}
|
||||
-143
@@ -1,143 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.run;
|
||||
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.process.ProcessListener;
|
||||
import com.intellij.openapi.externalSystem.model.ExternalSystemException;
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId;
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener;
|
||||
import com.intellij.openapi.externalSystem.model.task.event.*;
|
||||
import com.intellij.openapi.externalSystem.rt.execution.ForkedDebuggerConfiguration;
|
||||
import com.intellij.openapi.externalSystem.task.BaseExternalSystemTaskManager;
|
||||
import com.intellij.openapi.progress.EmptyProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.execution.MavenExecutionOptions;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.run.MavenExecutionStatusListener.MavenSubTask;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.settings.MavenExecutionSettings;
|
||||
import org.jetbrains.idea.maven.project.MavenConsole;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
import org.jetbrains.idea.maven.project.MavenProjectsManager;
|
||||
import org.jetbrains.idea.maven.server.MavenEmbedderWrapper;
|
||||
import org.jetbrains.idea.maven.server.MavenServerDownloadListener;
|
||||
import org.jetbrains.idea.maven.server.MavenServerExecutionResult;
|
||||
import org.jetbrains.idea.maven.server.MavenServerManager;
|
||||
import org.jetbrains.idea.maven.utils.MavenLog;
|
||||
import org.jetbrains.idea.maven.utils.MavenProgressIndicator;
|
||||
|
||||
import java.io.File;
|
||||
import java.rmi.RemoteException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class MavenTaskManager extends BaseExternalSystemTaskManager<MavenExecutionSettings> {
|
||||
|
||||
@Override
|
||||
public void executeTasks(@NotNull ExternalSystemTaskId id,
|
||||
@NotNull List<String> taskNames,
|
||||
@NotNull String projectPath,
|
||||
@Nullable MavenExecutionSettings settings,
|
||||
@Nullable String jvmAgentSetup,
|
||||
@NotNull ExternalSystemTaskNotificationListener listener) throws ExternalSystemException {
|
||||
MavenExecutionStatusListener mavenListener = new MavenExecutionStatusListener(id, listener);
|
||||
|
||||
try {
|
||||
MavenSubTask startEvent = mavenListener.start("Starting maven server");
|
||||
|
||||
ForkedDebuggerConfiguration forkedDebuggerSetup = ForkedDebuggerConfiguration.parse(jvmAgentSetup);
|
||||
if (forkedDebuggerSetup != null) {
|
||||
settings.withVmOption(forkedDebuggerSetup.getJvmAgentSetup(isJdk9orLater(settings.getJavaHome())));
|
||||
}
|
||||
|
||||
Project project = id.findProject();
|
||||
if (project == null) {
|
||||
throw new RuntimeException("Cannot find project for task");
|
||||
}
|
||||
MavenServerManager serverManager = MavenServerManager.getInstance();
|
||||
|
||||
|
||||
MavenEmbedderWrapper embedder = serverManager.createEmbedder(project, false, projectPath, projectPath);
|
||||
customize(embedder, listener, id);
|
||||
startEvent.success();
|
||||
|
||||
taskNames.forEach(taskName -> executeTask(settings, startEvent, embedder, taskName));
|
||||
}
|
||||
finally {
|
||||
mavenListener.failAllNonCompleted(new Exception("internal error"));
|
||||
}
|
||||
}
|
||||
|
||||
private void executeTask(@NotNull MavenExecutionSettings settings,
|
||||
MavenSubTask startEvent,
|
||||
MavenEmbedderWrapper embedder, String taskName) {
|
||||
MavenSubTask execute = startEvent.startChild(taskName);
|
||||
try {
|
||||
|
||||
MavenServerExecutionResult result = embedder
|
||||
.execute(settings.getPomFile(), Collections.emptyList(), Collections.emptyList(),
|
||||
Collections.singletonList(taskName));
|
||||
|
||||
if (result.problems != null && !result.problems.isEmpty()) {
|
||||
execute.failure(result.problems.stream().map(s -> s.getDescription()).collect(Collectors.toList()));
|
||||
}
|
||||
else {
|
||||
execute.success();
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
execute.failure(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void customize(MavenEmbedderWrapper embedder,
|
||||
ExternalSystemTaskNotificationListener listener,
|
||||
ExternalSystemTaskId id) {
|
||||
embedder.customizeForResolve(new MavenConsole(MavenExecutionOptions.LoggingLevel.DEBUG, false) {
|
||||
@Override
|
||||
public boolean canPause() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOutputPaused() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOutputPaused(boolean outputPaused) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attachToProcess(ProcessHandler processHandler) {
|
||||
processHandler.addProcessListener(new ProcessAdapter() {
|
||||
@Override
|
||||
public void onTextAvailable(@NotNull ProcessEvent event, @NotNull Key outputType) {
|
||||
listener.onTaskOutput(id, event.getText(), false);
|
||||
}
|
||||
});
|
||||
MavenLog.LOG.debug("attachToProcess " + processHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPrint(String text, OutputType type) {
|
||||
MavenLog.LOG.debug(text);
|
||||
boolean stdErr = type == OutputType.ERROR;
|
||||
listener.onTaskOutput(id, text, !stdErr);
|
||||
}
|
||||
}, new MavenProgressIndicator());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cancelTask(@NotNull ExternalSystemTaskId id, @NotNull ExternalSystemTaskNotificationListener listener)
|
||||
throws ExternalSystemException {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
import com.intellij.openapi.externalSystem.settings.DelegatingExternalSystemSettingsListener;
|
||||
import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class DelegatingMavenSettingsListenerAdapter extends DelegatingExternalSystemSettingsListener<MavenProjectSettings>
|
||||
implements MavenSettingsListener {
|
||||
public DelegatingMavenSettingsListenerAdapter(@NotNull ExternalSystemSettingsListener<MavenProjectSettings> delegate) {
|
||||
super(delegate);
|
||||
}
|
||||
}
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
import com.intellij.openapi.externalSystem.model.settings.ExternalSystemExecutionSettings;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class MavenExecutionSettings extends ExternalSystemExecutionSettings {
|
||||
|
||||
@NotNull private final File myMavenHome;
|
||||
@NotNull private final String myMavenVersion;
|
||||
@NotNull private final String myJavaHome;
|
||||
@NotNull private final VirtualFile myPomFile;
|
||||
|
||||
public MavenExecutionSettings(@NotNull File mavenHome,
|
||||
@NotNull String mavenVersion,
|
||||
@NotNull String javaHome,
|
||||
@NotNull VirtualFile pomFile) {
|
||||
myMavenHome = mavenHome;
|
||||
myMavenVersion = mavenVersion;
|
||||
myJavaHome = javaHome;
|
||||
myPomFile = pomFile;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public File getMavenHome() {
|
||||
return myMavenHome;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getMavenVersion() {
|
||||
return myMavenVersion;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public String getJavaHome() {
|
||||
return myJavaHome;
|
||||
}
|
||||
|
||||
public VirtualFile getPomFile() {
|
||||
return myPomFile;
|
||||
}
|
||||
}
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.components.StoragePathMacros;
|
||||
import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemLocalSettings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
|
||||
|
||||
@State(name = "MavenLocalSettings", storages = {
|
||||
@Storage(StoragePathMacros.CACHE_FILE),
|
||||
@Storage(value = StoragePathMacros.WORKSPACE_FILE, deprecated = true)
|
||||
})
|
||||
public class MavenLocalSettings extends AbstractExternalSystemLocalSettings<AbstractExternalSystemLocalSettings.State> {
|
||||
public MavenLocalSettings(@NotNull Project project) {
|
||||
super(MavenConstants.SYSTEM_ID, project, new MyState());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MavenLocalSettings getInstance(@NotNull Project project) {
|
||||
return new MavenLocalSettings(project);
|
||||
//return ServiceManager.getService(project, MavenLocalSettings.class);
|
||||
}
|
||||
|
||||
public static class MyState extends AbstractExternalSystemLocalSettings.State {
|
||||
}
|
||||
}
|
||||
-87
@@ -1,87 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
|
||||
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil;
|
||||
import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.server.MavenServerManager;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class MavenProjectSettings extends ExternalProjectSettings {
|
||||
|
||||
@Nullable private String myMavenHome;
|
||||
@Nullable private String myMavenJVM = ExternalSystemJdkUtil.USE_PROJECT_JDK;
|
||||
@Nullable private Integer myThreadCount;
|
||||
|
||||
@Nullable private File myMavenSettingsFile;
|
||||
@Nullable private File myMavenLocalRepo;
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ExternalProjectSettings clone() {
|
||||
MavenProjectSettings result = new MavenProjectSettings();
|
||||
copyTo(result);
|
||||
result.myMavenHome = myMavenHome;
|
||||
result.myMavenJVM = myMavenJVM;
|
||||
result.myThreadCount = myThreadCount;
|
||||
result.myMavenSettingsFile = myMavenSettingsFile;
|
||||
result.myMavenLocalRepo = myMavenLocalRepo;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getMavenHome() {
|
||||
return myMavenHome;
|
||||
}
|
||||
|
||||
public void setMavenHome(@Nullable String mavenHome) {
|
||||
myMavenHome = mavenHome;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getMavenJVM() {
|
||||
return myMavenJVM;
|
||||
}
|
||||
|
||||
public void setMavenJVM(@Nullable String mavenJVM) {
|
||||
myMavenJVM = mavenJVM;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getThreadCount() {
|
||||
return myThreadCount;
|
||||
}
|
||||
|
||||
public void setThreadCount(@Nullable Integer threadCount) {
|
||||
myThreadCount = threadCount;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public File getMavenSettingsFile() {
|
||||
return myMavenSettingsFile;
|
||||
}
|
||||
|
||||
public void setMavenSettingsFile(@Nullable File mavenSettingsFile) {
|
||||
myMavenSettingsFile = mavenSettingsFile;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public File getMavenLocalRepo() {
|
||||
return myMavenLocalRepo;
|
||||
}
|
||||
|
||||
public void setMavenLocalRepo(@Nullable File mavenLocalRepo) {
|
||||
myMavenLocalRepo = mavenLocalRepo;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MavenProjectSettings getInitial() {
|
||||
MavenProjectSettings result = new MavenProjectSettings();
|
||||
result.setMavenHome(MavenServerManager.BUNDLED_MAVEN_3);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemSettingsControl;
|
||||
import com.intellij.openapi.externalSystem.util.PaintAwarePanel;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.settings.MavenProjectSettings;
|
||||
|
||||
public class MavenProjectSettingsControl implements ExternalSystemSettingsControl<MavenProjectSettings> {
|
||||
public MavenProjectSettingsControl(MavenProjectSettings initialSettings) {}
|
||||
|
||||
@Override
|
||||
public void fillUi(@NotNull PaintAwarePanel canvas, int indentLevel) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(@NotNull MavenProjectSettings settings) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate(@NotNull MavenProjectSettings settings) throws ConfigurationException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeUIResources() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showUi(boolean show) {
|
||||
|
||||
}
|
||||
}
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil;
|
||||
import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemSettings;
|
||||
import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListener;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.util.messages.Topic;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@State(name = "MavenSettings", storages = @Storage("maven.xml"))
|
||||
public class MavenSettings extends AbstractExternalSystemSettings<MavenSettings, MavenProjectSettings, MavenSettingsListener> {
|
||||
|
||||
@NotNull private final String myJdkToUse;
|
||||
|
||||
public MavenSettings(@NotNull Project project, @NotNull String jdkToUse) {
|
||||
super(MavenSettingsListener.TOPIC, project);
|
||||
myJdkToUse = jdkToUse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subscribe(@NotNull ExternalSystemSettingsListener<MavenProjectSettings> listener) {
|
||||
getProject().getMessageBus().connect(getProject())
|
||||
.subscribe(MavenSettingsListener.TOPIC, new DelegatingMavenSettingsListenerAdapter(listener));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void copyExtraSettingsFrom(@NotNull MavenSettings settings) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkSettings(@NotNull MavenProjectSettings old, @NotNull MavenProjectSettings current) {
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getJdkToUse() {
|
||||
return myJdkToUse;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MavenSettings getInstance(@NotNull Project project) {
|
||||
return new MavenSettings(project, ExternalSystemJdkUtil.USE_PROJECT_JDK);
|
||||
}
|
||||
|
||||
}
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListener;
|
||||
import com.intellij.util.messages.Topic;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
public interface MavenSettingsListener extends ExternalSystemSettingsListener<MavenProjectSettings> {
|
||||
Topic<MavenSettingsListener> TOPIC = Topic.create("Maven-specific settings", MavenSettingsListener.class);
|
||||
|
||||
}
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.settings;
|
||||
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemSettingsControl;
|
||||
import com.intellij.openapi.externalSystem.util.PaintAwarePanel;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.settings.MavenSettings;
|
||||
|
||||
|
||||
public class MavenSystemSettingsControl implements ExternalSystemSettingsControl<MavenSettings> {
|
||||
public MavenSystemSettingsControl(MavenSettings settings) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillUi(@NotNull PaintAwarePanel canvas, int indentLevel) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(@NotNull MavenSettings settings) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate(@NotNull MavenSettings settings) throws ConfigurationException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeUIResources() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showUi(boolean show) {
|
||||
|
||||
}
|
||||
}
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.maven.externalSystemIntegration.util;
|
||||
|
||||
import com.intellij.execution.executors.DefaultRunExecutor;
|
||||
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings;
|
||||
import com.intellij.openapi.externalSystem.model.execution.ExternalTaskExecutionInfo;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.execution.MavenRunnerParameters;
|
||||
import org.jetbrains.idea.maven.execution.MavenRunnerSettings;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
import org.jetbrains.idea.maven.project.MavenGeneralSettings;
|
||||
|
||||
public class MavenExternalSystemTaskRunner {
|
||||
|
||||
private Project myProject;
|
||||
|
||||
public MavenExternalSystemTaskRunner(@NotNull Project project) {
|
||||
myProject = project;
|
||||
}
|
||||
|
||||
public void runMavenTask(@NotNull MavenRunnerParameters params,
|
||||
@Nullable MavenGeneralSettings settings,
|
||||
@Nullable MavenRunnerSettings runnerSettings) {
|
||||
ExternalSystemTaskExecutionSettings taskExecutionSettings = createExecutionSettings(params, settings, runnerSettings);
|
||||
ExternalSystemUtil.runTask(taskExecutionSettings, DefaultRunExecutor.EXECUTOR_ID, myProject, MavenConstants.SYSTEM_ID);
|
||||
}
|
||||
|
||||
private ExternalSystemTaskExecutionSettings createExecutionSettings(@NotNull MavenRunnerParameters params,
|
||||
@Nullable MavenGeneralSettings settings,
|
||||
@Nullable MavenRunnerSettings runnerSettings) {
|
||||
ExternalSystemTaskExecutionSettings executionSettings = new ExternalSystemTaskExecutionSettings();
|
||||
executionSettings.setExternalProjectPath(params.getWorkingDirPath());
|
||||
executionSettings.setTaskNames(params.getGoals());
|
||||
if (runnerSettings != null) {
|
||||
executionSettings.setVmOptions(runnerSettings.getVmOptions());
|
||||
}
|
||||
executionSettings.setExternalSystemIdString(MavenConstants.SYSTEM_ID.toString());
|
||||
return executionSettings;
|
||||
}
|
||||
}
|
||||
-1
@@ -28,7 +28,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.execution.*;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.util.MavenExternalSystemTaskRunner;
|
||||
import org.jetbrains.idea.maven.project.MavenGeneralSettings;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
import org.jetbrains.idea.maven.project.MavenProjectsManager;
|
||||
|
||||
-2
@@ -24,8 +24,6 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.projectImport.ProjectOpenProcessorBase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.MavenProjectImportBuilder;
|
||||
import org.jetbrains.idea.maven.externalSystemIntegration.MavenProjectImportProvider;
|
||||
import org.jetbrains.idea.maven.model.MavenConstants;
|
||||
import org.jetbrains.idea.maven.model.MavenExplicitProfiles;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
|
||||
@@ -44,9 +44,7 @@
|
||||
<fileTypeUsageSchemaDescriptor implementationClass="org.jetbrains.idea.maven.utils.MavenFileTypeFactory"/>
|
||||
<projectImportProvider implementation="org.jetbrains.idea.maven.wizards.MavenProjectImportProvider"/>
|
||||
<projectOpenProcessor implementation="org.jetbrains.idea.maven.wizards.MavenProjectOpenProcessor"/>
|
||||
<!-- <externalSystemManager implementation="org.jetbrains.idea.maven.externalSystemIntegration.MavenExternalManager"/>-->
|
||||
<projectImportBuilder implementation="org.jetbrains.idea.maven.wizards.MavenProjectBuilder"/>
|
||||
<!-- <externalSystemOutputParserProvider implementation="org.jetbrains.idea.maven.externalSystemIntegration.output.MavenOutputParserProvider"/>-->
|
||||
<moduleBuilder builderClass="org.jetbrains.idea.maven.wizards.MavenModuleBuilder"/>
|
||||
<frameworkSupport implementation="org.jetbrains.idea.maven.wizards.MavenFrameworkSupportProvider"/>
|
||||
<moduleExtension implementation="org.jetbrains.idea.maven.importing.MavenSourceFoldersModuleExtension"/>
|
||||
|
||||
Reference in New Issue
Block a user