/* * 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.layout.refactoring; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.refactorings.extractstring.ExtractStringProposal; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.ui.text.java.IInvocationContext; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; import org.eclipse.jdt.ui.text.java.IProblemLocation; /** * Quick Assistant for Java files in Android projects */ public class JavaQuickAssistant implements org.eclipse.jdt.ui.text.java.IQuickAssistProcessor { public JavaQuickAssistant() { } @Override public boolean hasAssists(IInvocationContext context) throws CoreException { return true; } @Override public IJavaCompletionProposal[] getAssists(IInvocationContext context, IProblemLocation[] locations) throws CoreException { // We should only offer Android quick assists within Android projects. // This can be done by adding this logic to the extension registration: // // <enablement> // <with variable="projectNatures"> // <iterate operator="or"> // <equals value="com.android.ide.eclipse.adt.AndroidNature"/> // </iterate> // </with> // </enablement> // // However, this causes some errors to be dumped to the log, so instead we filter // out non Android projects programmatically: IProject project = context.getCompilationUnit().getJavaProject().getProject(); if (project == null || !BaseProjectHelper.isAndroidProject(project)) { return null; } ASTNode coveringNode = context.getCoveringNode(); if (coveringNode != null && coveringNode.getNodeType() == ASTNode.STRING_LITERAL && coveringNode.getLength() > 2) { // don't extract empty strings (includes quotes) return new IJavaCompletionProposal[] { new ExtractStringProposal(context) }; } return null; } }