mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
narrow down type annotations applicability
This commit is contained in:
@@ -21,6 +21,8 @@ import com.intellij.openapi.util.RecursionGuard;
|
||||
import com.intellij.openapi.util.RecursionManager;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.light.LightTypeParameter;
|
||||
import com.intellij.psi.impl.source.PsiClassReferenceType;
|
||||
import com.intellij.psi.impl.source.PsiImmediateClassType;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
@@ -231,13 +233,20 @@ public class PsiSubstitutorImpl implements PsiSubstitutor {
|
||||
final PsiType result = substituteTypeParameter(typeParameter);
|
||||
if (result != null) {
|
||||
PsiUtil.ensureValidType(result);
|
||||
return result.annotate(new TypeAnnotationProvider() {
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiAnnotation[] getAnnotations() {
|
||||
return ArrayUtil.mergeArrays(result.getAnnotations(), classType.getAnnotations());
|
||||
}
|
||||
});
|
||||
if (result instanceof PsiImmediateClassType ||
|
||||
result instanceof PsiClassReferenceType ||
|
||||
result instanceof TypeCorrector.PsiCorrectedClassType ||
|
||||
result instanceof PsiArrayType ||
|
||||
result instanceof PsiWildcardType ||
|
||||
result instanceof PsiCapturedWildcardType) {
|
||||
return result.annotate(new TypeAnnotationProvider() {
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiAnnotation[] getAnnotations() {
|
||||
return ArrayUtil.mergeArrays(result.getAnnotations(), classType.getAnnotations());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.intellij.openapi.roots.FileIndexFacade;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.PsiClassReferenceType;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.Function;
|
||||
@@ -161,20 +160,20 @@ class TypeCorrector extends PsiTypeMapper {
|
||||
return mappedSubstitutor;
|
||||
}
|
||||
|
||||
private class PsiCorrectedClassType extends PsiClassType.Stub {
|
||||
public class PsiCorrectedClassType extends PsiClassType.Stub {
|
||||
private final PsiClassType myDelegate;
|
||||
private final CorrectedResolveResult myResolveResult;
|
||||
|
||||
public PsiCorrectedClassType(LanguageLevel languageLevel,
|
||||
PsiClassType delegate,
|
||||
CorrectedResolveResult resolveResult) {
|
||||
private PsiCorrectedClassType(LanguageLevel languageLevel,
|
||||
PsiClassType delegate,
|
||||
CorrectedResolveResult resolveResult) {
|
||||
this(languageLevel, delegate, resolveResult, delegate.getAnnotationProvider());
|
||||
}
|
||||
|
||||
public PsiCorrectedClassType(LanguageLevel languageLevel,
|
||||
PsiClassType delegate,
|
||||
CorrectedResolveResult resolveResult,
|
||||
TypeAnnotationProvider delegateAnnotationProvider) {
|
||||
private PsiCorrectedClassType(LanguageLevel languageLevel,
|
||||
PsiClassType delegate,
|
||||
CorrectedResolveResult resolveResult,
|
||||
TypeAnnotationProvider delegateAnnotationProvider) {
|
||||
super(languageLevel, delegateAnnotationProvider);
|
||||
myDelegate = delegate;
|
||||
myResolveResult = resolveResult;
|
||||
|
||||
Reference in New Issue
Block a user