Bug 521328: [9][assist] completing after "requires" shows proposals with
a folder icon
Change-Id: Idf9ed64e65c8a487efef13b3c4fb92c7a82ba09b
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyModuleCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyModuleCompletionProposal.java
index f64952f..4bdf9d9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyModuleCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyModuleCompletionProposal.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2016 IBM Corporation and others.
+ * Copyright (c) 2016, 2017 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -16,17 +16,31 @@
package org.eclipse.jdt.internal.ui.text.java;
import org.eclipse.jdt.core.CompletionProposal;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
public class LazyModuleCompletionProposal extends LazyJavaCompletionProposal {
+ private ICompilationUnit fCompilationUnit;
+
public LazyModuleCompletionProposal(CompletionProposal proposal, JavaContentAssistInvocationContext context) {
super(proposal, context);
+ fCompilationUnit= context.getCompilationUnit();
}
-
@Override
protected ProposalInfo computeProposalInfo() {
+
+ IJavaProject project;
+ if (fCompilationUnit != null)
+ project= fCompilationUnit.getJavaProject();
+ else
+ project= fInvocationContext.getProject();
+ if (project != null) {
+ return new ModuleProposalInfo(project, fProposal);
+ }
+
return super.computeProposalInfo();
}
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ModuleProposalInfo.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ModuleProposalInfo.java
new file mode 100644
index 0000000..32ae191
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ModuleProposalInfo.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2017 GK Software AG, and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
+ * Contributors:
+ * Stephan Herrmann - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.text.java;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.jdt.core.CompletionProposal;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaModelException;
+
+public class ModuleProposalInfo extends ProposalInfo {
+
+ private boolean fJavaElementResolved= false;
+
+ private final IJavaProject fJavaProject;
+
+ private final CompletionProposal fProposal;
+
+ ModuleProposalInfo(IJavaProject project, CompletionProposal proposal) {
+ Assert.isNotNull(project);
+ Assert.isNotNull(proposal);
+ fJavaProject= project;
+ fProposal= proposal;
+ }
+
+ @Override
+ public IJavaElement getJavaElement() throws JavaModelException {
+ if (!fJavaElementResolved) {
+ fJavaElementResolved= true;
+ fElement= resolveModule();
+ }
+ return fElement;
+ }
+
+ /**
+ * Resolves to an IModuleDescription.
+ *
+ * @return the <code>IModuleDescription</code> or <code>null</code> if no Java element can be found
+ * @throws JavaModelException thrown if the given path is <code>null</code> or absolute
+ */
+ private IJavaElement resolveModule() throws JavaModelException {
+ char[] signature= fProposal.getDeclarationSignature();
+ if (signature != null) {
+ String typeName= String.valueOf(signature);
+ return fJavaProject.findModule(typeName, null);
+ }
+ return null;
+ }
+
+}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java
index e48bf4c..1fe3028 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java
@@ -19,7 +19,6 @@
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.StyledString;
-import org.eclipse.ui.ide.IDE;
import org.eclipse.jdt.core.CompletionContext;
import org.eclipse.jdt.core.CompletionProposal;
@@ -33,7 +32,6 @@
import org.eclipse.jdt.ui.JavaElementImageDescriptor;
import org.eclipse.jdt.ui.JavaElementLabels;
-import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
@@ -663,7 +661,7 @@
descriptor= JavaPluginImages.DESC_OBJS_PACKAGE;
break;
case CompletionProposal.MODULE_REF:
- descriptor= JavaPlugin.getDefault().getWorkbench().getSharedImages().getImageDescriptor(IDE.SharedImages.IMG_OBJ_PROJECT);
+ descriptor= JavaPluginImages.DESC_OBJS_MODULE;
break;
case CompletionProposal.KEYWORD:
case CompletionProposal.LABEL_REF: