blob: 73b43f5eb34489efdc19c7b5deb94739709103cc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2012 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Paul Fullbright <paul.fullbright@oracle.com> - content assist category enablement - http://bugs.eclipse.org/345213
*******************************************************************************/
package org.eclipse.jdt.internal.ui.text.java;
import java.util.Hashtable;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.ui.IEditorPart;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
/**
* Java completion processor.
*/
public class JavaCompletionProcessor extends ContentAssistProcessor {
private final static String VISIBILITY= JavaCore.CODEASSIST_VISIBILITY_CHECK;
private final static String ENABLED= "enabled"; //$NON-NLS-1$
private final static String DISABLED= "disabled"; //$NON-NLS-1$
private IContextInformationValidator fValidator;
protected final IEditorPart fEditor;
public JavaCompletionProcessor(IEditorPart editor, ContentAssistant assistant, String partition) {
super(assistant, partition);
fEditor= editor;
}
/**
* Tells this processor to restrict its proposal to those element
* visible in the actual invocation context.
*
* @param restrict <code>true</code> if proposals should be restricted
*/
public void restrictProposalsToVisibility(boolean restrict) {
Hashtable<String, String> options= JavaCore.getOptions();
Object value= options.get(VISIBILITY);
if (value instanceof String) {
String newValue= restrict ? ENABLED : DISABLED;
if ( !newValue.equals(value)) {
options.put(VISIBILITY, newValue);
JavaCore.setOptions(options);
}
}
}
/**
* Tells this processor to restrict is proposals to those
* starting with matching cases.
*
* @param restrict <code>true</code> if proposals should be restricted
*/
public void restrictProposalsToMatchingCases(boolean restrict) {
// not yet supported
}
/*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
*/
@Override
public IContextInformationValidator getContextInformationValidator() {
if (fValidator == null)
fValidator= new JavaParameterListValidator();
return fValidator;
}
/*
* @see ContentAssistProcessor#checkDefaultEnablement(CompletionProposalCategory)
* @since 3.8
*/
@Override
protected boolean checkDefaultEnablement(CompletionProposalCategory category) {
return super.checkDefaultEnablement(category) && category.matches(getJavaProject());
}
/*
* @see ContentAssistProcessor#checkSeparateEnablement(CompletionProposalCategory)
* @since 3.8
*/
@Override
protected boolean checkSeparateEnablement(CompletionProposalCategory category) {
return super.checkSeparateEnablement(category) && category.matches(getJavaProject());
}
private IJavaProject getJavaProject() {
return EditorUtility.getJavaProject(fEditor.getEditorInput());
}
/*
* @see org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor#filterAndSort(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected List<ICompletionProposal> sortProposals(List<ICompletionProposal> proposals, IProgressMonitor monitor, ContentAssistInvocationContext context) {
ProposalSorterRegistry.getDefault().getCurrentSorter().sortProposals(context, proposals);
return proposals;
}
/*
* @see org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor#createContext(org.eclipse.jface.text.ITextViewer, int)
*/
@Override
protected ContentAssistInvocationContext createContext(ITextViewer viewer, int offset) {
return new JavaContentAssistInvocationContext(viewer, offset, fEditor);
}
}