This commit is contained in:
Alexey Kudravtsev
2019-03-21 17:43:45 +03:00
parent 6b1660f22d
commit 1a7d393bbf
3 changed files with 29 additions and 18 deletions
@@ -90,6 +90,7 @@ public abstract class PsiClassType extends PsiType implements JvmReferenceType {
return getParameters().length;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof PsiClassType)) {
@@ -166,6 +167,7 @@ public abstract class PsiClassType extends PsiType implements JvmReferenceType {
return false;
}
@Override
public int hashCode() {
final String className = getClassName();
if (className == null) return 0;
@@ -17,7 +17,8 @@
package com.intellij.psi.util;
import com.intellij.psi.*;
import com.intellij.util.Function;
import com.intellij.util.NotNullFunction;
import org.jetbrains.annotations.NotNull;
public class PsiExpressionTrimRenderer extends JavaRecursiveElementWalkingVisitor {
private final StringBuilder myBuf;
@@ -247,18 +248,19 @@ public class PsiExpressionTrimRenderer extends JavaRecursiveElementWalkingVisito
}
}
public static class RenderFunction implements Function<PsiExpression, String> {
public static class RenderFunction implements NotNullFunction<PsiExpression, String> {
@NotNull
@Override
public String fun(PsiExpression psiExpression) {
return render(psiExpression);
}
}
public static String render(PsiExpression expression) {
public static String render(@NotNull PsiExpression expression) {
return render(expression, 100);
}
public static String render(PsiExpression expression, int maxLength) {
public static String render(@NotNull PsiExpression expression, int maxLength) {
StringBuilder buf = new StringBuilder();
expression.accept(new PsiExpressionTrimRenderer(buf));
final String text = buf.toString();
@@ -169,7 +169,9 @@ public final class PsiUtil extends PsiUtilCore {
private static void addException(@NotNull PsiMethod method,
@Nullable PsiClass exceptionClass,
@Nullable String exceptionName) throws IncorrectOperationException {
assert exceptionClass != null || exceptionName != null : "One of exceptionName, exceptionClass must be not null";
if (exceptionClass == null && exceptionName == null) {
throw new IllegalArgumentException("One of exceptionName, exceptionClass must be not null");
}
PsiReferenceList throwsList = method.getThrowsList();
PsiJavaCodeReferenceElement[] refs = throwsList.getReferenceElements();
boolean replaced = false;
@@ -371,8 +373,8 @@ public final class PsiUtil extends PsiUtilCore {
return Collections.emptyList();
}
private static void collectSwitchResultExpressions(List<PsiExpression> result, PsiElement container) {
ArrayList<PsiBreakStatement> breaks = new ArrayList<>();
private static void collectSwitchResultExpressions(@NotNull List<? super PsiExpression> result, @NotNull PsiElement container) {
List<PsiBreakStatement> breaks = new ArrayList<>();
addStatements(breaks, container, PsiBreakStatement.class, element -> element instanceof PsiSwitchBlock);
for (PsiBreakStatement aBreak : breaks) {
ContainerUtil.addIfNotNull(result, aBreak.getExpression());
@@ -402,7 +404,9 @@ public final class PsiUtil extends PsiUtilCore {
@PsiModifier.ModifierConstant
@NotNull
public static String getAccessModifier(@AccessLevel int accessLevel) {
assert accessLevel > 0 && accessLevel <= accessModifiers.length : accessLevel;
if (accessLevel <= 0 || accessLevel > accessModifiers.length) {
throw new IllegalArgumentException("Unknown level:" + accessLevel);
}
@SuppressWarnings("UnnecessaryLocalVariable") @PsiModifier.ModifierConstant
final String modifier = accessModifiers[accessLevel - 1];
return modifier;
@@ -561,12 +565,12 @@ public final class PsiUtil extends PsiUtilCore {
}
@MethodCandidateInfo.ApplicabilityLevelConstant
public static int getApplicabilityLevel(@NotNull final PsiMethod method,
@NotNull final PsiSubstitutor substitutorForMethod,
@NotNull final PsiType[] args,
@NotNull final LanguageLevel languageLevel,
final boolean allowUncheckedConversion,
final boolean checkVarargs) {
private static int getApplicabilityLevel(@NotNull final PsiMethod method,
@NotNull final PsiSubstitutor substitutorForMethod,
@NotNull final PsiType[] args,
@NotNull final LanguageLevel languageLevel,
final boolean allowUncheckedConversion,
final boolean checkVarargs) {
return getApplicabilityLevel(method, substitutorForMethod, args, languageLevel,
allowUncheckedConversion, checkVarargs, ApplicabilityChecker.ASSIGNABILITY_CHECKER);
}
@@ -667,9 +671,9 @@ public final class PsiUtil extends PsiUtilCore {
* {@code class Foo<T extends Number>{}} types Foo&lt;?&gt; and Foo&lt;? extends Number&gt;
* would be equivalent
*/
public static boolean equalOnEquivalentClasses(PsiClassType thisClassType,
public static boolean equalOnEquivalentClasses(@NotNull PsiClassType thisClassType,
@NotNull PsiClass aClass,
PsiClassType otherClassType,
@NotNull PsiClassType otherClassType,
@NotNull PsiClass bClass) {
final PsiClassType capture1 = !PsiCapturedWildcardType.isCapture()
? thisClassType : (PsiClassType)captureToplevelWildcards(thisClassType, aClass);
@@ -1336,14 +1340,17 @@ public final class PsiUtil extends PsiUtilCore {
@NotNull
public static PsiReturnStatement[] findReturnStatements(@Nullable PsiCodeBlock body) {
ArrayList<PsiReturnStatement> vector = new ArrayList<>();
List<PsiReturnStatement> vector = new ArrayList<>();
if (body != null) {
addStatements(vector, body, PsiReturnStatement.class, statement -> false);
}
return vector.toArray(PsiReturnStatement.EMPTY_ARRAY);
}
private static <T extends PsiElement> void addStatements(List<? super T> vector, PsiElement element, Class<? extends T> clazz, Predicate<? super PsiElement> stopAt) {
private static <T extends PsiElement> void addStatements(@NotNull List<? super T> vector,
@NotNull PsiElement element,
@NotNull Class<? extends T> clazz,
@NotNull Predicate<? super PsiElement> stopAt) {
if (PsiTreeUtil.instanceOf(element, clazz)) {
//noinspection unchecked
vector.add((T)element);