mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Make WorkspaceReader available to extensions.
Add unit tests.
This commit is contained in:
committed by
Sergey Evdokimov
parent
217a6ba514
commit
447fa054ff
+23
-25
@@ -350,17 +350,23 @@ public class Maven3ServerEmbedderImpl extends MavenRemoteObject implements Maven
|
||||
|
||||
MavenProject project = buildingResult.getProject();
|
||||
|
||||
// copied from DefaultLifecycleExecutor.execute
|
||||
loadExtensions(project);
|
||||
//findExtensions(project);
|
||||
// end copied from DefaultLifecycleExecutor.execute
|
||||
RepositorySystemSession repositorySession = getComponent(LegacySupport.class).getRepositorySession();
|
||||
if (repositorySession instanceof DefaultRepositorySystemSession) {
|
||||
((DefaultRepositorySystemSession)repositorySession).setTransferListener(new TransferListenerAdapter(myCurrentIndicator));
|
||||
|
||||
if (myWorkspaceMap != null) {
|
||||
((DefaultRepositorySystemSession)repositorySession).setWorkspaceReader(new Maven3WorkspaceReader(myWorkspaceMap));
|
||||
}
|
||||
}
|
||||
|
||||
List<Exception> exceptions = new ArrayList<Exception>();
|
||||
loadExtensions(project, exceptions);
|
||||
|
||||
//Artifact projectArtifact = project.getArtifact();
|
||||
//Map managedVersions = project.getManagedVersionMap();
|
||||
//ArtifactMetadataSource metadataSource = getComponent(ArtifactMetadataSource.class);
|
||||
project.setDependencyArtifacts(project.createArtifacts(getComponent(ArtifactFactory.class), null, null));
|
||||
//
|
||||
ArtifactResolver resolver = getComponent(ArtifactResolver.class);
|
||||
|
||||
ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest();
|
||||
resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts());
|
||||
@@ -373,20 +379,12 @@ public class Maven3ServerEmbedderImpl extends MavenRemoteObject implements Maven
|
||||
resolutionRequest.setResolveRoot(false);
|
||||
resolutionRequest.setResolveTransitively(true);
|
||||
|
||||
RepositorySystemSession repositorySession = getComponent(LegacySupport.class).getRepositorySession();
|
||||
if (repositorySession instanceof DefaultRepositorySystemSession) {
|
||||
((DefaultRepositorySystemSession)repositorySession).setTransferListener(new TransferListenerAdapter(myCurrentIndicator));
|
||||
|
||||
if (myWorkspaceMap != null) {
|
||||
((DefaultRepositorySystemSession)repositorySession).setWorkspaceReader(new Maven3WorkspaceReader(myWorkspaceMap));
|
||||
}
|
||||
}
|
||||
|
||||
ArtifactResolver resolver = getComponent(ArtifactResolver.class);
|
||||
ArtifactResolutionResult result = resolver.resolve(resolutionRequest);
|
||||
|
||||
project.setArtifacts(result.getArtifacts());
|
||||
// end copied from DefaultMavenProjectBuilder.buildWithDependencies
|
||||
ref.set(new MavenExecutionResult(project, new ArrayList<Exception>()));
|
||||
ref.set(new MavenExecutionResult(project, exceptions));
|
||||
}
|
||||
catch (Exception e) {
|
||||
ref.set(handleException(e));
|
||||
@@ -398,7 +396,7 @@ public class Maven3ServerEmbedderImpl extends MavenRemoteObject implements Maven
|
||||
}
|
||||
|
||||
/** adapted from {@link org.apache.maven.DefaultMaven#doExecute(org.apache.maven.execution.MavenExecutionRequest)} */
|
||||
private void loadExtensions(MavenProject project) {
|
||||
private void loadExtensions(MavenProject project, List<Exception> exceptions) {
|
||||
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
|
||||
Collection<AbstractMavenLifecycleParticipant> lifecycleParticipants = getLifecycleParticipants(Arrays.asList(project));
|
||||
if (!lifecycleParticipants.isEmpty()) {
|
||||
@@ -407,17 +405,17 @@ public class Maven3ServerEmbedderImpl extends MavenRemoteObject implements Maven
|
||||
session.setCurrentProject(project);
|
||||
session.setProjects(Arrays.asList(project));
|
||||
|
||||
try {
|
||||
for (AbstractMavenLifecycleParticipant listener : lifecycleParticipants) {
|
||||
Thread.currentThread().setContextClassLoader(listener.getClass().getClassLoader());
|
||||
for (AbstractMavenLifecycleParticipant listener : lifecycleParticipants) {
|
||||
Thread.currentThread().setContextClassLoader(listener.getClass().getClassLoader());
|
||||
try {
|
||||
listener.afterProjectsRead(session);
|
||||
}
|
||||
}
|
||||
catch (MavenExecutionException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
finally {
|
||||
Thread.currentThread().setContextClassLoader(originalClassLoader);
|
||||
catch (MavenExecutionException e) {
|
||||
exceptions.add(e);
|
||||
}
|
||||
finally {
|
||||
Thread.currentThread().setContextClassLoader(originalClassLoader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+40
@@ -0,0 +1,40 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>intellij.test</groupId>
|
||||
<artifactId>maven-extension</artifactId>
|
||||
<version>1.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-component-metadata</artifactId>
|
||||
<version>1.5.5</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>generate-metadata</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-core</artifactId>
|
||||
<version>3.0.3</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-component-annotations</artifactId>
|
||||
<version>1.5.5</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
BIN
Binary file not shown.
+27
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><project>
|
||||
<parent>
|
||||
<artifactId>plexus</artifactId>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<version>1.0.4</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>plexus-utils</artifactId>
|
||||
<name>Plexus Common Utilities</name>
|
||||
<version>1.1</version>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>org/codehaus/plexus/util/FileBasedTestCase.java</exclude>
|
||||
<exclude>**/Test*.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<distributionManagement>
|
||||
<status>deployed</status>
|
||||
</distributionManagement>
|
||||
</project>
|
||||
@@ -24,7 +24,9 @@ import com.intellij.openapi.roots.ModuleRootListener;
|
||||
import org.jetbrains.idea.maven.MavenCustomRepositoryHelper;
|
||||
import org.jetbrains.idea.maven.MavenImportingTestCase;
|
||||
import org.jetbrains.idea.maven.model.MavenProjectProblem;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
import org.jetbrains.idea.maven.server.MavenServerManager;
|
||||
import org.jetbrains.idea.maven.server.MavenServerManagerHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
@@ -270,6 +272,61 @@ public class MiscImportingTest extends MavenImportingTestCase {
|
||||
assertEquals(0, myProjectsTree.getRootProjects().get(0).getProblems().size());
|
||||
}
|
||||
|
||||
public void testMavenExtensionsAreLoadedAndAfterProjectsReadIsCalled() throws Exception {
|
||||
MavenCustomRepositoryHelper helper = new MavenCustomRepositoryHelper(myDir, "plugins");
|
||||
setRepositoryPath(helper.getTestDataPath("plugins"));
|
||||
getMavenGeneralSettings().setWorkOffline(true);
|
||||
MavenServerManagerHelper.connectToMaven3Server();
|
||||
|
||||
importProjectWithMaven3("<groupId>test</groupId>" +
|
||||
"<artifactId>project</artifactId>" +
|
||||
"<version>1</version>" +
|
||||
"" +
|
||||
"<build>" +
|
||||
" <extensions>" +
|
||||
" <extension>" +
|
||||
" <groupId>intellij.test</groupId>" +
|
||||
" <artifactId>maven-extension</artifactId>" +
|
||||
" <version>1.0</version>" +
|
||||
" </extension>" +
|
||||
" </extensions>" +
|
||||
"</build>");
|
||||
|
||||
List<MavenProject> projects = myProjectsTree.getProjects();
|
||||
assertEquals(1, projects.size());
|
||||
MavenProject mavenProject = projects.get(0);
|
||||
assertEquals("Name for test:project generated by MyMavenExtension.", mavenProject.getFinalName());
|
||||
|
||||
assertEquals(myProjectPom.getPath(), mavenProject.getProperties().getProperty("workspace-info"));
|
||||
}
|
||||
|
||||
public void testExceptionsFromMavenExtensionsAreReportedAsProblems() throws Exception {
|
||||
MavenCustomRepositoryHelper helper = new MavenCustomRepositoryHelper(myDir, "plugins");
|
||||
setRepositoryPath(helper.getTestDataPath("plugins"));
|
||||
getMavenGeneralSettings().setWorkOffline(true);
|
||||
|
||||
importProjectWithMaven3("<groupId>test</groupId>" +
|
||||
"<artifactId>project</artifactId>" +
|
||||
"<version>1</version>" +
|
||||
"<description>throw!</description>" +
|
||||
"" +
|
||||
"<build>" +
|
||||
" <extensions>" +
|
||||
" <extension>" +
|
||||
" <groupId>intellij.test</groupId>" +
|
||||
" <artifactId>maven-extension</artifactId>" +
|
||||
" <version>1.0</version>" +
|
||||
" </extension>" +
|
||||
" </extensions>" +
|
||||
"</build>");
|
||||
|
||||
List<MavenProject> projects = myProjectsTree.getProjects();
|
||||
assertEquals(1, projects.size());
|
||||
MavenProject mavenProject = projects.get(0);
|
||||
assertEquals(1, mavenProject.getProblems().size());
|
||||
assertEquals("throw!", mavenProject.getProblems().get(0).getDescription());
|
||||
}
|
||||
|
||||
public void testCheckingIfModuleIsNotDisposedBeforeCommitOnImport() throws Exception {
|
||||
if (ignore()) return;
|
||||
|
||||
@@ -312,4 +369,14 @@ public class MiscImportingTest extends MavenImportingTestCase {
|
||||
assertEquals(count, rootsChangedCount);
|
||||
assertEquals(rootsChangedCount, beforeRootsChangedCount);
|
||||
}
|
||||
|
||||
private void importProjectWithMaven3(String xml) throws Exception {
|
||||
MavenServerManagerHelper.connectToMaven3Server();
|
||||
try {
|
||||
importProject(xml);
|
||||
}
|
||||
finally {
|
||||
MavenServerManagerHelper.disconnectFromServer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.idea.maven.server;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.impl.ApplicationImpl;
|
||||
|
||||
import java.rmi.RemoteException;
|
||||
|
||||
public class MavenServerManagerHelper {
|
||||
/** {@link MavenServerManager#collectClassPathAndLibsFolder()} forces maven2 in test mode; we want maven3. */
|
||||
public static MavenServer connectToMaven3Server() throws RemoteException {
|
||||
ApplicationImpl application = (ApplicationImpl)ApplicationManager.getApplication();
|
||||
MavenServerManager msm = MavenServerManager.getInstance(); // do this first, it won't work outside of unit test mode
|
||||
|
||||
msm.cleanup(); // in case we were previously connected to maven2
|
||||
|
||||
boolean oldUnitTestMode = application.isUnitTestMode();
|
||||
application.setUnitTestMode(false);
|
||||
try {
|
||||
return msm.getOrCreateWrappee();
|
||||
}
|
||||
finally {
|
||||
application.setUnitTestMode(oldUnitTestMode);
|
||||
}
|
||||
}
|
||||
|
||||
public static void disconnectFromServer() {
|
||||
MavenServerManager msm = MavenServerManager.getInstance();
|
||||
msm.cleanup();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user