From ee91691ae582fc91559fc3a8a41030c1c0810954 Mon Sep 17 00:00:00 2001 From: Jonah Jeleniewski Date: Mon, 28 Oct 2024 11:13:50 +1100 Subject: [PATCH] Pull `getDirectives` out into a util to reduce duplication --- .../node/AnonymousMethodHeadingNodeImpl.java | 14 +----- .../ast/node/RoutineHeadingNodeImpl.java | 14 +----- .../ast/node/utils/RoutineDirectiveUtils.java | 43 +++++++++++++++++++ 3 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/utils/RoutineDirectiveUtils.java diff --git a/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/AnonymousMethodHeadingNodeImpl.java b/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/AnonymousMethodHeadingNodeImpl.java index 0967d92c5..d1f3d236a 100644 --- a/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/AnonymousMethodHeadingNodeImpl.java +++ b/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/AnonymousMethodHeadingNodeImpl.java @@ -18,17 +18,15 @@ */ package au.com.integradev.delphi.antlr.ast.node; +import au.com.integradev.delphi.antlr.ast.node.utils.RoutineDirectiveUtils; import au.com.integradev.delphi.antlr.ast.visitors.DelphiParserVisitor; -import com.google.common.collect.ImmutableSet; import java.util.Set; import org.antlr.runtime.Token; import org.sonar.plugins.communitydelphi.api.ast.AnonymousMethodHeadingNode; -import org.sonar.plugins.communitydelphi.api.ast.DelphiNode; import org.sonar.plugins.communitydelphi.api.ast.RoutineParametersNode; import org.sonar.plugins.communitydelphi.api.ast.RoutineReturnTypeNode; import org.sonar.plugins.communitydelphi.api.symbol.declaration.RoutineDirective; import org.sonar.plugins.communitydelphi.api.symbol.declaration.RoutineKind; -import org.sonar.plugins.communitydelphi.api.token.DelphiToken; public final class AnonymousMethodHeadingNodeImpl extends DelphiNodeImpl implements AnonymousMethodHeadingNode { @@ -69,15 +67,7 @@ public RoutineKind getRoutineKind() { @Override public Set getDirectives() { if (directives == null) { - var builder = new ImmutableSet.Builder(); - for (DelphiNode child : getChildren()) { - DelphiToken token = child.getToken(); - RoutineDirective directive = RoutineDirective.fromToken(token); - if (directive != null) { - builder.add(directive); - } - } - directives = builder.build(); + directives = RoutineDirectiveUtils.getDirectives(this); } return directives; } diff --git a/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/RoutineHeadingNodeImpl.java b/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/RoutineHeadingNodeImpl.java index fbbae4765..b75ff6db5 100644 --- a/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/RoutineHeadingNodeImpl.java +++ b/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/RoutineHeadingNodeImpl.java @@ -18,14 +18,13 @@ */ package au.com.integradev.delphi.antlr.ast.node; +import au.com.integradev.delphi.antlr.ast.node.utils.RoutineDirectiveUtils; import au.com.integradev.delphi.antlr.ast.visitors.DelphiParserVisitor; -import com.google.common.collect.ImmutableSet; import java.util.Collections; import java.util.List; import java.util.Set; import org.antlr.runtime.Token; import org.sonar.plugins.communitydelphi.api.ast.AttributeListNode; -import org.sonar.plugins.communitydelphi.api.ast.DelphiNode; import org.sonar.plugins.communitydelphi.api.ast.FormalParameterNode.FormalParameterData; import org.sonar.plugins.communitydelphi.api.ast.RoutineDeclarationNode; import org.sonar.plugins.communitydelphi.api.ast.RoutineHeadingNode; @@ -36,7 +35,6 @@ import org.sonar.plugins.communitydelphi.api.ast.TypeDeclarationNode; import org.sonar.plugins.communitydelphi.api.symbol.declaration.RoutineDirective; import org.sonar.plugins.communitydelphi.api.symbol.declaration.RoutineKind; -import org.sonar.plugins.communitydelphi.api.token.DelphiToken; import org.sonar.plugins.communitydelphi.api.token.DelphiTokenType; import org.sonar.plugins.communitydelphi.api.type.Type; @@ -194,15 +192,7 @@ public RoutineKind getRoutineKind() { @Override public Set getDirectives() { if (directives == null) { - var builder = new ImmutableSet.Builder(); - for (DelphiNode child : getChildren()) { - DelphiToken token = child.getToken(); - RoutineDirective directive = RoutineDirective.fromToken(token); - if (directive != null) { - builder.add(directive); - } - } - directives = builder.build(); + directives = RoutineDirectiveUtils.getDirectives(this); } return directives; } diff --git a/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/utils/RoutineDirectiveUtils.java b/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/utils/RoutineDirectiveUtils.java new file mode 100644 index 000000000..daa0b8978 --- /dev/null +++ b/delphi-frontend/src/main/java/au/com/integradev/delphi/antlr/ast/node/utils/RoutineDirectiveUtils.java @@ -0,0 +1,43 @@ +/* + * Sonar Delphi Plugin + * Copyright (C) 2024 Integrated Application Development + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ +package au.com.integradev.delphi.antlr.ast.node.utils; + +import com.google.common.collect.ImmutableSet; +import java.util.Set; +import org.sonar.plugins.communitydelphi.api.ast.DelphiNode; +import org.sonar.plugins.communitydelphi.api.symbol.declaration.RoutineDirective; +import org.sonar.plugins.communitydelphi.api.token.DelphiToken; + +public final class RoutineDirectiveUtils { + private RoutineDirectiveUtils() { + // Utility class + } + + public static Set getDirectives(DelphiNode node) { + var builder = new ImmutableSet.Builder(); + for (DelphiNode child : node.getChildren()) { + DelphiToken token = child.getToken(); + RoutineDirective directive = RoutineDirective.fromToken(token); + if (directive != null) { + builder.add(directive); + } + } + return builder.build(); + } +}