/* * 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; } }