Collection<String> (@NotNull ConfigKey configKey, @NotNull PsiFile file) { List<String> properties = new ArrayList<>(); final Project project = file.getProject(); @Nullable VirtualFile currentFile = file.getVirtualFile(); while (currentFile != null) { final ConfigValue configValue = readProperty(configKey, project, currentFile); if (null != configValue) { if (null == configValue.getValue()) { if (configValue.isStopBubbling()) { break; } } else { properties.add(configValue.getValue()); } } currentFile = currentFile.getParent(); } Collections.reverse(properties); Set<String> result = new HashSet<>(); for (String configProperty : properties) { if (StringUtil.isNotEmpty(configProperty)) { final String[] values = configProperty.split(";"); for (String value : values) { if (value.startsWith("+")) { result.add(value.substring(1)); } else if (value.startsWith("-")) { result.remove(value.substring(1)); } } } } return result; }