blob: d19427cbaeeb705710aaa06e60b22a33cc0a7f14 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 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
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.correction;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.wst.sse.ui.internal.Logger;
import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
/**
* @deprecated since 2.0 RC0 Use
* org.eclipse.jface.text.quickassist.IQuickAssistProcessor;
*/
public class StructuredCorrectionProcessor implements IContentAssistProcessor {
protected IAnnotationModel fAnnotationModel;
protected IQuickAssistProcessor fQuickAssistProcessor;
protected IQuickFixProcessor fQuickFixProcessor;
public StructuredCorrectionProcessor(ISourceViewer sourceViewer) {
fAnnotationModel = sourceViewer.getAnnotationModel();
}
protected void addQuickAssistProposals(StructuredTextViewer viewer, ArrayList proposals, int documentOffset) {
try {
IQuickAssistProcessor processor = getQuickAssistProcessor();
if (processor != null && processor.canAssist(viewer, documentOffset)) {
ICompletionProposal[] res = processor.getProposals(viewer, documentOffset);
if (res != null) {
for (int k = 0; k < res.length; k++) {
proposals.add(res[k]);
}
}
}
} catch (CoreException e) {
// log for now, unless we find reason not to
Logger.log(Logger.INFO, e.getMessage());
}
}
protected void addQuickFixProposals(StructuredTextViewer viewer, ArrayList proposals, int documentOffset) {
Iterator iter = fAnnotationModel.getAnnotationIterator();
while (iter.hasNext()) {
Annotation annotation = (Annotation) iter.next();
Position pos = fAnnotationModel.getPosition(annotation);
if (pos != null && documentOffset >= pos.offset && documentOffset <= pos.offset + pos.length) {
IQuickFixProcessor processor = getQuickFixProcessor();
if (processor != null && processor.canFix(annotation)) {
try {
ICompletionProposal[] res = processor.getProposals(annotation);
if (res != null) {
for (int k = 0; k < res.length; k++) {
proposals.add(res[k]);
}
}
} catch (CoreException e) {
// log for now, unless we find reason not to
Logger.log(Logger.INFO, e.getMessage());
}
}
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer,
* int)
*/
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) {
ArrayList proposals = new ArrayList();
if (viewer instanceof StructuredTextViewer) {
addQuickFixProposals((StructuredTextViewer) viewer, proposals, documentOffset);
if (proposals.isEmpty()) {
addQuickAssistProposals((StructuredTextViewer) viewer, proposals, documentOffset);
}
}
if (proposals.isEmpty())
proposals.add(new NoModificationCompletionProposal());
return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer,
* int)
*/
public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) {
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
*/
public char[] getCompletionProposalAutoActivationCharacters() {
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
*/
public char[] getContextInformationAutoActivationCharacters() {
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
*/
public IContextInformationValidator getContextInformationValidator() {
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()
*/
public String getErrorMessage() {
return null;
}
protected IQuickAssistProcessor getQuickAssistProcessor() {
return null;
}
protected IQuickFixProcessor getQuickFixProcessor() {
return null;
}
}