aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/SetAttributeFix.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/SetAttributeFix.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/SetAttributeFix.java151
1 files changed, 151 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/SetAttributeFix.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/SetAttributeFix.java
new file mode 100644
index 000000000..ea73b9a72
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/SetAttributeFix.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2012 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 static com.android.SdkConstants.ANDROID_URI;
+import static com.android.SdkConstants.ATTR_ALLOW_BACKUP;
+import static com.android.SdkConstants.ATTR_BASELINE_ALIGNED;
+import static com.android.SdkConstants.ATTR_CONTENT_DESCRIPTION;
+import static com.android.SdkConstants.ATTR_ID;
+import static com.android.SdkConstants.ATTR_INPUT_TYPE;
+import static com.android.SdkConstants.ATTR_PERMISSION;
+import static com.android.SdkConstants.ATTR_TRANSLATABLE;
+import static com.android.SdkConstants.NEW_ID_PREFIX;
+import static com.android.SdkConstants.VALUE_FALSE;
+
+import com.android.ide.eclipse.adt.AdtUtils;
+import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor;
+import com.android.ide.eclipse.adt.internal.editors.descriptors.DescriptorsUtils;
+import com.android.tools.lint.checks.AccessibilityDetector;
+import com.android.tools.lint.checks.InefficientWeightDetector;
+import com.android.tools.lint.checks.ManifestDetector;
+import com.android.tools.lint.checks.MissingIdDetector;
+import com.android.tools.lint.checks.SecurityDetector;
+import com.android.tools.lint.checks.TextFieldDetector;
+import com.android.tools.lint.checks.TranslationDetector;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.ui.IEditorPart;
+import org.w3c.dom.Element;
+
+/** Shared fix class for various builtin attributes */
+final class SetAttributeFix extends SetPropertyFix {
+ private SetAttributeFix(String id, IMarker marker) {
+ super(id, marker);
+ }
+
+ @Override
+ protected String getAttribute() {
+ if (mId.equals(AccessibilityDetector.ISSUE.getId())) {
+ return ATTR_CONTENT_DESCRIPTION;
+ } else if (mId.equals(InefficientWeightDetector.BASELINE_WEIGHTS.getId())) {
+ return ATTR_BASELINE_ALIGNED;
+ } else if (mId.equals(SecurityDetector.EXPORTED_SERVICE.getId())) {
+ return ATTR_PERMISSION;
+ } else if (mId.equals(TextFieldDetector.ISSUE.getId())) {
+ return ATTR_INPUT_TYPE;
+ } else if (mId.equals(TranslationDetector.MISSING.getId())) {
+ return ATTR_TRANSLATABLE;
+ } else if (mId.equals(ManifestDetector.ALLOW_BACKUP.getId())) {
+ return ATTR_ALLOW_BACKUP;
+ } else if (mId.equals(MissingIdDetector.ISSUE.getId())) {
+ return ATTR_ID;
+ } else {
+ assert false : mId;
+ return "";
+ }
+ }
+
+ @Override
+ protected boolean isAndroidAttribute() {
+ if (mId.equals(TranslationDetector.MISSING.getId())) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public String getDisplayString() {
+ if (mId.equals(AccessibilityDetector.ISSUE.getId())) {
+ return "Add content description attribute";
+ } else if (mId.equals(InefficientWeightDetector.BASELINE_WEIGHTS.getId())) {
+ return "Set baseline attribute";
+ } else if (mId.equals(TextFieldDetector.ISSUE.getId())) {
+ return "Set input type";
+ } else if (mId.equals(SecurityDetector.EXPORTED_SERVICE.getId())) {
+ return "Add permission attribute";
+ } else if (mId.equals(TranslationDetector.MISSING.getId())) {
+ return "Mark this as a non-translatable resource";
+ } else if (mId.equals(ManifestDetector.ALLOW_BACKUP.getId())) {
+ return "Set the allowBackup attribute to true or false";
+ } else if (mId.equals(MissingIdDetector.ISSUE.getId())) {
+ return "Set the ID attribute";
+ } else {
+ assert false : mId;
+ return "";
+ }
+ }
+
+ @Override
+ public String getAdditionalProposalInfo() {
+ String help = super.getAdditionalProposalInfo();
+
+ if (mId.equals(TranslationDetector.MISSING.getId())) {
+ help = "<b>Adds translatable=\"false\" to this &lt;string&gt;.</b><br><br>" + help;
+ }
+
+ return help;
+ }
+
+ @Override
+ protected boolean invokeCodeCompletion() {
+ return mId.equals(SecurityDetector.EXPORTED_SERVICE.getId())
+ || mId.equals(TextFieldDetector.ISSUE.getId())
+ || mId.equals(ManifestDetector.ALLOW_BACKUP.getId());
+ }
+
+ @Override
+ public boolean selectValue() {
+ if (mId.equals(TranslationDetector.MISSING.getId())) {
+ return false;
+ } else {
+ return super.selectValue();
+ }
+ }
+
+ @Override
+ protected String getProposal(Element element) {
+ if (mId.equals(InefficientWeightDetector.BASELINE_WEIGHTS.getId())) {
+ return VALUE_FALSE;
+ } else if (mId.equals(TranslationDetector.MISSING.getId())) {
+ return VALUE_FALSE;
+ } else if (mId.equals(TextFieldDetector.ISSUE.getId())) {
+ return element.getAttributeNS(ANDROID_URI, ATTR_INPUT_TYPE);
+ } else if (mId.equals(MissingIdDetector.ISSUE.getId())) {
+ IEditorPart editor = AdtUtils.getActiveEditor();
+ if (editor instanceof AndroidXmlEditor) {
+ AndroidXmlEditor xmlEditor = (AndroidXmlEditor) editor;
+ return DescriptorsUtils.getFreeWidgetId(xmlEditor.getUiRootNode(),
+ "fragment"); //$NON-NLS-1$
+ } else {
+ return NEW_ID_PREFIX;
+ }
+ }
+
+ return super.getProposal(element);
+ }
+}