Skip to content

Commit

Permalink
IDEX-3227: Fix code assistant in modules
Browse files Browse the repository at this point in the history
  • Loading branch information
Dmitry Shnurenko committed Nov 18, 2015
1 parent 1e4cf6f commit 92a0452
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 23 deletions.
5 changes: 5 additions & 0 deletions plugin-java/che-plugin-java-ext-lang-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-api-project</artifactId>
</dependency>
<!--TODO it's a temporary solution. This will be removed during work on this issue IDEX-3468.-->
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-api-workspace</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-client-gwt-project</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;

import org.eclipse.che.api.project.shared.dto.ProjectDescriptor;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.event.project.OpenProjectEvent;
import org.eclipse.che.ide.api.event.project.OpenProjectHandler;
Expand Down Expand Up @@ -85,12 +84,12 @@ public DependenciesUpdater(JavaLocalizationConstant javaLocalizationConstant,
eventBus.addHandler(OpenProjectEvent.TYPE, new OpenProjectHandler() {
@Override
public void onProjectOpened(OpenProjectEvent event) {
updateDependencies(event.getDescriptor());
updateDependencies(event.getDescriptor().getPath());
}
});
}

public void updateDependencies(final ProjectDescriptor project) {
public void updateDependencies(final String path) {
if (updating) {
return;
}
Expand All @@ -105,7 +104,7 @@ public void updateDependencies(final ProjectDescriptor project) {

Unmarshallable<ClassPathBuilderResult> unmarshaller = dtoUnmarshallerFactory.newUnmarshaller(ClassPathBuilderResult.class);

classpathServiceClient.updateDependencies(project.getPath(), new AsyncRequestCallback<ClassPathBuilderResult>(unmarshaller) {
classpathServiceClient.updateDependencies(path, new AsyncRequestCallback<ClassPathBuilderResult>(unmarshaller) {
@Override
protected void onSuccess(ClassPathBuilderResult result) {
if (SUCCESS.equals(result.getStatus())) {
Expand All @@ -121,7 +120,7 @@ protected void onSuccess(ClassPathBuilderResult result) {

@Override
protected void onFailure(Throwable exception) {
Log.warn(DependenciesUpdater.class, "Failed to launch update dependency process for " + project);
Log.warn(DependenciesUpdater.class, "Failed to launch update dependency process for " + path);
updateFinishedWithError(exception.getMessage(), notification);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.api.promises.client.js.Promises;
import org.eclipse.che.ide.api.project.node.HasProjectDescriptor;
import org.eclipse.che.ide.api.project.node.HasStorablePath;
import org.eclipse.che.ide.api.project.node.Node;
import org.eclipse.che.ide.api.project.node.interceptor.NodeInterceptor;
import org.eclipse.che.ide.ext.java.client.dependenciesupdater.DependenciesUpdater;
Expand All @@ -40,7 +40,8 @@ public Promise<List<Node>> intercept(Node parent, List<Node> children) {

if ((parent instanceof ModuleDescriptorNode || parent instanceof ProjectDescriptorNode)
&& JavaNodeManager.isJavaProject(parent) && isValid(parent)) {
dependenciesUpdater.get().updateDependencies(((HasProjectDescriptor)parent).getProjectDescriptor());

dependenciesUpdater.get().updateDependencies(((HasStorablePath)parent).getStorablePath());
}

return Promises.resolve(children);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,21 @@
import com.google.inject.Singleton;

import org.eclipse.che.api.project.shared.dto.ItemReference;
import org.eclipse.che.api.project.shared.dto.ProjectDescriptor;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.api.promises.client.js.Promises;
import org.eclipse.che.api.workspace.shared.dto.ModuleConfigDto;
import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.ide.api.project.node.HasProjectDescriptor;
import org.eclipse.che.ide.api.project.node.Node;
import org.eclipse.che.ide.api.project.node.interceptor.NodeInterceptor;
import org.eclipse.che.ide.dto.DtoFactory;
import org.eclipse.che.ide.ext.java.client.project.node.JavaFileNode;
import org.eclipse.che.ide.ext.java.client.project.node.JavaNodeManager;
import org.eclipse.che.ide.ext.java.client.project.settings.JavaNodeSettings;
import org.eclipse.che.ide.project.node.AbstractProjectBasedNode;
import org.eclipse.che.ide.project.node.FileReferenceNode;
import org.eclipse.che.ide.project.node.ModuleDescriptorNode;

import java.util.List;

Expand All @@ -36,11 +41,15 @@
@Singleton
public class JavaClassInterceptor implements NodeInterceptor {

private JavaNodeManager nodeManager;
private final JavaNodeManager nodeManager;
private final DtoFactory dtoFactory;

private ProjectDescriptor descriptor;

@Inject
public JavaClassInterceptor(JavaNodeManager nodeManager) {
public JavaClassInterceptor(JavaNodeManager nodeManager, DtoFactory dtoFactory) {
this.nodeManager = nodeManager;
this.dtoFactory = dtoFactory;
}

@Override
Expand All @@ -60,6 +69,25 @@ private Function<Node, Node> intercept(final Node parent) {
@Nullable
@Override
public Node apply(@Nullable Node child) {
//TODO it's a temporary solution. This code will be rewriting during work on this issue IDEX-3468.
Node parentNode = child.getParent();

if (parentNode instanceof ModuleDescriptorNode) {
descriptor = dtoFactory.createDto(ProjectDescriptor.class);

AbstractProjectBasedNode abstractNode = (AbstractProjectBasedNode)parentNode;

ModuleConfigDto moduleConfigDto = (ModuleConfigDto)abstractNode.getData();

descriptor.withName(moduleConfigDto.getName())
.withPath(moduleConfigDto.getPath())
.withAttributes(moduleConfigDto.getAttributes())
.withModules(moduleConfigDto.getModules())
.withDescription(moduleConfigDto.getDescription())
.withMixins(moduleConfigDto.getMixinTypes())
.withType(moduleConfigDto.getType());
}

if (!(child instanceof FileReferenceNode)) {
return child;
}
Expand All @@ -72,7 +100,8 @@ public Node apply(@Nullable Node child) {

JavaFileNode node =
nodeManager.getJavaNodeFactory().newJavaFileNode(data,
((HasProjectDescriptor)child).getProjectDescriptor(),
descriptor == null ? ((HasProjectDescriptor)child)
.getProjectDescriptor() : descriptor,
(JavaNodeSettings)nodeManager.getJavaSettingsProvider()
.getSettings());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ private void bindEvents(final EventBus eventBus, final DependenciesUpdater depen
public void onProjectReady(ProjectReadyEvent event) {
project = event.getProject();
if (isValidForResolveDependencies(project)) {
dependenciesUpdater.updateDependencies(project);
dependenciesUpdater.updateDependencies(project.getPath());
}
}
});
Expand All @@ -88,7 +88,7 @@ public void onMachineRunning(MachineStateEvent event) {
new Timer() {
@Override
public void run() {
dependenciesUpdater.updateDependencies(project);
dependenciesUpdater.updateDependencies(project.getPath());
}
}.schedule(5000);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public UpdateDependencyAction(AppContext appContext,
@Override
public void actionPerformed(ActionEvent e) {
eventLogger.log(this);
dependenciesUpdater.updateDependencies(appContext.getCurrentProject().getProjectDescription());
dependenciesUpdater.updateDependencies(appContext.getCurrentProject().getProjectDescription().getPath());
}

/** {@inheritDoc} */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,15 @@
import com.google.inject.Provider;
import com.google.inject.Singleton;

import org.eclipse.che.ide.api.project.node.HasProjectDescriptor;
import org.eclipse.che.api.project.shared.dto.ProjectDescriptor;
import org.eclipse.che.api.workspace.shared.dto.ModuleConfigDto;
import org.eclipse.che.ide.api.project.node.Node;
import org.eclipse.che.ide.ext.java.client.dependenciesupdater.DependenciesUpdater;
import org.eclipse.che.ide.ext.java.client.project.interceptor.AbstractBeforeModuleOpenedInterceptor;
import org.eclipse.che.ide.extension.maven.shared.MavenAttributes;
import org.eclipse.che.ide.project.node.AbstractProjectBasedNode;
import org.eclipse.che.ide.project.node.ModuleDescriptorNode;
import org.eclipse.che.ide.project.node.ProjectDescriptorNode;

import java.util.List;
import java.util.Map;
Expand All @@ -36,9 +40,27 @@ public MavenBeforeModuleOpenedInterceptor(Provider<DependenciesUpdater> dependen

@Override
public boolean isValid(Node node) {
HasProjectDescriptor descriptor = (HasProjectDescriptor)node;
ModuleConfigDto nodeDescriptor = null;
ProjectDescriptor projectDescriptor = null;

Map<String, List<String>> attr = descriptor.getProjectDescriptor().getAttributes();
//TODO it's a temporary solution. This code will be rewriting during work on this issue IDEX-3468.
if (node instanceof ModuleDescriptorNode) {
AbstractProjectBasedNode abstractNode = (AbstractProjectBasedNode)node;

nodeDescriptor = (ModuleConfigDto)abstractNode.getData();
}

if (node instanceof ProjectDescriptorNode) {
AbstractProjectBasedNode abstractNode = (AbstractProjectBasedNode)node;

projectDescriptor = (ProjectDescriptor)abstractNode.getData();
}

if (nodeDescriptor == null && projectDescriptor == null) {
return false;
}

Map<String, List<String>> attr = nodeDescriptor == null ? projectDescriptor.getAttributes() : nodeDescriptor.getAttributes();
return attr.containsKey(MavenAttributes.PACKAGING) && !"pom".equals(attr.get(MavenAttributes.PACKAGING).get(0));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,14 @@ public static void configure(FolderEntry projectFolder)
}
}

public static void configure(FolderEntry projectFolder, Model model)
throws ServerException, ForbiddenException, ConflictException {
VirtualFileEntry child = projectFolder.getChild(".codenvy");
if (child != null && child.getVirtualFile().getChild("classpath") == null) {
public static void configure(FolderEntry projectFolder, Model model) throws ServerException, ForbiddenException, ConflictException {
FolderEntry cheFolder = (FolderEntry)projectFolder.getChild(".codenvy");

if (cheFolder == null) {
cheFolder = projectFolder.createFolder(".codenvy");
}

if (cheFolder != null && cheFolder.getVirtualFile().getChild("classpath") == null) {
String sourceDirectory = null;
String testDirectory = null;
Build build = model.getBuild();
Expand All @@ -61,7 +65,7 @@ public static void configure(FolderEntry projectFolder, Model model)
testDirectory = testDirectory != null && !testDirectory.isEmpty() ? testDirectory : "src/test/java";

String classPathContent = String.format(CLASS_PATH_CONTENT, sourceDirectory, testDirectory);
child.getVirtualFile().createFile("classpath", null, new ByteArrayInputStream(classPathContent.getBytes()));
cheFolder.getVirtualFile().createFile("classpath", null, new ByteArrayInputStream(classPathContent.getBytes()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public static void resolve(FolderEntry projectFolder, ProjectManager projectMana
}

Model model = Model.readFrom(pom.getVirtualFile());
MavenClassPathConfigurator.configure(projectFolder, model);
MavenClassPathConfigurator.configure(projectFolder);

String packaging = model.getPackaging();
if (packaging != null && packaging.equals("pom")) {
Expand All @@ -90,6 +90,8 @@ public static void resolve(FolderEntry projectFolder, ProjectManager projectMana
List<ModuleConfig> modules = new ArrayList<>();

for (FolderEntry folderEntry : project.getBaseFolder().getChildFolders()) {
MavenClassPathConfigurator.configure(folderEntry);

defineModules(folderEntry, modules);
}

Expand All @@ -101,7 +103,8 @@ public static void resolve(FolderEntry projectFolder, ProjectManager projectMana

private static void defineModules(FolderEntry folderEntry, List<ModuleConfig> modules) throws ServerException,
ForbiddenException,
IOException {
IOException,
ConflictException {
VirtualFileEntry pom = folderEntry.getChild("pom.xml");

if (pom == null) {
Expand All @@ -126,6 +129,8 @@ private static void defineModules(FolderEntry folderEntry, List<ModuleConfig> mo
List<ModuleConfig> internalModules = new ArrayList<>();

for (FolderEntry internalModule : folderEntry.getChildFolders()) {
MavenClassPathConfigurator.configure(folderEntry);

defineModules(internalModule, internalModules);
}

Expand Down

0 comments on commit 92a0452

Please sign in to comment.