Skip to content

Commit e275a81

Browse files
committed
move ruleconfig loading to startup activity + testing changes
1 parent c5e1757 commit e275a81

31 files changed

+1046
-536
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-java-sdk/src/main/java/com/microsoft/azure/toolkit/intellij/java/sdk/analyzer/ConnectionStringCheck.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,25 @@ public class ConnectionStringCheck extends LocalInspectionTool {
2222

2323
@Override
2424
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
25-
return new ConnectionStringCheckVisitor(holder);
25+
return new ConnectionStringCheckVisitor(holder, RuleConfigLoader.getInstance());
2626
}
2727

2828
static class ConnectionStringCheckVisitor extends JavaElementVisitor {
2929
private final ProblemsHolder holder;
30-
private static final RuleConfig RULE_CONFIG;
31-
private static final boolean SKIP_WHOLE_RULE;
30+
private static RuleConfig RULE_CONFIG;
31+
private static boolean SKIP_WHOLE_RULE;
3232

33-
ConnectionStringCheckVisitor(ProblemsHolder holder) {
33+
ConnectionStringCheckVisitor(ProblemsHolder holder, RuleConfigLoader ruleConfigLoader) {
3434
this.holder = holder;
35+
initializeRuleConfig(ruleConfigLoader);
3536
}
3637

37-
static {
38-
RuleConfigLoader ruleConfigLoader = RuleConfigLoader.getInstance();
39-
RULE_CONFIG = ruleConfigLoader.getRuleConfig("ConnectionStringCheck");
40-
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
38+
private void initializeRuleConfig(RuleConfigLoader ruleConfigLoader) {
39+
if (RULE_CONFIG == null) {
40+
final String ruleName = "ConnectionStringCheck";
41+
RULE_CONFIG = ruleConfigLoader.getRuleConfig(ruleName);
42+
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
43+
}
4144
}
4245

4346
@Override

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-java-sdk/src/main/java/com/microsoft/azure/toolkit/intellij/java/sdk/analyzer/DisableAutoCompleteCheck.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class DisableAutoCompleteCheck extends LocalInspectionTool {
3636
@NotNull
3737
@Override
3838
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
39-
return new DisableAutoCompleteVisitor(holder);
39+
return new DisableAutoCompleteVisitor(holder, RuleConfigLoader.getInstance());
4040
}
4141

4242
/**
@@ -51,19 +51,18 @@ static class DisableAutoCompleteVisitor extends JavaElementVisitor {
5151
private final ProblemsHolder holder;
5252

5353

54-
DisableAutoCompleteVisitor(ProblemsHolder holder) {
55-
this.holder = holder;
56-
initializeRuleConfig();
57-
}
54+
DisableAutoCompleteVisitor(ProblemsHolder holder, RuleConfigLoader ruleConfigLoader) {
55+
this.holder = holder;
56+
initializeRuleConfig(ruleConfigLoader);
57+
}
5858

59-
private void initializeRuleConfig() {
60-
if (RULE_CONFIG == null) {
61-
final String ruleName = "DisableAutoCompleteCheck";
62-
RuleConfigLoader centralRuleConfigLoader = RuleConfigLoader.getInstance();
63-
RULE_CONFIG = centralRuleConfigLoader.getRuleConfig(ruleName);
64-
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
65-
}
59+
private void initializeRuleConfig(RuleConfigLoader ruleConfigLoader) {
60+
if (RULE_CONFIG == null) {
61+
final String ruleName = "DisableAutoCompleteCheck";
62+
RULE_CONFIG = ruleConfigLoader.getRuleConfig(ruleName);
63+
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
6664
}
65+
}
6766
/**
6867
* This method is used to visit the declaration statements in the code. It checks for the declaration of Azure
6968
* SDK ServiceBusReceiver & ServiceBusProcessor clients and whether the auto-complete feature is disabled. If

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-java-sdk/src/main/java/com/microsoft/azure/toolkit/intellij/java/sdk/analyzer/DynamicClientCreationCheck.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,19 @@
55

66
import com.intellij.codeInspection.LocalInspectionTool;
77
import com.intellij.codeInspection.ProblemsHolder;
8-
import com.intellij.psi.*;
8+
import com.intellij.psi.JavaElementVisitor;
9+
import com.intellij.psi.PsiAssignmentExpression;
10+
import com.intellij.psi.PsiBlockStatement;
11+
import com.intellij.psi.PsiCodeBlock;
12+
import com.intellij.psi.PsiDeclarationStatement;
13+
import com.intellij.psi.PsiElement;
14+
import com.intellij.psi.PsiExpression;
15+
import com.intellij.psi.PsiExpressionStatement;
16+
import com.intellij.psi.PsiForStatement;
17+
import com.intellij.psi.PsiLocalVariable;
18+
import com.intellij.psi.PsiMethodCallExpression;
19+
import com.intellij.psi.PsiReferenceExpression;
20+
import com.intellij.psi.PsiStatement;
921
import com.microsoft.azure.toolkit.intellij.java.sdk.models.RuleConfig;
1022
import com.microsoft.azure.toolkit.intellij.java.sdk.utils.HelperUtils;
1123
import com.microsoft.azure.toolkit.intellij.java.sdk.utils.RuleConfigLoader;
@@ -19,18 +31,26 @@ public class DynamicClientCreationCheck extends LocalInspectionTool {
1931
@NotNull
2032
@Override
2133
public JavaElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
22-
return new DynamicClientCreationVisitor(holder);
34+
return new DynamicClientCreationVisitor(holder, RuleConfigLoader.getInstance());
2335
}
2436

2537
static class DynamicClientCreationVisitor extends JavaElementVisitor {
2638

2739
private final ProblemsHolder holder;
28-
private static final RuleConfig RULE_CONFIG = RuleConfigLoader.getInstance()
29-
.getRuleConfig("DynamicClientCreationCheck");
30-
private static final boolean SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
40+
private static RuleConfig RULE_CONFIG;
41+
private static boolean SKIP_WHOLE_RULE;
3142

32-
public DynamicClientCreationVisitor(ProblemsHolder holder) {
43+
public DynamicClientCreationVisitor(ProblemsHolder holder, RuleConfigLoader ruleConfigLoader) {
3344
this.holder = holder;
45+
initializeRuleConfig(ruleConfigLoader);
46+
}
47+
48+
private void initializeRuleConfig(RuleConfigLoader ruleConfigLoader) {
49+
if (RULE_CONFIG == null) {
50+
final String ruleName = "DynamicClientCreationCheck";
51+
RULE_CONFIG = ruleConfigLoader.getRuleConfig(ruleName);
52+
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
53+
}
3454
}
3555

3656
@Override

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-java-sdk/src/main/java/com/microsoft/azure/toolkit/intellij/java/sdk/analyzer/EventHubConsumerAsyncClientCheck.java

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,59 @@
1313
* This class is used to check if the EventHubConsumerAsyncClient is being used in the code.
1414
*/
1515
public class EventHubConsumerAsyncClientCheck extends LocalInspectionTool {
16-
17-
private final RuleConfig ruleConfig;
18-
private final boolean skipRuleCheck;
19-
20-
public EventHubConsumerAsyncClientCheck() {
21-
super();
22-
RuleConfigLoader ruleConfigLoader = RuleConfigLoader.getInstance();
23-
this.ruleConfig = ruleConfigLoader.getRuleConfig("EventHubConsumerAsyncClientCheck");
24-
this.skipRuleCheck = ruleConfig.skipRuleCheck();
25-
}
26-
16+
/**
17+
* Method to build the visitor for the inspection tool.
18+
*
19+
* @param holder Holder for the problems found by the inspection
20+
*
21+
* @return JavaElementVisitor a visitor to visit the method call expressions
22+
*/
2723
@NotNull
2824
@Override
2925
public JavaElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
30-
if (skipRuleCheck) {
31-
return new JavaElementVisitor() {};
26+
return new EventHubConsumerAsyncClientCheck.EventHubConsumerAsyncClientVisitor(holder,
27+
RuleConfigLoader.getInstance());
28+
}
29+
30+
/**
31+
* Visitor class to visit the method call expressions and check for the use of getSyncPoller() on a PollerFlux. The
32+
* visitor will check if the method call is on a PollerFlux and if the method call is on an Azure SDK client.
33+
*/
34+
static class EventHubConsumerAsyncClientVisitor extends JavaElementVisitor {
35+
36+
private final ProblemsHolder holder;
37+
private static RuleConfig RULE_CONFIG;
38+
private static boolean SKIP_WHOLE_RULE;
39+
40+
/**
41+
* Constructor to initialize the visitor with the holder and isOnTheFly flag.
42+
*
43+
* @param holder Holder for the problems found by the inspection
44+
* @param ruleConfigLoader RuleConfigLoader object to load the rule configuration
45+
*/
46+
public EventHubConsumerAsyncClientVisitor(ProblemsHolder holder, RuleConfigLoader ruleConfigLoader) {
47+
this.holder = holder;
48+
initializeRuleConfig(ruleConfigLoader);
3249
}
33-
return new JavaElementVisitor() {
34-
@Override
35-
public void visitTypeElement(PsiTypeElement element) {
36-
super.visitTypeElement(element);
37-
if (HelperUtils.isItDiscouragedClient(element, ruleConfig.getUsagesToCheck())) {
38-
holder.registerProblem(element, ruleConfig.getAntiPatternMessage());
39-
}
50+
51+
private void initializeRuleConfig(RuleConfigLoader ruleConfigLoader) {
52+
if (RULE_CONFIG == null) {
53+
final String ruleName = "EventHubConsumerAsyncClientCheck";
54+
RULE_CONFIG = ruleConfigLoader.getRuleConfig(ruleName);
55+
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
56+
}
57+
}
58+
59+
@Override
60+
public void visitTypeElement(PsiTypeElement element) {
61+
super.visitTypeElement(element);
62+
if (SKIP_WHOLE_RULE) {
63+
return;
4064
}
41-
};
65+
if (HelperUtils.isItDiscouragedClient(element, RULE_CONFIG.getUsagesToCheck())) {
66+
holder.registerProblem(element, RULE_CONFIG.getAntiPatternMessage());
67+
}
68+
}
69+
4270
}
4371
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-java-sdk/src/main/java/com/microsoft/azure/toolkit/intellij/java/sdk/analyzer/GetCompletionsCheck.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,34 @@
1313
import com.microsoft.azure.toolkit.intellij.java.sdk.models.RuleConfig;
1414
import com.microsoft.azure.toolkit.intellij.java.sdk.utils.HelperUtils;
1515
import com.microsoft.azure.toolkit.intellij.java.sdk.utils.RuleConfigLoader;
16-
import java.util.HashSet;
17-
import java.util.Set;
1816
import org.jetbrains.annotations.NotNull;
1917

20-
import static com.microsoft.azure.toolkit.intellij.java.sdk.utils.HelperUtils.checkIfInUsages;
21-
2218
/**
2319
* Inspection tool to check discouraged GetCompletions API usage in openai package context.
2420
*/
2521
public class GetCompletionsCheck extends LocalInspectionTool {
2622

2723
@Override
2824
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
29-
return new GetCompletionsVisitor(holder);
25+
return new GetCompletionsCheck.GetCompletionsVisitor(holder, RuleConfigLoader.getInstance());
3026
}
3127

3228
static class GetCompletionsVisitor extends JavaElementVisitor {
3329
private final ProblemsHolder holder;
34-
private static final RuleConfig RULE_CONFIG;
35-
private static final boolean SKIP_WHOLE_RULE;
30+
private static RuleConfig RULE_CONFIG;
31+
private static boolean SKIP_WHOLE_RULE;
3632

37-
GetCompletionsVisitor(ProblemsHolder holder) {
33+
GetCompletionsVisitor(ProblemsHolder holder, RuleConfigLoader ruleConfigLoader) {
3834
this.holder = holder;
35+
initializeRuleConfig(ruleConfigLoader);
3936
}
4037

41-
static {
42-
RuleConfigLoader ruleConfigLoader = RuleConfigLoader.getInstance();
43-
RULE_CONFIG = ruleConfigLoader.getRuleConfig("GetCompletionsCheck");
44-
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
38+
private void initializeRuleConfig(RuleConfigLoader ruleConfigLoader) {
39+
if (RULE_CONFIG == null) {
40+
final String ruleName = "GetCompletionsCheck";
41+
RULE_CONFIG = ruleConfigLoader.getRuleConfig(ruleName);
42+
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
43+
}
4544
}
4645

4746
// visit all methodcalls

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-java-sdk/src/main/java/com/microsoft/azure/toolkit/intellij/java/sdk/analyzer/GetSyncPollerOnPollerFluxCheck.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class GetSyncPollerOnPollerFluxCheck extends LocalInspectionTool {
3939
@NotNull
4040
@Override
4141
public JavaElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
42-
return new GetSyncPollerOnPollerFluxVisitor(holder);
42+
return new GetSyncPollerOnPollerFluxVisitor(holder, RuleConfigLoader.getInstance());
4343
}
4444

4545
/**
@@ -49,26 +49,26 @@ public JavaElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean i
4949
class GetSyncPollerOnPollerFluxVisitor extends JavaElementVisitor {
5050

5151
private final ProblemsHolder holder;
52-
53-
private static final RuleConfig RULE_CONFIG;
54-
private static final boolean SKIP_WHOLE_RULE;
55-
56-
static {
57-
final String ruleName = "GetSyncPollerOnPollerFluxCheck";
58-
RuleConfigLoader centralRuleConfigLoader = RuleConfigLoader.getInstance();
59-
60-
// Get the RuleConfig object for the rule
61-
RULE_CONFIG = centralRuleConfigLoader.getRuleConfig(ruleName);
62-
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
63-
}
52+
private static RuleConfig RULE_CONFIG;
53+
private static boolean SKIP_WHOLE_RULE;
6454

6555
/**
6656
* Constructor to initialize the visitor with the holder and isOnTheFly flag.
6757
*
6858
* @param holder Holder for the problems found by the inspection
59+
* @param ruleConfigLoader RuleConfigLoader object to load the rule configuration
6960
*/
70-
public GetSyncPollerOnPollerFluxVisitor(ProblemsHolder holder) {
61+
public GetSyncPollerOnPollerFluxVisitor(ProblemsHolder holder, RuleConfigLoader ruleConfigLoader) {
7162
this.holder = holder;
63+
initializeRuleConfig(ruleConfigLoader);
64+
}
65+
66+
private void initializeRuleConfig(RuleConfigLoader ruleConfigLoader) {
67+
if (RULE_CONFIG == null) {
68+
final String ruleName = "GetSyncPollerOnPollerFluxCheck";
69+
RULE_CONFIG = ruleConfigLoader.getRuleConfig(ruleName);
70+
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
71+
}
7272
}
7373

7474
/**

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-java-sdk/src/main/java/com/microsoft/azure/toolkit/intellij/java/sdk/analyzer/HardcodedAPIKeysAndTokensCheck.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class HardcodedAPIKeysAndTokensCheck extends LocalInspectionTool {
3737
@NotNull
3838
@Override
3939
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
40-
return new APIKeysAndTokensVisitor(holder);
40+
return new APIKeysAndTokensVisitor(holder, RuleConfigLoader.getInstance());
4141
}
4242

4343
/**
@@ -46,19 +46,21 @@ public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean is
4646
static class APIKeysAndTokensVisitor extends JavaElementVisitor {
4747

4848
private final ProblemsHolder holder;
49-
private static final RuleConfig RULE_CONFIG;
50-
private static final boolean SKIP_WHOLE_RULE;
49+
private static RuleConfig RULE_CONFIG;
50+
private static boolean SKIP_WHOLE_RULE;
5151

52-
static {
53-
RuleConfigLoader ruleConfigLoader = RuleConfigLoader.getInstance();
54-
RULE_CONFIG = ruleConfigLoader.getRuleConfig("HardcodedAPIKeysAndTokensCheck");
55-
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
56-
}
57-
58-
APIKeysAndTokensVisitor(ProblemsHolder holder) {
52+
APIKeysAndTokensVisitor(ProblemsHolder holder, RuleConfigLoader ruleConfigLoader) {
5953
this.holder = holder;
54+
initializeRuleConfig(ruleConfigLoader);
6055
}
6156

57+
private void initializeRuleConfig(RuleConfigLoader ruleConfigLoader) {
58+
if (RULE_CONFIG == null) {
59+
final String ruleName = "HardcodedAPIKeysAndTokensCheck";
60+
RULE_CONFIG = ruleConfigLoader.getRuleConfig(ruleName);
61+
SKIP_WHOLE_RULE = RULE_CONFIG.skipRuleCheck();
62+
}
63+
}
6264
@Override
6365
public void visitNewExpression(@NotNull PsiNewExpression newExpression) {
6466
PsiJavaCodeReferenceElement classReference = newExpression.getClassReference();

0 commit comments

Comments
 (0)