mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
support Class<?> in loggers (IDEA-105064)
This commit is contained in:
@@ -31,10 +31,7 @@ import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.PsiShortNamesCache;
|
||||
import com.intellij.psi.search.searches.DeepestSuperMethodsSearch;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.NullableFunction;
|
||||
import com.intellij.util.Processor;
|
||||
@@ -1159,12 +1156,14 @@ public class ExpectedTypesProvider {
|
||||
}
|
||||
}
|
||||
if ("Logger".equals(containingClass.getName()) || "Log".equals(containingClass.getName())) {
|
||||
if (parameterType instanceof PsiClassType &&
|
||||
parameterType.equalsToText(CommonClassNames.JAVA_LANG_CLASS)) {
|
||||
PsiClass placeClass = PsiTreeUtil.getContextOfType(argument, PsiClass.class);
|
||||
PsiClass classClass = ((PsiClassType)parameterType).resolve();
|
||||
if (placeClass != null && classClass != null) {
|
||||
return factory.createType(classClass, factory.createType(placeClass));
|
||||
if (parameterType instanceof PsiClassType) {
|
||||
PsiType typeArg = PsiUtil.substituteTypeParameter(parameterType, CommonClassNames.JAVA_LANG_CLASS, 0, true);
|
||||
if (typeArg != null && TypeConversionUtil.erasure(typeArg).equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) {
|
||||
PsiClass placeClass = PsiTreeUtil.getContextOfType(argument, PsiClass.class);
|
||||
PsiClass classClass = ((PsiClassType)parameterType).resolve();
|
||||
if (placeClass != null && classClass != null) {
|
||||
return factory.createType(classClass, factory.createType(placeClass));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,18 +33,15 @@ public class ClassLiteralGetter {
|
||||
|
||||
public static void addCompletions(@NotNull final JavaSmartCompletionParameters parameters,
|
||||
@NotNull Consumer<LookupElement> result, final PrefixMatcher matcher) {
|
||||
PsiType expectedType = parameters.getExpectedType();
|
||||
PsiType expectedType = parameters.getDefaultType();
|
||||
if (!InheritanceUtil.isInheritor(expectedType, CommonClassNames.JAVA_LANG_CLASS)) {
|
||||
return;
|
||||
expectedType = parameters.getExpectedType();
|
||||
if (!InheritanceUtil.isInheritor(expectedType, CommonClassNames.JAVA_LANG_CLASS)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PsiType classParameter = PsiUtil.substituteTypeParameter(expectedType, CommonClassNames.JAVA_LANG_CLASS, 0, false);
|
||||
if (classParameter == null) {
|
||||
PsiType defaultType = parameters.getDefaultType();
|
||||
if (InheritanceUtil.isInheritor(defaultType, CommonClassNames.JAVA_LANG_CLASS)) {
|
||||
classParameter = PsiUtil.substituteTypeParameter(defaultType, CommonClassNames.JAVA_LANG_CLASS, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
boolean addInheritors = false;
|
||||
PsiElement position = parameters.getPosition();
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
public class Foo {
|
||||
public static final Logger LOG = Logger.getInstance(<caret>)
|
||||
}
|
||||
|
||||
class Logger {
|
||||
static Logger getInstance(Class<?> c) {}
|
||||
}
|
||||
+3
@@ -314,6 +314,9 @@ public class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase {
|
||||
public void testGetLogger() {
|
||||
checkPreferredItems 0, 'Foo.class', 'forName'
|
||||
}
|
||||
public void testGetWildcardLogger() {
|
||||
checkPreferredItems 0, 'Foo.class', 'forName'
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBasePath() {
|
||||
|
||||
Reference in New Issue
Block a user