diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java
index ce17f7b3a82e..3fd204a4fba1 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java
@@ -1734,6 +1734,22 @@ public final class HighlightMethodUtil {
return false;
}
+ static HighlightInfo.@Nullable Builder checkConstructorInImplicitClass(@NotNull PsiMethod method) {
+ if (!method.isConstructor()) {
+ return null;
+ }
+ if (!(method.getContainingClass() instanceof PsiImplicitClass)) {
+ return null;
+ }
+ String description = JavaErrorBundle.message("implicit.class.with.explicit.constructor");
+ TextRange textRange = HighlightNamesUtil.getMethodDeclarationTextRange(method);
+ HighlightInfo.Builder builder =
+ HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(textRange).descriptionAndTooltip(description);
+ IntentionAction action = QuickFixFactory.getInstance().createDeleteFix(method);
+ builder.registerFix(action, null, null, null, null);
+ return builder;
+ }
+
private static final class ReturnModel {
final PsiReturnStatement myStatement;
final PsiType myType;
diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
index 2b68d606536b..6da3aab19f30 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
@@ -776,6 +776,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
@Override
public void visitMethod(@NotNull PsiMethod method) {
super.visitMethod(method);
+ if (!hasErrorResults()) add(HighlightMethodUtil.checkConstructorInImplicitClass(method));
if (!hasErrorResults()) add(HighlightControlFlowUtil.checkUnreachableStatement(method.getBody()));
if (!hasErrorResults()) add(HighlightMethodUtil.checkConstructorHandleSuperClassExceptions(method));
if (!hasErrorResults()) add(HighlightMethodUtil.checkRecordAccessorDeclaration(method));
diff --git a/java/java-psi-impl/resources/messages/JavaErrorBundle.properties b/java/java-psi-impl/resources/messages/JavaErrorBundle.properties
index e6b675faa7bb..ed11e07f618d 100644
--- a/java/java-psi-impl/resources/messages/JavaErrorBundle.properties
+++ b/java/java-psi-impl/resources/messages/JavaErrorBundle.properties
@@ -451,4 +451,5 @@ too.many.array.dimensions=Too many array dimensions
error.cannot.infer.pattern.type=Cannot infer pattern type: {0}
error.extra.semicolons.between.import.statements.not.allowed=Extra semicolons between import statements are not allowed
remove.unused.imports.quickfix.text=Remove unused imports
-incomplete.project.state.pending.reference=Not resolved until the project is fully loaded
\ No newline at end of file
+incomplete.project.state.pending.reference=Not resolved until the project is fully loaded
+implicit.class.with.explicit.constructor=Explicit constructor in implicitly declared class is not allowed
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/ImplicitClassConstructorNoParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/ImplicitClassConstructorNoParam.java
new file mode 100644
index 000000000000..05897f719a62
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/ImplicitClassConstructorNoParam.java
@@ -0,0 +1,7 @@
+void main(String[] args) {
+ System.out.println("AAAAA");
+}
+
+public ImplicitClassConstructorNoParam() {
+ System.out.println("BBBBB");
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/ImplicitClassConstructorParam.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/ImplicitClassConstructorParam.java
new file mode 100644
index 000000000000..40dd435ed550
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/implicitClass/ImplicitClassConstructorParam.java
@@ -0,0 +1,7 @@
+void main(String[] args) {
+ System.out.println("AAAAA");
+}
+
+public ImplicitClassConstructorParam(String a) {
+ System.out.println("BBBBB");
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt
index 00057ae46f71..49bba34d7f8e 100644
--- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt
+++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImplicitClassHighlightingTest.kt
@@ -164,6 +164,14 @@ class ImplicitClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() {
})
}
+ fun testImplicitClassConstructorNoParam() {
+ doTest()
+ }
+
+ fun testImplicitClassConstructorParam() {
+ doTest()
+ }
+
private fun doTest() {
myFixture.configureByFile(getTestName(false) + ".java")
myFixture.checkHighlighting()