Skip to content

[java] AvoidFinalLocalVariable reasonings #811

@vanniktech

Description

@vanniktech

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]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions