Skip to content

Commit abcb6fe

Browse files
committed
Refactoring MergeModuleStatementsFix, MergePackageAccessibilityStatementsFix, MergeProvidesStatementsFix.
1 parent 9879326 commit abcb6fe

3 files changed

Lines changed: 54 additions & 70 deletions

File tree

java-analysis-impl/src/main/java/com/intellij/java/analysis/impl/codeInsight/daemon/impl/quickfix/MergeModuleStatementsFix.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import com.intellij.java.language.psi.*;
1919
import com.intellij.java.language.psi.util.PsiUtil;
2020
import com.siyeh.ig.psiutils.CommentTracker;
21+
import consulo.annotation.access.RequiredReadAction;
22+
import consulo.annotation.access.RequiredWriteAction;
2123
import consulo.codeEditor.Editor;
2224
import consulo.language.codeStyle.CodeStyleManager;
2325
import consulo.language.editor.inspection.LocalQuickFixAndIntentionActionOnPsiElement;
@@ -42,6 +44,7 @@ protected MergeModuleStatementsFix(@Nonnull PsiJavaModule javaModule) {
4244
}
4345

4446
@Override
47+
@RequiredReadAction
4548
public boolean isAvailable(
4649
@Nonnull Project project,
4750
@Nonnull PsiFile file,
@@ -52,30 +55,30 @@ public boolean isAvailable(
5255
}
5356

5457
@Override
58+
@RequiredWriteAction
5559
public void invoke(
5660
@Nonnull Project project,
5761
@Nonnull PsiFile file,
5862
@Nullable Editor editor,
5963
@Nonnull PsiElement startElement,
6064
@Nonnull PsiElement endElement
6165
) {
62-
if (startElement instanceof PsiJavaModule) {
63-
final PsiJavaModule javaModule = (PsiJavaModule) startElement;
64-
final List<T> statementsToMerge = getStatementsToMerge(javaModule);
66+
if (startElement instanceof PsiJavaModule javaModule) {
67+
List<T> statementsToMerge = getStatementsToMerge(javaModule);
6568
LOG.assertTrue(!statementsToMerge.isEmpty());
6669

67-
final String tempModuleText =
70+
String tempModuleText =
6871
PsiKeyword.MODULE + " " + javaModule.getName() + " {" + getReplacementText(statementsToMerge) + "}";
69-
final PsiJavaModule tempModule = JavaPsiFacade.getInstance(project).getElementFactory().createModuleFromText(tempModuleText);
72+
PsiJavaModule tempModule = JavaPsiFacade.getInstance(project).getElementFactory().createModuleFromText(tempModuleText);
7073

71-
final List<T> tempStatements = getStatementsToMerge(tempModule);
74+
List<T> tempStatements = getStatementsToMerge(tempModule);
7275
LOG.assertTrue(!tempStatements.isEmpty());
73-
final T replacement = tempStatements.get(0);
76+
T replacement = tempStatements.get(0);
7477

75-
final T firstStatement = statementsToMerge.get(0);
76-
final CommentTracker commentTracker = new CommentTracker();
77-
final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project);
78-
final PsiElement resultingStatement = codeStyleManager.reformat(commentTracker.replace(firstStatement, replacement));
78+
T firstStatement = statementsToMerge.get(0);
79+
CommentTracker commentTracker = new CommentTracker();
80+
CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project);
81+
PsiElement resultingStatement = codeStyleManager.reformat(commentTracker.replace(firstStatement, replacement));
7982

8083
for (int i = 1; i < statementsToMerge.size(); i++) {
8184
T statement = statementsToMerge.get(i);
@@ -84,7 +87,7 @@ public void invoke(
8487
commentTracker.insertCommentsBefore(resultingStatement);
8588

8689
if (editor != null) {
87-
final int offset = resultingStatement.getTextRange().getEndOffset();
90+
int offset = resultingStatement.getTextRange().getEndOffset();
8891
editor.getCaretModel().moveToOffset(offset);
8992
}
9093
}
@@ -98,17 +101,16 @@ public void invoke(
98101

99102
@Nonnull
100103
protected static String joinUniqueNames(@Nonnull List<String> names) {
101-
final Set<String> unique = new HashSet<>();
102-
return names.stream().filter(name -> unique.add(name)).collect(Collectors.joining(","));
104+
return names.stream().distinct().collect(Collectors.joining(","));
103105
}
104106

105107
@Nullable
106108
public static MergeModuleStatementsFix createFix(@Nullable PsiElement statement) {
107-
if (statement instanceof PsiPackageAccessibilityStatement) {
108-
return MergePackageAccessibilityStatementsFix.createFix((PsiPackageAccessibilityStatement) statement);
109+
if (statement instanceof PsiPackageAccessibilityStatement packageAccessibilityStmt) {
110+
return MergePackageAccessibilityStatementsFix.createFix(packageAccessibilityStmt);
109111
}
110-
else if (statement instanceof PsiProvidesStatement) {
111-
return MergeProvidesStatementsFix.createFix((PsiProvidesStatement) statement);
112+
else if (statement instanceof PsiProvidesStatement providesStmt) {
113+
return MergeProvidesStatementsFix.createFix(providesStmt);
112114
}
113115
return null;
114116
}

java-analysis-impl/src/main/java/com/intellij/java/analysis/impl/codeInsight/daemon/impl/quickfix/MergePackageAccessibilityStatementsFix.java

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,8 @@
1919
import com.intellij.java.language.psi.PsiKeyword;
2020
import com.intellij.java.language.psi.PsiPackageAccessibilityStatement;
2121
import com.intellij.java.language.psi.PsiPackageAccessibilityStatement.Role;
22-
import consulo.java.analysis.impl.JavaQuickFixBundle;
23-
import consulo.language.psi.PsiElement;
22+
import consulo.java.analysis.impl.localize.JavaQuickFixLocalize;
2423
import consulo.logging.Logger;
25-
import org.jetbrains.annotations.Nls;
26-
2724
import jakarta.annotation.Nonnull;
2825
import jakarta.annotation.Nullable;
2926

@@ -47,24 +44,22 @@ protected MergePackageAccessibilityStatementsFix(@Nonnull PsiJavaModule javaModu
4744
myRole = role;
4845
}
4946

50-
@Nls
5147
@Nonnull
5248
@Override
5349
public String getText() {
54-
return JavaQuickFixBundle.message("java.9.merge.module.statements.fix.name", getKeyword(), myPackageName);
50+
return JavaQuickFixLocalize.java9MergeModuleStatementsFixName(getKeyword(), myPackageName).get();
5551
}
5652

57-
@Nls
5853
@Nonnull
5954
@Override
6055
public String getFamilyName() {
61-
return JavaQuickFixBundle.message("java.9.merge.module.statements.fix.family.name", getKeyword());
56+
return JavaQuickFixLocalize.java9MergeModuleStatementsFixFamilyName(getKeyword()).get();
6257
}
6358

6459
@Nonnull
6560
@Override
6661
protected String getReplacementText(@Nonnull List<PsiPackageAccessibilityStatement> statementsToMerge) {
67-
final List<String> moduleNames = getModuleNames(statementsToMerge);
62+
List<String> moduleNames = getModuleNames(statementsToMerge);
6863
if (!moduleNames.isEmpty()) {
6964
return getKeyword() + " " + myPackageName + " " + PsiKeyword.TO + " " + joinUniqueNames(moduleNames) + ";";
7065
}
@@ -73,9 +68,9 @@ protected String getReplacementText(@Nonnull List<PsiPackageAccessibilityStateme
7368

7469
@Nonnull
7570
private static List<String> getModuleNames(@Nonnull List<PsiPackageAccessibilityStatement> statements) {
76-
final List<String> result = new ArrayList<>();
71+
List<String> result = new ArrayList<>();
7772
for (PsiPackageAccessibilityStatement statement : statements) {
78-
final List<String> moduleNames = statement.getModuleNames();
73+
List<String> moduleNames = statement.getModuleNames();
7974
if (moduleNames.isEmpty()) {
8075
return Collections.emptyList();
8176
}
@@ -94,39 +89,28 @@ protected List<PsiPackageAccessibilityStatement> getStatementsToMerge(@Nonnull P
9489

9590
@Nullable
9691
public static MergeModuleStatementsFix createFix(@Nullable PsiPackageAccessibilityStatement statement) {
97-
if (statement != null) {
98-
final PsiElement parent = statement.getParent();
99-
if (parent instanceof PsiJavaModule) {
100-
final String packageName = statement.getPackageName();
101-
if (packageName != null) {
102-
return new MergePackageAccessibilityStatementsFix((PsiJavaModule) parent, packageName, statement.getRole());
103-
}
92+
if (statement != null && statement.getParent() instanceof PsiJavaModule javaModule) {
93+
String packageName = statement.getPackageName();
94+
if (packageName != null) {
95+
return new MergePackageAccessibilityStatementsFix(javaModule, packageName, statement.getRole());
10496
}
10597
}
10698
return null;
10799
}
108100

109101
@Nonnull
110102
private static Iterable<PsiPackageAccessibilityStatement> getStatements(@Nonnull PsiJavaModule javaModule, @Nonnull Role role) {
111-
switch (role) {
112-
case OPENS:
113-
return javaModule.getOpens();
114-
case EXPORTS:
115-
return javaModule.getExports();
116-
}
117-
LOG.error("Unexpected role " + role);
118-
return Collections.emptyList();
103+
return switch (role) {
104+
case OPENS -> javaModule.getOpens();
105+
case EXPORTS -> javaModule.getExports();
106+
};
119107
}
120108

121109
@Nonnull
122110
private String getKeyword() {
123-
switch (myRole) {
124-
case OPENS:
125-
return PsiKeyword.OPENS;
126-
case EXPORTS:
127-
return PsiKeyword.EXPORTS;
128-
}
129-
LOG.error("Unexpected role " + myRole);
130-
return "";
111+
return switch (myRole) {
112+
case OPENS -> PsiKeyword.OPENS;
113+
case EXPORTS -> PsiKeyword.EXPORTS;
114+
};
131115
}
132116
}

java-analysis-impl/src/main/java/com/intellij/java/analysis/impl/codeInsight/daemon/impl/quickfix/MergeProvidesStatementsFix.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import com.intellij.java.language.psi.*;
1919
import consulo.java.analysis.impl.JavaQuickFixBundle;
20+
import consulo.java.analysis.impl.localize.JavaQuickFixLocalize;
2021
import consulo.language.psi.PsiElement;
2122
import consulo.util.collection.ContainerUtil;
2223
import jakarta.annotation.Nonnull;
@@ -43,20 +44,19 @@ public class MergeProvidesStatementsFix extends MergeModuleStatementsFix<PsiProv
4344
@Nonnull
4445
@Override
4546
public String getText() {
46-
return JavaQuickFixBundle.message("java.9.merge.module.statements.fix.name", PsiKeyword.PROVIDES, myInterfaceName);
47+
return JavaQuickFixLocalize.java9MergeModuleStatementsFixName(PsiKeyword.PROVIDES, myInterfaceName).get();
4748
}
4849

49-
@Nls
5050
@Nonnull
5151
@Override
5252
public String getFamilyName() {
53-
return JavaQuickFixBundle.message("java.9.merge.module.statements.fix.family.name", PsiKeyword.PROVIDES);
53+
return JavaQuickFixLocalize.java9MergeModuleStatementsFixFamilyName(PsiKeyword.PROVIDES).get();
5454
}
5555

5656
@Nonnull
5757
@Override
5858
protected String getReplacementText(@Nonnull List<PsiProvidesStatement> statementsToMerge) {
59-
final List<String> implementationNames = getImplementationNames(statementsToMerge);
59+
List<String> implementationNames = getImplementationNames(statementsToMerge);
6060
LOG.assertTrue(!implementationNames.isEmpty());
6161
return PsiKeyword.PROVIDES + " " + myInterfaceName + " " + PsiKeyword.WITH + " " + joinUniqueNames(implementationNames) + ";";
6262
}
@@ -79,24 +79,22 @@ private static List<String> getImplementationNames(@Nonnull List<PsiProvidesStat
7979
@Nonnull
8080
@Override
8181
protected List<PsiProvidesStatement> getStatementsToMerge(@Nonnull PsiJavaModule javaModule) {
82-
return StreamSupport.stream(javaModule.getProvides().spliterator(), false).filter(statement ->
83-
{
84-
final PsiJavaCodeReferenceElement reference = statement.getInterfaceReference();
85-
return reference != null && myInterfaceName.equals(reference.getQualifiedName());
86-
}).collect(Collectors.toList());
82+
return StreamSupport.stream(javaModule.getProvides().spliterator(), false)
83+
.filter(statement -> {
84+
PsiJavaCodeReferenceElement reference = statement.getInterfaceReference();
85+
return reference != null && myInterfaceName.equals(reference.getQualifiedName());
86+
})
87+
.collect(Collectors.toList());
8788
}
8889

8990
@Nullable
9091
public static MergeModuleStatementsFix createFix(@Nullable PsiProvidesStatement statement) {
91-
if (statement != null) {
92-
final PsiElement parent = statement.getParent();
93-
if (parent instanceof PsiJavaModule) {
94-
final PsiJavaCodeReferenceElement interfaceReference = statement.getInterfaceReference();
95-
if (interfaceReference != null) {
96-
final String interfaceName = interfaceReference.getQualifiedName();
97-
if (interfaceName != null) {
98-
return new MergeProvidesStatementsFix((PsiJavaModule) parent, interfaceName);
99-
}
92+
if (statement != null && statement.getParent() instanceof PsiJavaModule javaModule) {
93+
PsiJavaCodeReferenceElement interfaceReference = statement.getInterfaceReference();
94+
if (interfaceReference != null) {
95+
String interfaceName = interfaceReference.getQualifiedName();
96+
if (interfaceName != null) {
97+
return new MergeProvidesStatementsFix(javaModule, interfaceName);
10098
}
10199
}
102100
}

0 commit comments

Comments
 (0)