diff --git a/src/main/java/org/nette/latte/php/LattePhpUtil.java b/src/main/java/org/nette/latte/php/LattePhpUtil.java index 824890a..59f0823 100644 --- a/src/main/java/org/nette/latte/php/LattePhpUtil.java +++ b/src/main/java/org/nette/latte/php/LattePhpUtil.java @@ -160,6 +160,10 @@ public static Collection getClassesByFQN(Project project, String class return getPhpIndex(project).getAnyByFQN(className); } + public static Collection getInterfacesByFQN(Project project, String className) { + return getPhpIndex(project).getInterfacesByFQN(className); + } + public static Collection getFunctionByName(Project project, String functionName) { return getPhpIndex(project).getFunctionsByName(functionName); } diff --git a/src/main/java/org/nette/latte/php/NettePhpType.java b/src/main/java/org/nette/latte/php/NettePhpType.java index 79d366d..14f7443 100644 --- a/src/main/java/org/nette/latte/php/NettePhpType.java +++ b/src/main/java/org/nette/latte/php/NettePhpType.java @@ -16,8 +16,6 @@ public class NettePhpType { final private static String[] nativeTypeHints = new String[]{"string", "int", "bool", "object", "float", "array", "mixed", "null", "callable", "iterable"}; - final private static String[] iterableTypes = new String[]{"\\Iterator", "\\Generator"}; - final private static String[] nativeIterableTypeHints = new String[]{"array", "iterable"}; final private static String[] magicMethods = new String[]{"__construct", "__callstatic", "__call", "__get", "__isset", "__clone", "__set", "__unset"}; @@ -317,11 +315,16 @@ public boolean isIterable(final @NotNull Project project, final int depth) { } Collection classes = getPhpClasses(project, depth); + Collection iterableClasses = LattePhpUtil.getInterfacesByFQN(project, "\\iterable"); + for (PhpClass phpClass : classes) { - if (LattePhpUtil.isReferenceFor(getIterableTypes(), phpClass)) { - return true; + for (PhpClass iterableClass : iterableClasses) { + if (phpClass.getClass().isInstance(iterableClass)) { + return true; + } } } + return false; } @@ -516,11 +519,6 @@ public static String[] getNativeTypeHints() { return nativeTypeHints; } - @NotNull - public static String[] getIterableTypes() { - return iterableTypes; - } - public static boolean isNativeTypeHint(final @NotNull String value) { return Arrays.asList(nativeTypeHints).contains(normalizeTypeHint(value)); }