This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch fix/qodana-warnings in repository https://gitbox.apache.org/repos/asf/struts-intellij-plugin.git
commit f5170ec770d6cf33d051b01f928faa343f7af7ce Author: Lukasz Lenart <[email protected]> AuthorDate: Tue Feb 24 17:37:25 2026 +0100 fix: resolve 22 Qodana warnings from CI analysis - Exclude src/main/gen from Qodana scanning (9 generated code warnings) - Replace redundant Collection.addAll() with constructor initialization - Fix 7 incorrect string capitalization warnings in bundle and source - Remove unnecessary null check before equals() in StrutsFileSet - Replace string concatenation in loop with StringBuilder - Suppress unstable API warnings with no public replacements - Migrate Struts2GraphComponent from DataProvider to UiDataProvider 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> --- qodana.yml | 1 + .../java/com/intellij/lang/ognl/OgnlFileType.java | 2 +- .../ExceptionMappingResultResolveConverter.java | 67 +++--- .../intellij/struts2/facet/ui/StrutsFileSet.java | 240 ++++++++++----------- .../graph/fileEditor/Struts2GraphComponent.java | 18 +- .../code/CreateValidationXmlIntention.java | 2 +- .../inspection/HardcodedActionUrlInspection.java | 9 +- .../resources/messages/Struts2Bundle.properties | 10 +- 8 files changed, 170 insertions(+), 179 deletions(-) diff --git a/qodana.yml b/qodana.yml index 9e39f71..91b1265 100644 --- a/qodana.yml +++ b/qodana.yml @@ -30,6 +30,7 @@ exclude: - gradle - gradlew - gradlew.bat + - src/main/gen - src/test/testData include: diff --git a/src/main/java/com/intellij/lang/ognl/OgnlFileType.java b/src/main/java/com/intellij/lang/ognl/OgnlFileType.java index 588cd00..f16ff2e 100644 --- a/src/main/java/com/intellij/lang/ognl/OgnlFileType.java +++ b/src/main/java/com/intellij/lang/ognl/OgnlFileType.java @@ -49,7 +49,7 @@ public final class OgnlFileType extends LanguageFileType { @NotNull @Override public String getDescription() { - return "Object Graph Navigation Language script"; + return "Object graph navigation language script"; } @NotNull diff --git a/src/main/java/com/intellij/struts2/dom/struts/action/ExceptionMappingResultResolveConverter.java b/src/main/java/com/intellij/struts2/dom/struts/action/ExceptionMappingResultResolveConverter.java index 1151f9b..6308ea3 100644 --- a/src/main/java/com/intellij/struts2/dom/struts/action/ExceptionMappingResultResolveConverter.java +++ b/src/main/java/com/intellij/struts2/dom/struts/action/ExceptionMappingResultResolveConverter.java @@ -23,11 +23,13 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xml.ConvertContext; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.ResolvingConverter; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; + import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,47 +39,46 @@ import org.jetbrains.annotations.Nullable; */ public class ExceptionMappingResultResolveConverter extends ResolvingConverter<HasResultType> { - @Override - @NotNull - public Collection<? extends HasResultType> getVariants(final ConvertContext context) { - final DomElement invocationElement = context.getInvocationElement(); - final Action action = invocationElement.getParentOfType(Action.class, true); - if (action == null) { - return Collections.emptySet(); - } - - final List<HasResultType> variants = new ArrayList<>(); - variants.addAll(action.getResults()); // Action-local first + @Override + @NotNull + public Collection<? extends HasResultType> getVariants(final ConvertContext context) { + final DomElement invocationElement = context.getInvocationElement(); + final Action action = invocationElement.getParentOfType(Action.class, true); + if (action == null) { + return Collections.emptySet(); + } - final StrutsPackage strutsPackage = action.getStrutsPackage(); - final GlobalResults globalResults = strutsPackage.getGlobalResults(); - variants.addAll(globalResults.getResults()); + final List<HasResultType> variants = new ArrayList<>(action.getResults()); // Action-local first - return variants; - } + final StrutsPackage strutsPackage = action.getStrutsPackage(); + final GlobalResults globalResults = strutsPackage.getGlobalResults(); + variants.addAll(globalResults.getResults()); - @Override - public HasResultType fromString(@Nullable @NonNls final String value, final ConvertContext context) { - if (value == null) { - return null; + return variants; } - return ContainerUtil.find(getVariants(context), - (Condition<HasResultType>)result -> Objects.equals(result.getName().getStringValue(), value)); - } + @Override + public HasResultType fromString(@Nullable @NonNls final String value, final ConvertContext context) { + if (value == null) { + return null; + } - @Override - public String toString(@Nullable final HasResultType result, final ConvertContext context) { - if (result == null) { - return null; + return ContainerUtil.find(getVariants(context), + (Condition<HasResultType>) result -> Objects.equals(result.getName().getStringValue(), value)); } - return result.getName().getStringValue(); - } + @Override + public String toString(@Nullable final HasResultType result, final ConvertContext context) { + if (result == null) { + return null; + } - @Override - public String getErrorMessage(@Nullable final String value, final ConvertContext context) { - return "Cannot resolve action-result '" + value + "'"; - } + return result.getName().getStringValue(); + } + + @Override + public String getErrorMessage(@Nullable final String value, final ConvertContext context) { + return "Cannot resolve action-result '" + value + "'"; + } } \ No newline at end of file diff --git a/src/main/java/com/intellij/struts2/facet/ui/StrutsFileSet.java b/src/main/java/com/intellij/struts2/facet/ui/StrutsFileSet.java index 918d0bc..45789c2 100644 --- a/src/main/java/com/intellij/struts2/facet/ui/StrutsFileSet.java +++ b/src/main/java/com/intellij/struts2/facet/ui/StrutsFileSet.java @@ -41,136 +41,136 @@ import java.util.Set; */ public class StrutsFileSet implements Disposable { - private final String id; - private String name; - - private boolean autodetected; - private boolean removed; - - private final List<VirtualFilePointer> files = new SmartList<>(); - - @NonNls - private static final String ID_PREFIX = "s2fileset"; - - private static final Function<StrutsFileSet, String> FILESET_NAME_FUNCTION = strutsFileSet -> strutsFileSet.getName(); - - private static final Function<StrutsFileSet, String> FILESET_ID_FUNCTION = strutsFileSet -> strutsFileSet.getId(); - - public StrutsFileSet(@NotNull @NonNls final String id, - @NotNull @NonNls final String name, - @NotNull final StrutsFacetConfiguration parent) { - this.id = id; - this.name = name; - - Disposer.register(parent, this); - } - - public StrutsFileSet(@NotNull final StrutsFileSet original) { - id = original.id; - name = original.name; - files.addAll(original.files); - autodetected = original.autodetected; - removed = original.removed; - } - - public static String getUniqueId(final Set<? extends StrutsFileSet> list) { - return UniqueNameGenerator.generateUniqueName(ID_PREFIX, ContainerUtil.map(list, FILESET_ID_FUNCTION)); - } - - public static String getUniqueName(final String prefix, final Set<? extends StrutsFileSet> list) { - return UniqueNameGenerator.generateUniqueName(prefix + " ", ContainerUtil.map(list, FILESET_NAME_FUNCTION)); - } - - public boolean isNew() { - return false; - } - - @NotNull - public String getId() { - return id; - } - - public String getName() { - return name; - } - - public void setName(@NotNull final String name) { - this.name = name; - } - - public boolean isAutodetected() { - return autodetected; - } - - public void setAutodetected(final boolean autodetected) { - this.autodetected = autodetected; - } - - public boolean isRemoved() { - return removed; - } - - public void setRemoved(final boolean removed) { - this.removed = removed; - } - - @NotNull - public List<VirtualFilePointer> getFiles() { - return files; - } - - public void addFile(final VirtualFile file) { - addFile(file.getUrl()); - } - - public void addFile(@NonNls final String url) { - if (!StringUtil.isEmptyOrSpaces(url)) { - // Check if this URL is already in the file set to prevent duplicates - for (final VirtualFilePointer existing : files) { - if (url.equals(existing.getUrl())) { - return; // File already exists, don't add duplicate - } - } - final VirtualFilePointer filePointer = VirtualFilePointerManager.getInstance().create(url, this, null); - files.add(filePointer); + private final String id; + private String name; + + private boolean autodetected; + private boolean removed; + + private final List<VirtualFilePointer> files = new SmartList<>(); + + @NonNls + private static final String ID_PREFIX = "s2fileset"; + + private static final Function<StrutsFileSet, String> FILESET_NAME_FUNCTION = StrutsFileSet::getName; + + private static final Function<StrutsFileSet, String> FILESET_ID_FUNCTION = StrutsFileSet::getId; + + public StrutsFileSet(@NotNull @NonNls final String id, + @NotNull @NonNls final String name, + @NotNull final StrutsFacetConfiguration parent) { + this.id = id; + this.name = name; + + Disposer.register(parent, this); + } + + public StrutsFileSet(@NotNull final StrutsFileSet original) { + id = original.id; + name = original.name; + files.addAll(original.files); + autodetected = original.autodetected; + removed = original.removed; + } + + public static String getUniqueId(final Set<? extends StrutsFileSet> list) { + return UniqueNameGenerator.generateUniqueName(ID_PREFIX, ContainerUtil.map(list, FILESET_ID_FUNCTION)); } - } - public void removeFile(final VirtualFilePointer file) { - files.remove(file); - } + public static String getUniqueName(final String prefix, final Set<? extends StrutsFileSet> list) { + return UniqueNameGenerator.generateUniqueName(prefix + " ", ContainerUtil.map(list, FILESET_NAME_FUNCTION)); + } - public boolean hasFile(@Nullable final VirtualFile file) { - if (file == null) { - return false; + public boolean isNew() { + return false; } - for (final VirtualFilePointer pointer : files) { - final VirtualFile virtualFile = pointer.getFile(); - if (virtualFile != null && file.equals(virtualFile)) { - return true; - } + + @NotNull + public String getId() { + return id; } - return false; - } - public boolean equals(final Object another) { - if (another instanceof StrutsFileSet obj) { - return Objects.equals(obj.getId(), id); + public String getName() { + return name; } - return false; - } + public void setName(@NotNull final String name) { + this.name = name; + } - public int hashCode() { - return id.hashCode(); - } + public boolean isAutodetected() { + return autodetected; + } - public String toString() { - return name; - } + public void setAutodetected(final boolean autodetected) { + this.autodetected = autodetected; + } - @Override - public void dispose() { - } + public boolean isRemoved() { + return removed; + } + + public void setRemoved(final boolean removed) { + this.removed = removed; + } + + @NotNull + public List<VirtualFilePointer> getFiles() { + return files; + } + + public void addFile(final VirtualFile file) { + addFile(file.getUrl()); + } + + public void addFile(@NonNls final String url) { + if (!StringUtil.isEmptyOrSpaces(url)) { + // Check if this URL is already in the file set to prevent duplicates + for (final VirtualFilePointer existing : files) { + if (url.equals(existing.getUrl())) { + return; // File already exists, don't add duplicate + } + } + final VirtualFilePointer filePointer = VirtualFilePointerManager.getInstance().create(url, this, null); + files.add(filePointer); + } + } + + public void removeFile(final VirtualFilePointer file) { + files.remove(file); + } + + public boolean hasFile(@Nullable final VirtualFile file) { + if (file == null) { + return false; + } + for (final VirtualFilePointer pointer : files) { + final VirtualFile virtualFile = pointer.getFile(); + if (file.equals(virtualFile)) { + return true; + } + } + return false; + } + + public boolean equals(final Object another) { + if (another instanceof StrutsFileSet obj) { + return Objects.equals(obj.getId(), id); + } + + return false; + } + + public int hashCode() { + return id.hashCode(); + } + + public String toString() { + return name; + } + + @Override + public void dispose() { + } } diff --git a/src/main/java/com/intellij/struts2/graph/fileEditor/Struts2GraphComponent.java b/src/main/java/com/intellij/struts2/graph/fileEditor/Struts2GraphComponent.java index 85a666d..137e9c1 100644 --- a/src/main/java/com/intellij/struts2/graph/fileEditor/Struts2GraphComponent.java +++ b/src/main/java/com/intellij/struts2/graph/fileEditor/Struts2GraphComponent.java @@ -38,25 +38,22 @@ import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomEventListener; import com.intellij.util.xml.DomManager; import com.intellij.util.xml.events.DomEvent; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.List; -import java.util.Objects; /** * @author Yann Cébron */ -public class Struts2GraphComponent extends JPanel implements DataProvider, Disposable { - @NonNls - private static final String STRUTS2_DESIGNER_COMPONENT = "STRUTS2_DESIGNER_COMPONENT"; +public class Struts2GraphComponent extends JPanel implements UiDataProvider, Disposable { + static final DataKey<Struts2GraphComponent> DATA_KEY = DataKey.create("STRUTS2_DESIGNER_COMPONENT"); private final GraphBuilder<BasicStrutsNode, BasicStrutsEdge> myBuilder; + @SuppressWarnings("UnstableApiUsage") public Struts2GraphComponent(final XmlFile xmlFile) { final ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator(); @@ -152,13 +149,8 @@ public class Struts2GraphComponent extends JPanel implements DataProvider, Dispo } @Override - @Nullable - public Object getData(@NotNull @NonNls final String dataId) { - if (Objects.equals(dataId, STRUTS2_DESIGNER_COMPONENT)) { - return this; - } - - return null; + public void uiDataSnapshot(@NotNull DataSink sink) { + sink.set(DATA_KEY, this); } } \ No newline at end of file diff --git a/src/main/java/com/intellij/struts2/intentions/code/CreateValidationXmlIntention.java b/src/main/java/com/intellij/struts2/intentions/code/CreateValidationXmlIntention.java index fe9b023..c7f74aa 100644 --- a/src/main/java/com/intellij/struts2/intentions/code/CreateValidationXmlIntention.java +++ b/src/main/java/com/intellij/struts2/intentions/code/CreateValidationXmlIntention.java @@ -124,7 +124,7 @@ public class CreateValidationXmlIntention extends PsiElementBaseIntentionAction final List<Action> filteredActions = getActionsWithoutValidation(actionClass); if (filteredActions.size() > 1) { final ListPopupStep<Action> step = - new BaseListPopupStep<>("Choose action mapping", filteredActions) { + new BaseListPopupStep<>("Choose Action Mapping", filteredActions) { @Override public Icon getIconFor(final Action value) { diff --git a/src/main/java/com/intellij/struts2/jsp/inspection/HardcodedActionUrlInspection.java b/src/main/java/com/intellij/struts2/jsp/inspection/HardcodedActionUrlInspection.java index 9ffed32..a2f745f 100644 --- a/src/main/java/com/intellij/struts2/jsp/inspection/HardcodedActionUrlInspection.java +++ b/src/main/java/com/intellij/struts2/jsp/inspection/HardcodedActionUrlInspection.java @@ -14,7 +14,6 @@ */ package com.intellij.struts2.jsp.inspection; -import com.intellij.codeInsight.completion.ExtendedTagInsertHandler; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemsHolder; @@ -35,15 +34,12 @@ import com.intellij.struts2.StrutsBundle; import com.intellij.struts2.StrutsConstants; import com.intellij.struts2.facet.StrutsFacet; import com.intellij.struts2.model.constant.StrutsConstantHelper; -import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; -import com.intellij.xml.XmlNamespaceHelper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.net.URI; import java.net.URL; -import java.util.Collections; /* * @author max @@ -199,8 +195,9 @@ public class HardcodedActionUrlInspection extends XmlSuppressableInspectionTool String linePrefix = document.getCharsSequence().subSequence(lineStart, start).toString(); linePrefix = linePrefix.substring(0, linePrefix.length() - linePrefix.trim().length()); - String indent = linePrefix; - while (indent.length() < start - lineStart) indent += " "; + StringBuilder indentBuilder = new StringBuilder(linePrefix); + while (indentBuilder.length() < start - lineStart) indentBuilder.append(' '); + String indent = indentBuilder.toString(); Pair<String, String> tag_var = buildTag(prefix, url, indent, inline, myActionExtension); assert tag_var != null; diff --git a/src/main/resources/messages/Struts2Bundle.properties b/src/main/resources/messages/Struts2Bundle.properties index 74dd9e3..075b419 100644 --- a/src/main/resources/messages/Struts2Bundle.properties +++ b/src/main/resources/messages/Struts2Bundle.properties @@ -17,8 +17,8 @@ struts2=Struts 2 annotators.action.no.name=No name annotators.action.goto.declaration=Go To Action Declaration -annotators.action.goto.tooltip.single=<b>Action path:</b> -annotators.action.goto.tooltip=<b>Action paths:</b> +annotators.action.goto.tooltip.single=<b>Action Path:</b> +annotators.action.goto.tooltip=<b>Action Paths:</b> annotators.action.goto.result=Go To Result annotators.action.goto.result.tooltip=Go To Result @@ -26,14 +26,14 @@ annotators.action.goto.result.tooltip=Go To Result annotators.action.goto.validation=Go To Validation annotators.action.goto.validation.tooltip=Go To Validation -annotators.jsp.goto.action.method=Go To Action method +annotators.jsp.goto.action.method=Go to action method annotators.jsp.goto.action.method.not.found=No Action method found annotators.fileset.file.not.registered=File not registered in file set annotators.fileset.no.file.sets=No file sets configured for Struts 2 facet annotators.fileset.edit.facet.settings=Edit Struts 2 facet settings annotators.fileset.fix.add.to.fileset=Add {0} to file set -annotators.fileset.fix.choose.fileset=Choose file set +annotators.fileset.fix.choose.fileset=Choose File Set dom.extendable.class.converter.type.class=class dom.extendable.class.converter.type.spring=Spring bean @@ -59,7 +59,7 @@ inspections.hardcoded.action.url.display.name=Hardcoded action URL intentions.family.name=Struts 2 -structure.view.filter.params=Hide params +structure.view.filter.params=Hide Params facet.features.title=Features
