mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] highlights duplicate 'opens' statements (IDEA-169015)
In addition, provides a quickfix for duplicate exports/opens targets.
This commit is contained in:
+12
-3
@@ -149,7 +149,13 @@ public class ModuleHighlightUtil {
|
||||
checkDuplicateRefs(
|
||||
module.getExports(),
|
||||
st -> Optional.ofNullable(st.getPackageReference()).map(ModuleHighlightUtil::refText),
|
||||
"module.duplicate.export",
|
||||
"module.duplicate.exports",
|
||||
results);
|
||||
|
||||
checkDuplicateRefs(
|
||||
module.getOpens(),
|
||||
st -> Optional.ofNullable(st.getPackageReference()).map(ModuleHighlightUtil::refText),
|
||||
"module.duplicate.opens",
|
||||
results);
|
||||
|
||||
checkDuplicateRefs(
|
||||
@@ -303,8 +309,11 @@ public class ModuleHighlightUtil {
|
||||
PsiPolyVariantReference ref = refElement.getReference();
|
||||
assert ref != null : statement;
|
||||
if (!targets.add(refText)) {
|
||||
String message = JavaErrorMessages.message("module.duplicate.export", refText);
|
||||
results.add(HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(refElement).descriptionAndTooltip(message).create());
|
||||
boolean exports = statement.getRole() == Role.EXPORTS;
|
||||
String message = JavaErrorMessages.message(exports ? "module.duplicate.exports.target" : "module.duplicate.opens.target", refText);
|
||||
HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(refElement).descriptionAndTooltip(message).create();
|
||||
QuickFixAction.registerQuickFixAction(info, factory().createDeleteFix(refElement, QuickFixBundle.message("delete.reference.fix.text")));
|
||||
results.add(info);
|
||||
}
|
||||
else if (ref.multiResolve(true).length == 0) {
|
||||
String message = JavaErrorMessages.message("module.not.found", refElement.getReferenceText());
|
||||
|
||||
@@ -395,10 +395,13 @@ underscore.lambda.identifier=Use of '_' as a lambda parameter name is not allowe
|
||||
module.no.package=A module file should not have 'package' statement
|
||||
module.file.wrong.name=Module declaration should be in a file named 'module-info.java'
|
||||
module.file.duplicate='module-info.java' already exists in the module
|
||||
module.duplicate.requires=Duplicate requires: {0}
|
||||
module.duplicate.export=Duplicate export: {0}
|
||||
module.duplicate.uses=Duplicate uses: {0}
|
||||
module.duplicate.provides=Duplicate provides: {0}
|
||||
module.duplicate.requires=Duplicate ''requires'': {0}
|
||||
module.duplicate.exports=Duplicate ''exports'': {0}
|
||||
module.duplicate.opens=Duplicate ''opens'': {0}
|
||||
module.duplicate.uses=Duplicate ''uses'': {0}
|
||||
module.duplicate.provides=Duplicate ''provides'': {0}
|
||||
module.duplicate.exports.target=Duplicate ''exports'' target: {0}
|
||||
module.duplicate.opens.target=Duplicate ''opens'' target: {0}
|
||||
module.duplicate.impl=Duplicate implementation: {0}
|
||||
module.file.wrong.location=Module declaration should be located in a module's source root
|
||||
module.open.duplicate.text=Go to duplicate
|
||||
|
||||
@@ -65,13 +65,15 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
highlight("""
|
||||
module M {
|
||||
requires M2;
|
||||
<error descr="Duplicate requires: M2">requires M2;</error>
|
||||
<error descr="Duplicate 'requires': M2">requires M2;</error>
|
||||
exports pkg.main;
|
||||
<error descr="Duplicate export: pkg.main">exports pkg. main;</error>
|
||||
<error descr="Duplicate 'exports': pkg.main">exports pkg. main;</error>
|
||||
opens pkg.main;
|
||||
<error descr="Duplicate 'opens': pkg.main">opens pkg. main;</error>
|
||||
uses pkg.main.C;
|
||||
<error descr="Duplicate uses: pkg.main.C">uses pkg. main . /*...*/ C;</error>
|
||||
<error descr="Duplicate 'uses': pkg.main.C">uses pkg. main . /*...*/ C;</error>
|
||||
provides pkg .main .C with pkg.main.Impl;
|
||||
<error descr="Duplicate provides: pkg.main.C">provides pkg.main.C with pkg. main. Impl;</error>
|
||||
<error descr="Duplicate 'provides': pkg.main.C">provides pkg.main.C with pkg. main. Impl;</error>
|
||||
}""".trimIndent())
|
||||
}
|
||||
|
||||
@@ -105,7 +107,7 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
module M {
|
||||
exports <error descr="Package not found: pkg.missing.unknown">pkg.missing.unknown</error>;
|
||||
exports <error descr="Package is empty: pkg.empty">pkg.empty</error>;
|
||||
exports pkg.main to <warning descr="Module not found: M.missing">M.missing</warning>, M2, <error descr="Duplicate export: M2">M2</error>;
|
||||
exports pkg.main to <warning descr="Module not found: M.missing">M.missing</warning>, M2, <error descr="Duplicate 'exports' target: M2">M2</error>;
|
||||
}""".trimIndent())
|
||||
}
|
||||
|
||||
@@ -117,7 +119,7 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
module M {
|
||||
opens <warning descr="Package not found: pkg.missing.unknown">pkg.missing.unknown</warning>;
|
||||
opens <warning descr="Package is empty: pkg.empty">pkg.empty</warning>;
|
||||
opens pkg.main to <warning descr="Module not found: M.missing">M.missing</warning>, M2, <error descr="Duplicate export: M2">M2</error>;
|
||||
opens pkg.main to <warning descr="Module not found: M.missing">M.missing</warning>, M2, <error descr="Duplicate 'opens' target: M2">M2</error>;
|
||||
}""".trimIndent())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user