From b9dad11495c81d80bc0665415bbd3b2ca63843ec Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 28 Dec 2018 18:57:22 +0100 Subject: [PATCH] hardcode log4j Level expected type (IDEA-201783) --- .../intellij/codeInsight/hardcodedDefaultTypes.kt | 11 ++++++++++- .../completion/smartType/Log4jLevel-out.java | 8 ++++++++ .../completion/smartType/Log4jLevel.java | 6 ++++++ .../completion/SmartTypeCompletionTest.java | 14 ++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel-out.java create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel.java diff --git a/java/java-impl/src/com/intellij/codeInsight/hardcodedDefaultTypes.kt b/java/java-impl/src/com/intellij/codeInsight/hardcodedDefaultTypes.kt index aa53dc02c696..2583aff54264 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hardcodedDefaultTypes.kt +++ b/java/java-impl/src/com/intellij/codeInsight/hardcodedDefaultTypes.kt @@ -33,7 +33,16 @@ private interface DefaultTypeProvider { private val providers = createProviders() private fun createProviders(): MultiMap { - val providers = listOf>( + val providers = listOf( + MethodArgument("log", 0) to object : DefaultTypeProvider { + override fun getDefaultType(method: PsiMethod, substitutor: PsiSubstitutor, argument: PsiExpression): PsiType? { + if (isDefinedInClass(method, "org.apache.log4j.Category")) { + return JavaPsiFacade.getElementFactory(method.project).createTypeFromText("org.apache.log4j.Level", argument) + } + return null + } + }, + MethodArgument("contains", 0) to takeClassTypeArgument(CommonClassNames.JAVA_UTIL_COLLECTION, 0), MethodArgument("remove", 0) to takeClassTypeArgument(CommonClassNames.JAVA_UTIL_COLLECTION, 0), MethodArgument("indexOf", 0) to takeClassTypeArgument(CommonClassNames.JAVA_UTIL_LIST, 0), diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel-out.java b/java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel-out.java new file mode 100644 index 000000000000..07716f8a0391 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel-out.java @@ -0,0 +1,8 @@ +import org.apache.log4j.Level; + +class Foo { + { + org.apache.log4j.Category logger; + logger.log(Level.FATAL, ) + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel.java b/java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel.java new file mode 100644 index 000000000000..af37bea8da52 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/Log4jLevel.java @@ -0,0 +1,6 @@ +class Foo { + { + org.apache.log4j.Category logger; + logger.log(F) + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartTypeCompletionTest.java index a5e67ad2ece2..3aa7d8f5c0ed 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartTypeCompletionTest.java @@ -1315,4 +1315,18 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase { configureByTestName(); assertOrderedEquals(myFixture.getLookupElementStrings(), "this"); } + + public void testLog4jLevel() { + myFixture.addClass("package org.apache.log4j; " + + "public class Category { " + + " public void log(Priority priority, Object message); " + + "}" + + "public class Priority { " + + " final static public Priority FATAL;" + //deprecated + "}" + + "public class Level extends Priority { " + + " final static public Level FATAL;" + + "}"); + doTest('\n'); + } }