mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
good code red:do not override calculated subst with raw (IDEA-67680)
This commit is contained in:
+7
@@ -1280,16 +1280,23 @@ public class GenericsHighlightUtil {
|
||||
if (refParamList.getTypeArguments().length == 0) return null;
|
||||
JavaResolveResult resolveResult = null;
|
||||
PsiElement parent = refParamList.getParent();
|
||||
PsiElement qualifier = null;
|
||||
if (parent instanceof PsiJavaCodeReferenceElement) {
|
||||
resolveResult = ((PsiJavaCodeReferenceElement)parent).advancedResolve(false);
|
||||
qualifier = ((PsiJavaCodeReferenceElement)parent).getQualifier();
|
||||
}
|
||||
else if (parent instanceof PsiCallExpression) {
|
||||
resolveResult = ((PsiCallExpression)parent).resolveMethodGenerics();
|
||||
if (parent instanceof PsiMethodCallExpression) {
|
||||
final PsiReferenceExpression methodExpression = ((PsiMethodCallExpression)parent).getMethodExpression();
|
||||
qualifier = methodExpression.getQualifier();
|
||||
}
|
||||
}
|
||||
if (resolveResult != null) {
|
||||
PsiElement element = resolveResult.getElement();
|
||||
if (!(element instanceof PsiTypeParameterListOwner)) return null;
|
||||
if (((PsiModifierListOwner)element).hasModifierProperty(PsiModifier.STATIC)) return null;
|
||||
if (qualifier instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)qualifier).resolve() instanceof PsiTypeParameter) return null;
|
||||
PsiClass containingClass = ((PsiMember)element).getContainingClass();
|
||||
if (containingClass != null && PsiUtil.isRawSubstitutor(containingClass, resolveResult.getSubstitutor())) {
|
||||
if ((parent instanceof PsiCallExpression || parent instanceof PsiMethodReferenceExpression) && PsiUtil.isLanguageLevel7OrHigher(parent)) {
|
||||
|
||||
@@ -583,7 +583,7 @@ public class PsiClassImplUtil {
|
||||
@NotNull PsiElementFactory elementFactory,
|
||||
@NotNull LanguageLevel languageLevel) {
|
||||
if (PsiUtil.isRawSubstitutor(aClass, substitutor)) {
|
||||
return elementFactory.createRawSubstitutor(candidateClass);
|
||||
return elementFactory.createRawSubstitutor(candidateClass).putAll(substitutor);
|
||||
}
|
||||
final PsiType containingType = elementFactory.createType(candidateClass, candidateSubstitutor, languageLevel);
|
||||
PsiType type = substitutor.substitute(containingType);
|
||||
@@ -675,9 +675,6 @@ public class PsiClassImplUtil {
|
||||
if (superClass == null) continue;
|
||||
PsiSubstitutor finalSubstitutor = obtainFinalSubstitutor(superClass, superTypeResolveResult.getSubstitutor(), aClass,
|
||||
state.get(PsiSubstitutor.KEY), factory, languageLevel);
|
||||
if (aClass instanceof PsiTypeParameter && PsiUtil.isRawSubstitutor(superClass, finalSubstitutor)) {
|
||||
finalSubstitutor = PsiSubstitutor.EMPTY;
|
||||
}
|
||||
if (!processDeclarationsInClass(superClass, processor, state.put(PsiSubstitutor.KEY, finalSubstitutor), visited, last, place, isRaw)) {
|
||||
resolved = true;
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps
|
||||
if (substitutorMap == null) substitutorMap = new HashMap<PsiTypeParameter, PsiType>();
|
||||
substitutorMap.put(parameter, null);
|
||||
}
|
||||
return baseSubstitutor.putAll(PsiSubstitutorImpl.createSubstitutor(substitutorMap));
|
||||
return PsiSubstitutorImpl.createSubstitutor(substitutorMap).putAll(baseSubstitutor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+1
-1
@@ -216,8 +216,8 @@ public class PsiMethodCallExpressionImpl extends ExpressionPsiElement implements
|
||||
}
|
||||
if (is15OrHigher) {
|
||||
final PsiSubstitutor substitutor = result.getSubstitutor();
|
||||
if (PsiUtil.isRawSubstitutor(method, substitutor)) return TypeConversionUtil.erasure(ret);
|
||||
PsiType substitutedReturnType = substitutor.substitute(ret);
|
||||
if (substitutedReturnType == null) return TypeConversionUtil.erasure(ret);
|
||||
PsiType lowerBound = PsiType.NULL;
|
||||
if (substitutedReturnType instanceof PsiCapturedWildcardType) {
|
||||
lowerBound = ((PsiCapturedWildcardType)substitutedReturnType).getLowerBound();
|
||||
|
||||
+1
-1
@@ -1723,7 +1723,7 @@ class SystemClassLoaderAction implements <error descr="Cannot resolve symbol 'Pr
|
||||
}
|
||||
|
||||
c = Class.forName<error descr="'forName(java.lang.String, boolean, java.lang.ClassLoader)' in 'java.lang.Class' cannot be applied to '(java.lang.String, boolean, ClassLoader)'">(cls, true, parent)</error>;
|
||||
ctor = c.getDeclaredConstructor(cp);
|
||||
<error descr="Incompatible types. Found: 'java.lang.reflect.Constructor<T>', required: 'Constructor'">ctor = c.getDeclaredConstructor(cp)</error>;
|
||||
sys = (ClassLoader) ctor.<error descr="Cannot resolve method 'newInstance(java.lang.Object[])'">newInstance</error>(params);
|
||||
Thread.currentThread().setContextClassLoader<error descr="'setContextClassLoader(java.lang.ClassLoader)' in 'java.lang.Thread' cannot be applied to '(ClassLoader)'">(sys)</error>;
|
||||
return sys;
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ class A<D> {
|
||||
}
|
||||
|
||||
<T extends A> void foo1(A.C<error descr="Type arguments given on a raw type"><Integer></error> x) {
|
||||
<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.Integer'">Integer bar = x.bar();</error>
|
||||
Integer bar = x.bar();
|
||||
}
|
||||
|
||||
<T extends A> void foo2(A<String>.C<Integer> x) {
|
||||
|
||||
+1
-1
@@ -119,7 +119,7 @@ public class LightAdvHighlightingPerformanceTest extends LightDaemonAnalyzerTest
|
||||
|
||||
public void testAClassLoader() throws Exception {
|
||||
List<HighlightInfo> errors = doTest(Math.max(1000, 10000 - JobSchedulerImpl.CORES_COUNT * 1000));
|
||||
if (173 != errors.size()) {
|
||||
if (174 != errors.size()) {
|
||||
doTest(getFilePath("_hl"), false, false);
|
||||
fail("Actual: " + errors.size());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user