Affects PMD Version:
6.0.0
Rule:
AvoidFinalLocalVariable
Violation:
<file name="/Users/nik/tmp/lint-rules/lint-rules-android-lint/src/main/java/com/vanniktech/lintrules/android/SuperfluousDeclarationDetector.java">
<violation beginline="26" endline="26" begincolumn="5" endcolumn="117" rule="AvoidFinalLocalVariable" ruleset="Code Style" package="com.vanniktech.lintrules.android" class="SuperfluousDeclarationDetector" method="visitAttribute" variable="isToolsAttribute" externalInfoUrl="https://pmd.github.io/pmd-6.0.0/pmd_rules_java_codestyle.html#avoidfinallocalvariable" priority="3">
Avoid using final local variables, turn them into fields
</violation>
Description:
isToolsAttribute is getting flagged here but I see no reason why I should make this a field. What's the reasoning behind this here?
Code Sample demonstrating the issue:
package com.vanniktech.lintrules.android;
import com.android.annotations.NonNull;
import com.android.tools.lint.detector.api.Context;
import com.android.tools.lint.detector.api.Issue;
import com.android.tools.lint.detector.api.LayoutDetector;
import com.android.tools.lint.detector.api.XmlContext;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
public abstract class SuperfluousDeclarationDetector extends LayoutDetector {
private Map<Element, List<String>> values = new HashMap<>();
@Override public void beforeCheckFile(final Context context) {
values = new HashMap<>();
}
@Override public final void visitAttribute(@NonNull final XmlContext context, @NonNull final Attr attribute) {
final Element ownerElement = attribute.getOwnerElement();
final boolean isToolsAttribute = "http://schemas.android.com/tools".equalsIgnoreCase(attribute.getNamespaceURI());
if (!isToolsAttribute) {
final List<String> valuesForElement = values.get(ownerElement);
if (valuesForElement != null) {
valuesForElement.add(attribute.getValue());
} else {
final List<String> list = new ArrayList<>();
list.add(attribute.getValue());
values.put(ownerElement, list);
}
}
}
Running PMD through: [Gradle]
Affects PMD Version:
6.0.0
Rule:
AvoidFinalLocalVariableViolation:
Description:
isToolsAttributeis getting flagged here but I see no reason why I should make this a field. What's the reasoning behind this here?Code Sample demonstrating the issue:
Running PMD through: [Gradle]