mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-09 08:09:39 +07:00
[java-inspections] Report incompatible instantiation
Fixes 'nice to have' parts of IDEA-372223 Nullability inference for generic parameters GitOrigin-RevId: fe9490c352ee417b8a4146076632ef42790a4d25
This commit is contained in:
committed by
intellij-monorepo-bot
parent
4466a6556b
commit
b56c24001e
@@ -1,6 +1,9 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight;
|
||||
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.psi.PsiTypeParameter;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -105,12 +108,25 @@ public final class TypeNullability {
|
||||
}
|
||||
return this.nullability() == Nullability.NULLABLE ? this : other;
|
||||
}
|
||||
|
||||
public static @NotNull TypeNullability ofTypeParameter(@NotNull PsiTypeParameter parameter) {
|
||||
NullableNotNullManager manager = NullableNotNullManager.getInstance(parameter.getProject());
|
||||
if (manager != null) {
|
||||
NullabilityAnnotationInfo typeUseNullability = manager.findDefaultTypeUseNullability(parameter);
|
||||
if (typeUseNullability != null) {
|
||||
return typeUseNullability.toTypeNullability();
|
||||
}
|
||||
}
|
||||
return intersect(ContainerUtil.map(parameter.getSuperTypes(), PsiType::getNullability)).inherited();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param collection type nullabilities to intersect
|
||||
* @return the intersection of the type nullabilities in the collection
|
||||
*/
|
||||
public static @NotNull TypeNullability intersect(@NotNull Collection<@NotNull TypeNullability> collection) {
|
||||
if (collection.isEmpty()) return UNKNOWN;
|
||||
if (collection.size() == 1) return collection.iterator().next();
|
||||
Map<Nullability, Set<NullabilitySource>> map = collection.stream().collect(Collectors.groupingBy(
|
||||
TypeNullability::nullability, Collectors.mapping(TypeNullability::source, Collectors.toSet())));
|
||||
Set<NullabilitySource> sources = map.get(Nullability.NOT_NULL);
|
||||
|
||||
Reference in New Issue
Block a user