@Override void verifyFilter(SourceSectionFilter filter) { Set<Class<?>> providedTags = getProvidedTags(language); // filters must not reference tags not declared in @RequiredTags Set<Class<?>> referencedTags = filter.getReferencedTags(); if (!providedTags.containsAll(referencedTags)) { Set<Class<?>> missingTags = new HashSet<>(referencedTags); missingTags.removeAll(providedTags); Set<Class<?>> allTags = new LinkedHashSet<>(providedTags); allTags.addAll(missingTags); StringBuilder builder = new StringBuilder("{"); String sep = ""; for (Class<?> tag : allTags) { builder.append(sep); builder.append(tag.getSimpleName()); sep = ", "; } builder.append("}"); throw new IllegalArgumentException(String.format("The attached filter %s references the following tags %s which are not declared as provided by the language. " + "To fix this annotate the language class %s with @%s(%s).", filter, missingTags, language.getClass().getName(), ProvidedTags.class.getSimpleName(), builder)); } }
@Override void verifyFilter(SourceSectionFilter filter) { Set<Class<?>> providedTags = getProvidedTags(languageInfo); // filters must not reference tags not declared in @RequiredTags Set<Class<?>> referencedTags = filter.getReferencedTags(); if (!providedTags.containsAll(referencedTags)) { Set<Class<?>> missingTags = new HashSet<>(referencedTags); missingTags.removeAll(providedTags); Set<Class<?>> allTags = new LinkedHashSet<>(providedTags); allTags.addAll(missingTags); StringBuilder builder = new StringBuilder("{"); String sep = ""; for (Class<?> tag : allTags) { builder.append(sep); builder.append(tag.getSimpleName()); sep = ", "; } builder.append("}"); Nodes langAccess = AccessorInstrumentHandler.nodesAccess(); TruffleLanguage<?> lang = langAccess.getLanguageSpi(languageInfo); throw new IllegalArgumentException(String.format("The attached filter %s references the following tags %s which are not declared as provided by the language. " + "To fix this annotate the language class %s with @%s(%s).", filter, missingTags, lang.getClass().getName(), ProvidedTags.class.getSimpleName(), builder)); } }
@SuppressWarnings("deprecation") private static void traceFilterCheck(String result, Set<Class<?>> providedTags, EventBinding<?> binding, Node node, SourceSection sourceSection) { Set<Class<?>> tags = binding.getFilter().getReferencedTags(); Set<Class<?>> containedTags = new HashSet<>(); for (Class<?> tag : tags) { if (hasTagImpl(providedTags, node, tag)) { containedTags.add(tag); } } trace(" Filter %4s %s section:%s tags:%s%n", result, binding.getFilter(), sourceSection, containedTags); }
@SuppressWarnings("deprecation") private static void traceFilterCheck(String result, Set<Class<?>> providedTags, EventBinding<?> binding, Node node, SourceSection sourceSection) { Set<Class<?>> tags = binding.getFilter().getReferencedTags(); Set<Class<?>> containedTags = new HashSet<>(); for (Class<?> tag : tags) { if (hasTagImpl(providedTags, node, tag)) { containedTags.add(tag); } } trace(" Filter %4s %s section:%s tags:%s%n", result, binding.getFilter(), sourceSection, containedTags); }