mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
fun expr search: minor improvements after reviews
This commit is contained in:
@@ -371,7 +371,7 @@ public class JavaFunctionalExpressionSearcher extends QueryExecutorBase<PsiFunct
|
||||
if (!result.add(c)) return;
|
||||
|
||||
DirectClassInheritorsSearch.search(c).forEach(candidate -> {
|
||||
if (candidate.isInterface() && isFunctionalCompatible(candidate)) {
|
||||
if (candidate.isInterface()) {
|
||||
visit(candidate);
|
||||
}
|
||||
return true;
|
||||
@@ -381,11 +381,6 @@ public class JavaFunctionalExpressionSearcher extends QueryExecutorBase<PsiFunct
|
||||
return result;
|
||||
}
|
||||
|
||||
private static boolean isFunctionalCompatible(PsiClass candidate) {
|
||||
return LambdaUtil.isFunctionalClass(candidate) ||
|
||||
Arrays.stream(candidate.getAllMethods()).filter(m -> !m.hasModifierProperty(PsiModifier.DEFAULT)).count() == 0;
|
||||
}
|
||||
|
||||
private static class SamDescriptor {
|
||||
final PsiClass samClass;
|
||||
final GlobalSearchScope useScope;
|
||||
|
||||
@@ -30,14 +30,14 @@ import java.io.IOException;
|
||||
*/
|
||||
public class FunctionalExpressionKey {
|
||||
public static final int UNKNOWN_PARAM_COUNT = -1;
|
||||
public final int lambdaParameterCount;
|
||||
public final CoarseType lambdaType;
|
||||
private final int lambdaParameterCount;
|
||||
private final CoarseType lambdaReturnType;
|
||||
public final Location location;
|
||||
|
||||
public FunctionalExpressionKey(int lambdaParameterCount, @NotNull CoarseType lambdaType, @NotNull Location location) {
|
||||
public FunctionalExpressionKey(int lambdaParameterCount, @NotNull CoarseType lambdaReturnType, @NotNull Location location) {
|
||||
this.location = location;
|
||||
this.lambdaParameterCount = lambdaParameterCount;
|
||||
this.lambdaType = lambdaType;
|
||||
this.lambdaReturnType = lambdaReturnType;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -49,7 +49,7 @@ public class FunctionalExpressionKey {
|
||||
|
||||
public void serializeKey(@NotNull DataOutput dataStream) throws IOException {
|
||||
dataStream.writeByte(lambdaParameterCount);
|
||||
dataStream.writeByte(lambdaType.ordinal());
|
||||
dataStream.writeByte(lambdaReturnType.ordinal());
|
||||
serializeLocation(dataStream);
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ public class FunctionalExpressionKey {
|
||||
public boolean canRepresent(int samParamCount, boolean booleanCompatible, boolean isVoid) {
|
||||
if (lambdaParameterCount >= 0 && samParamCount != lambdaParameterCount) return false;
|
||||
|
||||
switch (lambdaType) {
|
||||
switch (lambdaReturnType) {
|
||||
case VOID: return isVoid;
|
||||
case NON_VOID: return !isVoid;
|
||||
case BOOLEAN: return booleanCompatible;
|
||||
@@ -98,7 +98,7 @@ public class FunctionalExpressionKey {
|
||||
FunctionalExpressionKey key = (FunctionalExpressionKey)o;
|
||||
|
||||
if (lambdaParameterCount != key.lambdaParameterCount) return false;
|
||||
if (lambdaType != key.lambdaType) return false;
|
||||
if (lambdaReturnType != key.lambdaReturnType) return false;
|
||||
if (!location.equals(key.location)) return false;
|
||||
|
||||
return true;
|
||||
@@ -107,7 +107,7 @@ public class FunctionalExpressionKey {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = lambdaParameterCount;
|
||||
result = 31 * result + lambdaType.ordinal();
|
||||
result = 31 * result + lambdaReturnType.ordinal();
|
||||
result = 31 * result + location.hashCode();
|
||||
return result;
|
||||
}
|
||||
@@ -116,7 +116,7 @@ public class FunctionalExpressionKey {
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(this)
|
||||
.add("lambdaParameterCount", lambdaParameterCount)
|
||||
.add("type", lambdaType)
|
||||
.add("type", lambdaReturnType)
|
||||
.add("location", location)
|
||||
.toString();
|
||||
}
|
||||
|
||||
@@ -18,9 +18,24 @@ class Foo {
|
||||
DumbAwareRunnable var1 = () -> "var1";
|
||||
DumbAwareRunnable2 var2 = () -> "var2";
|
||||
DumbAwareFunction var3 = a -> "var3";
|
||||
WithDefaultMethods var4 = () -> "var4";
|
||||
|
||||
foo(() -> "c1", DumbAwareRunnable2.class);
|
||||
bar(() -> "c2");
|
||||
bar2(() -> "c3");
|
||||
}
|
||||
}
|
||||
|
||||
interface WithManyMethods {
|
||||
void run1();
|
||||
void run2();
|
||||
void run3();
|
||||
}
|
||||
interface WithManyMethods2 extends WithManyMethods {
|
||||
}
|
||||
|
||||
interface WithDefaultMethods extends WithManyMethods2 {
|
||||
default String foo() {}
|
||||
default void run1();
|
||||
default void run2();
|
||||
}
|
||||
@@ -101,9 +101,14 @@ public class FindFunctionalInterfaceTest extends LightCodeInsightFixtureTestCase
|
||||
|
||||
public void testFindSubInterfaceLambdas() {
|
||||
configure();
|
||||
|
||||
assertSize(5, FunctionalExpressionSearch.search(findClass("DumbAwareRunnable")).findAll());
|
||||
assertSize(3, FunctionalExpressionSearch.search(findClass("DumbAwareRunnable2")).findAll());
|
||||
assertSize(6, FunctionalExpressionSearch.search(findClass("DumbAware")).findAll());
|
||||
|
||||
assertSize(1, FunctionalExpressionSearch.search(findClass("WithDefaultMethods")).findAll());
|
||||
assertSize(1, FunctionalExpressionSearch.search(findClass("WithManyMethods")).findAll());
|
||||
assertSize(1, FunctionalExpressionSearch.search(findClass("WithManyMethods2")).findAll());
|
||||
}
|
||||
|
||||
public void testArraysStreamLikeApi() {
|
||||
|
||||
Reference in New Issue
Block a user