aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java176
1 files changed, 176 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java
new file mode 100644
index 000000000..2f0261e7b
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java
@@ -0,0 +1,176 @@
+/*
+ * 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.Nullable;
+import com.android.ide.eclipse.adt.AdtPlugin;
+import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs;
+import com.android.tools.lint.client.api.Configuration;
+import com.android.tools.lint.client.api.IssueRegistry;
+import com.android.tools.lint.detector.api.Context;
+import com.android.tools.lint.detector.api.Issue;
+import com.android.tools.lint.detector.api.Location;
+import com.android.tools.lint.detector.api.Severity;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/** Global (non-project-specific) configuration for Lint in Eclipse */
+class GlobalLintConfiguration extends Configuration {
+ private static final GlobalLintConfiguration sInstance = new GlobalLintConfiguration();
+
+ private Map<Issue, Severity> mSeverities;
+ private boolean mBulkEditing;
+
+ private GlobalLintConfiguration() {
+ }
+
+ /**
+ * Obtain a reference to the singleton
+ *
+ * @return the singleton configuration
+ */
+ @NonNull
+ public static GlobalLintConfiguration get() {
+ return sInstance;
+ }
+
+ @Override
+ public Severity getSeverity(@NonNull Issue issue) {
+ if (mSeverities == null) {
+ IssueRegistry registry = EclipseLintClient.getRegistry();
+ mSeverities = new HashMap<Issue, Severity>();
+ IPreferenceStore store = getStore();
+ String assignments = store.getString(AdtPrefs.PREFS_LINT_SEVERITIES);
+ if (assignments != null && assignments.length() > 0) {
+ for (String assignment : assignments.split(",")) { //$NON-NLS-1$
+ String[] s = assignment.split("="); //$NON-NLS-1$
+ if (s.length == 2) {
+ Issue d = registry.getIssue(s[0]);
+ if (d != null) {
+ Severity severity = Severity.valueOf(s[1]);
+ if (severity != null) {
+ mSeverities.put(d, severity);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Severity severity = mSeverities.get(issue);
+ if (severity != null) {
+ return severity;
+ }
+
+ if (!issue.isEnabledByDefault()) {
+ return Severity.IGNORE;
+ }
+
+ return issue.getDefaultSeverity();
+ }
+
+ private IPreferenceStore getStore() {
+ IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore();
+ return store;
+ }
+
+ @Override
+ public void ignore(@NonNull Context context, @NonNull Issue issue,
+ @Nullable Location location, @NonNull String message) {
+ throw new UnsupportedOperationException(
+ "Can't ignore() in global configurations"); //$NON-NLS-1$
+ }
+
+ @Override
+ public void setSeverity(@NonNull Issue issue, @Nullable Severity severity) {
+ if (mSeverities == null) {
+ // Force initialization
+ getSeverity(issue);
+ }
+
+ if (severity == null) {
+ mSeverities.remove(issue);
+ } else {
+ mSeverities.put(issue, severity);
+ }
+
+ if (!mBulkEditing) {
+ setSeverities(mSeverities);
+ }
+ }
+
+ /**
+ * Sets the custom severities for the given issues, in bulk.
+ *
+ * @param severities a map from detector to severity to use from now on
+ * @return true if something changed from the current settings
+ */
+ private boolean setSeverities(Map<Issue, Severity> severities) {
+ mSeverities = severities;
+
+ String value = "";
+ if (severities.size() > 0) {
+ List<Issue> sortedKeys = new ArrayList<Issue>(severities.keySet());
+ Collections.sort(sortedKeys);
+
+ StringBuilder sb = new StringBuilder(severities.size() * 20);
+ for (Issue issue : sortedKeys) {
+ Severity severity = severities.get(issue);
+ if (severity != issue.getDefaultSeverity()) {
+ if (sb.length() > 0) {
+ sb.append(',');
+ }
+ sb.append(issue.getId());
+ sb.append('=');
+ sb.append(severity.name());
+ }
+ }
+
+ value = sb.toString();
+ }
+
+ IPreferenceStore store = getStore();
+ String previous = store.getString(AdtPrefs.PREFS_LINT_SEVERITIES);
+ boolean changed = !value.equals(previous);
+ if (changed) {
+ if (value.length() == 0) {
+ store.setToDefault(AdtPrefs.PREFS_LINT_SEVERITIES);
+ } else {
+ store.setValue(AdtPrefs.PREFS_LINT_SEVERITIES, value);
+ }
+ }
+
+ return changed;
+ }
+
+ @Override
+ public void startBulkEditing() {
+ mBulkEditing = true;
+ }
+
+ @Override
+ public void finishBulkEditing() {
+ mBulkEditing = false;
+ setSeverities(mSeverities);
+ }
+} \ No newline at end of file