/**
* Copyright (c) 2014 Codetrails GmbH.
* 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
*
* Contributors:
* Marcel Bruch - initial API and implementation.
*/
package org.eclipse.recommenders.internal.completion.rcp;
import static java.lang.String.valueOf;
import static org.eclipse.jdt.internal.ui.JavaPluginImages.IMG_OBJS_LOCAL_VARIABLE;
import static org.eclipse.recommenders.utils.Checks.ensureEquals;
import org.eclipse.jdt.core.CompletionContext;
import org.eclipse.jdt.core.CompletionProposal;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jdt.internal.ui.text.java.FieldProposalInfo;
import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal;
import org.eclipse.jdt.internal.ui.text.java.JavaMethodCompletionProposal;
import org.eclipse.jdt.internal.ui.text.java.MethodProposalInfo;
import org.eclipse.jdt.internal.ui.text.java.ParameterGuessingProposal;
import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
import com.google.common.annotations.Beta;
/**
* EXPERIMENTAL. Not recommended for public API use.
*/
@SuppressWarnings("restriction")
@Beta
public class JavaCompletionProposals {
public static JavaCompletionProposal newLocalVariableRefProposal(AccessibleCompletionProposal localRef) {
ensureEquals(localRef.getKind(), CompletionProposal.LOCAL_VARIABLE_REF,
"Proposal kind is not a reference to a local variable."); //$NON-NLS-1$
String replacementString = valueOf(localRef.getCompletion());
int replacementOffset = localRef.getReplaceStart();
int replacementLength = localRef.getReplaceEnd() - localRef.getReplaceStart();
StyledString displayString = new StyledString(valueOf(localRef.getName()))
.append(" : " + valueOf(localRef.getTypeName()), StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
Image image = JavaPluginImages.get(IMG_OBJS_LOCAL_VARIABLE);
int relevance = localRef.getRelevance();
return new JavaCompletionProposal(replacementString, replacementOffset, replacementLength, image, displayString,
relevance);
}
public static JavaCompletionProposal newFieldRef(AccessibleCompletionProposal fieldRef) {
ensureEquals(fieldRef.getKind(), CompletionProposal.FIELD_REF, "Proposal kind is not a reference to a field."); //$NON-NLS-1$
String replacementString = valueOf(fieldRef.getCompletion());
int replacementStart = fieldRef.getReplaceStart();
int replacementLength = fieldRef.getReplaceEnd() - replacementStart;
String fieldName = valueOf(fieldRef.getName());
String typeName = valueOf(fieldRef.getTypeName());
StyledString displayString = new StyledString(fieldName).append(" : " + typeName, //$NON-NLS-1$
StyledString.QUALIFIER_STYLER);
Image image = JavaElementImageProvider.getFieldImageDescriptor(false, fieldRef.getFlags()).createImage();
JavaCompletionProposal p = new JavaCompletionProposal(replacementString, replacementStart, replacementLength,
image, displayString, fieldRef.getRelevance());
IJavaProject project = fieldRef.getData(IJavaProject.class).orNull();
if (project != null) {
p.setProposalInfo(new FieldProposalInfo(project, fieldRef));
}
return p;
}
public static JavaMethodCompletionProposal newMethodRef(AccessibleCompletionProposal methodRef,
JavaContentAssistInvocationContext context) {
CompletionContext coreContext = context.getCoreContext();
JavaMethodCompletionProposal res;
if (coreContext != null && coreContext.isExtended()) {
res = new ParameterGuessingProposal(methodRef, context, coreContext, true);
} else {
res = new JavaMethodCompletionProposal(methodRef, context);
}
IJavaProject project = methodRef.getData(IJavaProject.class).orNull();
if (project != null) {
res.setProposalInfo(new MethodProposalInfo(project, methodRef));
}
return res;
}
}