blob: a979a80863ffe41471c733bc0b09e4d3e8a6946d [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.eclipse.org/org/documents/epl-v10.php
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ide.eclipse.adt.internal.editors.formatting;
import com.android.ide.eclipse.adt.internal.build.AaptQuickFix;
import com.android.ide.eclipse.adt.internal.editors.layout.refactoring.RefactoringAssistant;
import com.android.ide.eclipse.adt.internal.lint.LintFixGenerator;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext;
import org.eclipse.jface.text.quickassist.IQuickAssistProcessor;
import org.eclipse.jface.text.source.Annotation;
import java.util.ArrayList;
import java.util.List;
/**
* This class implements Quick Assists for XML files. It does not perform any
* quick assistance on its own, but it coordinates the various separate quick
* assists available for XML such that the order is logical. This is necessary
* because without it, the order of suggestions (when more than one assistant
* provides suggestions) is not always optimal. There doesn't seem to be a way
* from non-Java languages to set the sorting order (see
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=229983 ). So instead of
* registering our multiple XML quick assistants via the plugin.xml file, we
* register <b>just</b> this manager, which delegates to the various XML quick
* assistants as appropriate.
*/
public class XmlQuickAssistManager implements IQuickAssistProcessor {
private final IQuickAssistProcessor[] mProcessors;
/** Constructs a new {@link XmlQuickAssistManager} which orders the quick fixes */
public XmlQuickAssistManager() {
mProcessors = new IQuickAssistProcessor[] {
new AaptQuickFix(),
new LintFixGenerator(),
new RefactoringAssistant()
};
}
@Override
public String getErrorMessage() {
return null;
}
@Override
public boolean canFix(Annotation annotation) {
for (IQuickAssistProcessor processor : mProcessors) {
if (processor.canFix(annotation)) {
return true;
}
}
return false;
}
@Override
public boolean canAssist(IQuickAssistInvocationContext invocationContext) {
for (IQuickAssistProcessor processor : mProcessors) {
if (processor.canAssist(invocationContext)) {
return true;
}
}
return false;
}
@Override
public ICompletionProposal[] computeQuickAssistProposals(
IQuickAssistInvocationContext invocationContext) {
List<ICompletionProposal> allProposals = null;
for (IQuickAssistProcessor processor : mProcessors) {
if (processor.canAssist(invocationContext)) {
ICompletionProposal[] proposals =
processor.computeQuickAssistProposals(invocationContext);
if (proposals != null && proposals.length > 0) {
if (allProposals == null) {
allProposals = new ArrayList<ICompletionProposal>();
}
for (ICompletionProposal proposal : proposals) {
allProposals.add(proposal);
}
}
}
}
if (allProposals != null) {
return allProposals.toArray(new ICompletionProposal[allProposals.size()]);
}
return null;
}
}