package org.elixir_lang; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; import org.apache.commons.lang.ArrayUtils; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import java.util.Arrays; import java.util.Collection; public class Module { public static class IsNestedUnder implements Condition<String> { /* * Fields */ @NotNull private java.util.List<String> splitModuleName; /* * Constructors */ public IsNestedUnder(@NotNull String moduleName) { this.splitModuleName = split(moduleName); } /* * Public Instance Methods */ @Override public boolean value(@NotNull String maybeStartsWithModuleName) { java.util.List<String> splitMaybStartsIwthModuleName = split(maybeStartsWithModuleName); boolean isNestedUnder = true; if (splitMaybStartsIwthModuleName.size() > splitModuleName.size()) { for (int i = 0; i < splitModuleName.size(); i++) { if (!splitMaybStartsIwthModuleName.get(i).equals(splitModuleName.get(i))) { isNestedUnder = false; break; } } } else { isNestedUnder = false; } return isNestedUnder; } } /* * Constants */ private static final String SEPARATOR = "."; /* * Public Static Methods */ /** * Emulates Module.concat/1 * @return */ @Contract(pure = true) @NotNull public static String concat(@NotNull String... aliases) { return StringUtil.join(aliases, SEPARATOR); } @Contract(pure = true) @NotNull public static String concat(@NotNull Collection<String> aliases) { return StringUtil.join(aliases, SEPARATOR); } /** * Emulates Module.split/1 */ @Contract(pure = true) @NotNull public static java.util.List<String> split(@NotNull String name) { return StringUtil.split(name, SEPARATOR); } }