| /* |
| * 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.lint; |
| |
| import com.android.annotations.NonNull; |
| import com.android.annotations.VisibleForTesting; |
| import com.android.ide.eclipse.adt.AdtPlugin; |
| import com.android.ide.eclipse.adt.AdtUtils; |
| import com.android.tools.lint.client.api.Configuration; |
| import com.android.tools.lint.client.api.DefaultConfiguration; |
| import com.android.tools.lint.client.api.LintClient; |
| import com.android.tools.lint.detector.api.Issue; |
| import com.android.tools.lint.detector.api.Project; |
| import com.android.tools.lint.detector.api.Severity; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.QualifiedName; |
| |
| import java.io.File; |
| |
| /** Configuration for Lint in Eclipse projects */ |
| class ProjectLintConfiguration extends DefaultConfiguration { |
| private boolean mFatalOnly; |
| |
| private final static QualifiedName CONFIGURATION_NAME = new QualifiedName(AdtPlugin.PLUGIN_ID, |
| "lintconfig"); //$NON-NLS-1$ |
| |
| @VisibleForTesting |
| ProjectLintConfiguration(LintClient client, Project project, |
| Configuration parent, boolean fatalOnly) { |
| super(client, project, parent); |
| mFatalOnly = fatalOnly; |
| } |
| |
| private static ProjectLintConfiguration create(LintClient client, IProject project, |
| Configuration parent, boolean fatalOnly) { |
| File dir = AdtUtils.getAbsolutePath(project).toFile(); |
| Project lintProject = client.getProject(dir, dir); |
| return new ProjectLintConfiguration(client, lintProject, parent, fatalOnly); |
| } |
| |
| public static ProjectLintConfiguration get(LintClient client, IProject project, |
| boolean fatalOnly) { |
| // Don't cache fatal-only configurations: they're only used occasionally and typically |
| // not repeatedly |
| if (fatalOnly) { |
| return create(client, project, GlobalLintConfiguration.get(), true); |
| } |
| |
| ProjectLintConfiguration configuration = null; |
| try { |
| Object value = project.getSessionProperty(CONFIGURATION_NAME); |
| configuration = (ProjectLintConfiguration) value; |
| } catch (CoreException e) { |
| // Not a problem; we will just create a new one |
| } |
| if (configuration == null) { |
| configuration = create(client, project, GlobalLintConfiguration.get(), false); |
| try { |
| project.setSessionProperty(CONFIGURATION_NAME, configuration); |
| } catch (CoreException e) { |
| AdtPlugin.log(e, "Can't store lint configuration"); |
| } |
| } |
| return configuration; |
| } |
| |
| @Override |
| public @NonNull Severity getSeverity(@NonNull Issue issue) { |
| Severity severity = super.getSeverity(issue); |
| if (mFatalOnly && severity != Severity.FATAL) { |
| return Severity.IGNORE; |
| } |
| return severity; |
| } |
| } |