test_class.declarator: parentContainerContext
test_class.modifier: @Mock
test_class.original_string: @Mock
      ValidationContext parentContainerContext;
test_class.type: ValidationContext
test_class.var_name: parentContainerContext
test_class.declarator: parentContainerProperties
test_class.modifier: @Mock
test_class.original_string: @Mock
      PackageProperties parentContainerProperties;
test_class.type: PackageProperties
test_class.var_name: parentContainerProperties
test_class.declarator: filter
test_class.modifier: @Mock
test_class.original_string: @Mock
      WorkspaceFilter filter;
test_class.type: WorkspaceFilter
test_class.var_name: filter
test_class.declarator: properties
test_class.modifier: @Mock
test_class.original_string: @Mock
      PackageProperties properties;
test_class.type: PackageProperties
test_class.var_name: properties
test_class.declarator: validator
test_class.modifier: private
test_class.original_string: private PackageTypeValidator validator;
test_class.type: PackageTypeValidator
test_class.var_name: validator
test_class.file: vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/PackageTypeValidatorTest.java
test_class.identifier: PackageTypeValidatorTest
test_case.body: @Test
      public void testMutableContentProhibited() {
          validator = new PackageTypeValidator(filter, ValidationMessageSeverity.ERROR, ValidationMessageSeverity.INFO, ValidationMessageSeverity.INFO, true, false, false, PackageType.APPLICATION, PackageTypeValidatorFactory.DEFAULT_JCR_INSTALLER_NODE_PATH_REGEX, PackageTypeValidatorFactory.DEFAULT_ADDITIONAL_JCR_INSTALLER_FILE_NODE_PATH_REGEX, null);
          Mockito.when(properties.getPackageType()).thenReturn(PackageType.MIXED);
          ValidationExecutorTest.assertViolation(validator.validate(properties), new ValidationMessage(ValidationMessageSeverity.ERROR, String.format(PackageTypeValidator.MESSAGE_PROHIBITED_MUTABLE_PACKAGE_TYPE, PackageType.MIXED)));
          Mockito.when(properties.getPackageType()).thenReturn(PackageType.CONTENT);
          ValidationExecutorTest.assertViolation(validator.validate(properties), new ValidationMessage(ValidationMessageSeverity.ERROR, String.format(PackageTypeValidator.MESSAGE_PROHIBITED_MUTABLE_PACKAGE_TYPE, PackageType.CONTENT)));
          Mockito.when(properties.getPackageType()).thenReturn(PackageType.APPLICATION);
          Assert.assertThat(validator.validate(properties), AnyValidationMessageMatcher.noValidationInCollection());
          Mockito.when(properties.getPackageType()).thenReturn(PackageType.CONTAINER);
          Assert.assertThat(validator.validate(properties), AnyValidationMessageMatcher.noValidationInCollection());
      }
test_case.class_method_signature: PackageTypeValidatorTest.testMutableContentProhibited()
test_case.full_signature: @Test public void testMutableContentProhibited()
test_case.identifier: testMutableContentProhibited
test_case.invocations: thenReturn when getPackageType assertViolation validate format thenReturn when getPackageType assertViolation validate format thenReturn when getPackageType assertThat validate noValidationInCollection thenReturn when getPackageType assertThat validate noValidationInCollection
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testMutableContentProhibited()
focal_class.declarator: MESSAGE_FILTER_HAS_INCLUDE_EXCLUDES = "Package of type '%s' is not supposed to contain includes/excludes below any of its filters!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_FILTER_HAS_INCLUDE_EXCLUDES = "Package of type '%s' is not supposed to contain includes/excludes below any of its filters!";
focal_class.type: String
focal_class.var_name: MESSAGE_FILTER_HAS_INCLUDE_EXCLUDES
focal_class.declarator: MESSAGE_UNSUPPORTED_SUB_PACKAGE_OF_TYPE = "Package of type '%s' must only contain sub packages of type '%s' but found sub package of type '%s'!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_UNSUPPORTED_SUB_PACKAGE_OF_TYPE = "Package of type '%s' must only contain sub packages of type '%s' but found sub package of type '%s'!";
focal_class.type: String
focal_class.var_name: MESSAGE_UNSUPPORTED_SUB_PACKAGE_OF_TYPE
focal_class.declarator: MESSAGE_UNSUPPORTED_SUB_PACKAGE = "Package of type '%s' is not supposed to contain any sub packages!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_UNSUPPORTED_SUB_PACKAGE = "Package of type '%s' is not supposed to contain any sub packages!";
focal_class.type: String
focal_class.var_name: MESSAGE_UNSUPPORTED_SUB_PACKAGE
focal_class.declarator: MESSAGE_DEPENDENCY = "Package of type '%s' must not have package dependencies but found dependencies '%s'!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_DEPENDENCY = "Package of type '%s' must not have package dependencies but found dependencies '%s'!";
focal_class.type: String
focal_class.var_name: MESSAGE_DEPENDENCY
focal_class.declarator: MESSAGE_LEGACY_TYPE = "Package of type '%s' is legacy. Use one of the other types instead!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_LEGACY_TYPE = "Package of type '%s' is legacy. Use one of the other types instead!";
focal_class.type: String
focal_class.var_name: MESSAGE_LEGACY_TYPE
focal_class.declarator: MESSAGE_PACKAGE_HOOKS = "Package of type '%s' must not contain package hooks but has '%s'!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_PACKAGE_HOOKS = "Package of type '%s' must not contain package hooks but has '%s'!";
focal_class.type: String
focal_class.var_name: MESSAGE_PACKAGE_HOOKS
focal_class.declarator: MESSAGE_NO_PACKAGE_TYPE_SET = "No package type set, make sure that property 'packageType' is set in the properties.xml!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_NO_PACKAGE_TYPE_SET = "No package type set, make sure that property 'packageType' is set in the properties.xml!";
focal_class.type: String
focal_class.var_name: MESSAGE_NO_PACKAGE_TYPE_SET
focal_class.declarator: MESSAGE_OSGI_BUNDLE_OR_CONFIG = "Package of type '%s' is not supposed to contain OSGi bundles or configurations!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_OSGI_BUNDLE_OR_CONFIG = "Package of type '%s' is not supposed to contain OSGi bundles or configurations!";
focal_class.type: String
focal_class.var_name: MESSAGE_OSGI_BUNDLE_OR_CONFIG
focal_class.declarator: MESSAGE_NO_OSGI_BUNDLE_OR_CONFIG_OR_SUB_PACKAGE = "Package of type '%s' is not supposed to contain anything but OSGi bundles/configurations and sub packages!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_NO_OSGI_BUNDLE_OR_CONFIG_OR_SUB_PACKAGE = "Package of type '%s' is not supposed to contain anything but OSGi bundles/configurations and sub packages!";
focal_class.type: String
focal_class.var_name: MESSAGE_NO_OSGI_BUNDLE_OR_CONFIG_OR_SUB_PACKAGE
focal_class.declarator: MESSAGE_APP_CONTENT = "Package of type '%s' is not supposed to contain content inside '/libs' and '/apps'!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_APP_CONTENT = "Package of type '%s' is not supposed to contain content inside '/libs' and '/apps'!";
focal_class.type: String
focal_class.var_name: MESSAGE_APP_CONTENT
focal_class.declarator: MESSAGE_NO_APP_CONTENT_FOUND = "Package of type '%s' is not supposed to contain content outside '/libs' and '/apps'!"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_NO_APP_CONTENT_FOUND = "Package of type '%s' is not supposed to contain content outside '/libs' and '/apps'!";
focal_class.type: String
focal_class.var_name: MESSAGE_NO_APP_CONTENT_FOUND
focal_class.declarator: MESSAGE_INDEX_DEFINITIONS = "Package of type '%s' is not supposed to contain Oak index definitions but has 'allowIndexDefinitions' set to true."
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_INDEX_DEFINITIONS = "Package of type '%s' is not supposed to contain Oak index definitions but has 'allowIndexDefinitions' set to true.";
focal_class.type: String
focal_class.var_name: MESSAGE_INDEX_DEFINITIONS
focal_class.declarator: MESSAGE_PROHIBITED_MUTABLE_PACKAGE_TYPE = "All mutable package types are prohibited and this package is of mutable type '%s'"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_PROHIBITED_MUTABLE_PACKAGE_TYPE = "All mutable package types are prohibited and this package is of mutable type '%s'";
focal_class.type: String
focal_class.var_name: MESSAGE_PROHIBITED_MUTABLE_PACKAGE_TYPE
focal_class.declarator: MESSAGE_PROHIBITED_IMMUTABLE_PACKAGE_TYPE = "All mutable package types are prohibited and this package is of mutable type '%s'"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String MESSAGE_PROHIBITED_IMMUTABLE_PACKAGE_TYPE = "All mutable package types are prohibited and this package is of mutable type '%s'";
focal_class.type: String
focal_class.var_name: MESSAGE_PROHIBITED_IMMUTABLE_PACKAGE_TYPE
focal_class.declarator: SLING_OSGI_CONFIG = "sling:OsgiConfig"
focal_class.modifier: protected static final
focal_class.original_string: protected static final String SLING_OSGI_CONFIG = "sling:OsgiConfig";
focal_class.type: String
focal_class.var_name: SLING_OSGI_CONFIG
focal_class.declarator: PATH_HOOKS = Paths.get(Constants.VAULT_DIR, Constants.HOOKS_DIR)
focal_class.modifier: protected static final
focal_class.original_string: protected static final Path PATH_HOOKS = Paths.get(Constants.VAULT_DIR, Constants.HOOKS_DIR);
focal_class.type: Path
focal_class.var_name: PATH_HOOKS
focal_class.declarator: type
focal_class.modifier: private final @NotNull
focal_class.original_string: private final @NotNull PackageType type;
focal_class.type: PackageType
focal_class.var_name: type
focal_class.declarator: severity
focal_class.modifier: private final @NotNull
focal_class.original_string: private final @NotNull ValidationMessageSeverity severity;
focal_class.type: ValidationMessageSeverity
focal_class.var_name: severity
focal_class.declarator: severityForLegacyType
focal_class.modifier: private final @NotNull
focal_class.original_string: private final @NotNull ValidationMessageSeverity severityForLegacyType;
focal_class.type: ValidationMessageSeverity
focal_class.var_name: severityForLegacyType
focal_class.declarator: jcrInstallerNodePathRegex
focal_class.modifier: private final @NotNull
focal_class.original_string: private final @NotNull Pattern jcrInstallerNodePathRegex;
focal_class.type: Pattern
focal_class.var_name: jcrInstallerNodePathRegex
focal_class.declarator: additionalJcrInstallerFileNodePathRegex
focal_class.modifier: private final @NotNull
focal_class.original_string: private final @NotNull Pattern additionalJcrInstallerFileNodePathRegex;
focal_class.type: Pattern
focal_class.var_name: additionalJcrInstallerFileNodePathRegex
focal_class.declarator: containerValidationContext
focal_class.modifier: private final @Nullable
focal_class.original_string: private final @Nullable ValidationContext containerValidationContext;
focal_class.type: ValidationContext
focal_class.var_name: containerValidationContext
focal_class.declarator: severityForNoPackageType
focal_class.modifier: private final
focal_class.original_string: private final ValidationMessageSeverity severityForNoPackageType;
focal_class.type: ValidationMessageSeverity
focal_class.var_name: severityForNoPackageType
focal_class.declarator: prohibitMutableContent
focal_class.modifier: private final
focal_class.original_string: private final boolean prohibitMutableContent;
focal_class.type: boolean
focal_class.var_name: prohibitMutableContent
focal_class.declarator: prohibitImmutableContent
focal_class.modifier: private final
focal_class.original_string: private final boolean prohibitImmutableContent;
focal_class.type: boolean
focal_class.var_name: prohibitImmutableContent
focal_class.declarator: allowComplexFilterRulesInApplicationPackages
focal_class.modifier: private final
focal_class.original_string: private final boolean allowComplexFilterRulesInApplicationPackages;
focal_class.type: boolean
focal_class.var_name: allowComplexFilterRulesInApplicationPackages
focal_class.declarator: filter
focal_class.modifier: private final @NotNull
focal_class.original_string: private final @NotNull WorkspaceFilter filter;
focal_class.type: WorkspaceFilter
focal_class.var_name: filter
focal_class.declarator: validContainerNodePaths
focal_class.modifier: private
focal_class.original_string: private List<String> validContainerNodePaths;
focal_class.type: List<String>
focal_class.var_name: validContainerNodePaths
focal_class.declarator: potentiallyDisallowedContainerNodes
focal_class.modifier: private
focal_class.original_string: private List<NodeContext> potentiallyDisallowedContainerNodes;
focal_class.type: List<NodeContext>
focal_class.var_name: potentiallyDisallowedContainerNodes
focal_class.file: vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/PackageTypeValidator.java
focal_class.identifier: PackageTypeValidator
focal_class.interfaces: implements NodePathValidator, FilterValidator, PropertiesValidator, MetaInfPathValidator, DocumentViewXmlValidator
focal_class.class_method_signature: PackageTypeValidator.PackageTypeValidator(@NotNull WorkspaceFilter workspaceFilter, @NotNull ValidationMessageSeverity severity,
              @NotNull ValidationMessageSeverity severityForNoPackageType, @NotNull ValidationMessageSeverity severityForLegacyType,
              boolean prohibitMutableContent, boolean prohibitImmutableContent, boolean allowComplexFilterRulesInApplicationPackages,
              @NotNull PackageType type, @NotNull Pattern jcrInstallerNodePathRegex, @NotNull Pattern additionalJcrInstallerFileNodePathRegex,
              @Nullable ValidationContext containerValidationContext)
focal_class.full_signature: public  PackageTypeValidator(@NotNull WorkspaceFilter workspaceFilter, @NotNull ValidationMessageSeverity severity,
              @NotNull ValidationMessageSeverity severityForNoPackageType, @NotNull ValidationMessageSeverity severityForLegacyType,
              boolean prohibitMutableContent, boolean prohibitImmutableContent, boolean allowComplexFilterRulesInApplicationPackages,
              @NotNull PackageType type, @NotNull Pattern jcrInstallerNodePathRegex, @NotNull Pattern additionalJcrInstallerFileNodePathRegex,
              @Nullable ValidationContext containerValidationContext)
focal_class.identifier: PackageTypeValidator
focal_class.modifiers: public
focal_class.parameters: (@NotNull WorkspaceFilter workspaceFilter, @NotNull ValidationMessageSeverity severity,
              @NotNull ValidationMessageSeverity severityForNoPackageType, @NotNull ValidationMessageSeverity severityForLegacyType,
              boolean prohibitMutableContent, boolean prohibitImmutableContent, boolean allowComplexFilterRulesInApplicationPackages,
              @NotNull PackageType type, @NotNull Pattern jcrInstallerNodePathRegex, @NotNull Pattern additionalJcrInstallerFileNodePathRegex,
              @Nullable ValidationContext containerValidationContext)
focal_class.signature:  PackageTypeValidator(@NotNull WorkspaceFilter workspaceFilter, @NotNull ValidationMessageSeverity severity,
              @NotNull ValidationMessageSeverity severityForNoPackageType, @NotNull ValidationMessageSeverity severityForLegacyType,
              boolean prohibitMutableContent, boolean prohibitImmutableContent, boolean allowComplexFilterRulesInApplicationPackages,
              @NotNull PackageType type, @NotNull Pattern jcrInstallerNodePathRegex, @NotNull Pattern additionalJcrInstallerFileNodePathRegex,
              @Nullable ValidationContext containerValidationContext)
focal_class.class_method_signature: PackageTypeValidator.isOsgiBundleOrConfiguration(String nodePath, boolean onlyFile)
focal_class.full_signature:  boolean isOsgiBundleOrConfiguration(String nodePath, boolean onlyFile)
focal_class.identifier: isOsgiBundleOrConfiguration
focal_class.parameters: (String nodePath, boolean onlyFile)
focal_class.return: boolean
focal_class.signature: boolean isOsgiBundleOrConfiguration(String nodePath, boolean onlyFile)
focal_class.class_method_signature: PackageTypeValidator.isSubPackage(String nodePath)
focal_class.full_signature: static boolean isSubPackage(String nodePath)
focal_class.identifier: isSubPackage
focal_class.modifiers: static
focal_class.parameters: (String nodePath)
focal_class.return: boolean
focal_class.signature: boolean isSubPackage(String nodePath)
focal_class.class_method_signature: PackageTypeValidator.isAppContent(String nodePath)
focal_class.full_signature: static boolean isAppContent(String nodePath)
focal_class.identifier: isAppContent
focal_class.modifiers: static
focal_class.parameters: (String nodePath)
focal_class.return: boolean
focal_class.signature: boolean isAppContent(String nodePath)
focal_class.class_method_signature: PackageTypeValidator.done()
focal_class.full_signature: @Override public @Nullable Collection<ValidationMessage> done()
focal_class.identifier: done
focal_class.modifiers: @Override public @Nullable
focal_class.parameters: ()
focal_class.return: Collection<ValidationMessage>
focal_class.signature: Collection<ValidationMessage> done()
focal_class.class_method_signature: PackageTypeValidator.validate(@NotNull NodeContext nodeContext)
focal_class.full_signature: @Override public @Nullable Collection<ValidationMessage> validate(@NotNull NodeContext nodeContext)
focal_class.identifier: validate
focal_class.modifiers: @Override public @Nullable
focal_class.parameters: (@NotNull NodeContext nodeContext)
focal_class.return: Collection<ValidationMessage>
focal_class.signature: Collection<ValidationMessage> validate(@NotNull NodeContext nodeContext)
focal_class.class_method_signature: PackageTypeValidator.validate(@NotNull WorkspaceFilter filter)
focal_class.full_signature: @Override public Collection<ValidationMessage> validate(@NotNull WorkspaceFilter filter)
focal_class.identifier: validate
focal_class.modifiers: @Override public
focal_class.parameters: (@NotNull WorkspaceFilter filter)
focal_class.return: Collection<ValidationMessage>
focal_class.signature: Collection<ValidationMessage> validate(@NotNull WorkspaceFilter filter)
focal_class.class_method_signature: PackageTypeValidator.validate(@NotNull PackageProperties properties)
focal_class.full_signature: @Override public Collection<ValidationMessage> validate(@NotNull PackageProperties properties)
focal_class.identifier: validate
focal_class.modifiers: @Override public
focal_class.parameters: (@NotNull PackageProperties properties)
focal_class.return: Collection<ValidationMessage>
focal_class.signature: Collection<ValidationMessage> validate(@NotNull PackageProperties properties)
focal_class.class_method_signature: PackageTypeValidator.hasIncludesOrExcludes(WorkspaceFilter filter)
focal_class.full_signature: static boolean hasIncludesOrExcludes(WorkspaceFilter filter)
focal_class.identifier: hasIncludesOrExcludes
focal_class.modifiers: static
focal_class.parameters: (WorkspaceFilter filter)
focal_class.return: boolean
focal_class.signature: boolean hasIncludesOrExcludes(WorkspaceFilter filter)
focal_class.class_method_signature: PackageTypeValidator.validateSubPackageType(PackageType packageType, @Nullable PackageType containerPackageType)
focal_class.full_signature: private ValidationMessage validateSubPackageType(PackageType packageType, @Nullable PackageType containerPackageType)
focal_class.identifier: validateSubPackageType
focal_class.modifiers: private
focal_class.parameters: (PackageType packageType, @Nullable PackageType containerPackageType)
focal_class.return: ValidationMessage
focal_class.signature: ValidationMessage validateSubPackageType(PackageType packageType, @Nullable PackageType containerPackageType)
focal_class.class_method_signature: PackageTypeValidator.validateMetaInfPath(@NotNull Path filePath, @NotNull Path basePath, boolean isFolder)
focal_class.full_signature: @Override public Collection<ValidationMessage> validateMetaInfPath(@NotNull Path filePath, @NotNull Path basePath, boolean isFolder)
focal_class.identifier: validateMetaInfPath
focal_class.modifiers: @Override public
focal_class.parameters: (@NotNull Path filePath, @NotNull Path basePath, boolean isFolder)
focal_class.return: Collection<ValidationMessage>
focal_class.signature: Collection<ValidationMessage> validateMetaInfPath(@NotNull Path filePath, @NotNull Path basePath, boolean isFolder)
focal_class.class_method_signature: PackageTypeValidator.validate(@NotNull DocViewNode node, @NotNull String nodePath,
              @NotNull Path filePath, boolean isRoot)
focal_class.full_signature: @Override public @Nullable Collection<ValidationMessage> validate(@NotNull DocViewNode node, @NotNull String nodePath,
              @NotNull Path filePath, boolean isRoot)
focal_class.identifier: validate
focal_class.modifiers: @Override public @Nullable
focal_class.parameters: (@NotNull DocViewNode node, @NotNull String nodePath,
              @NotNull Path filePath, boolean isRoot)
focal_class.return: Collection<ValidationMessage>
focal_class.signature: Collection<ValidationMessage> validate(@NotNull DocViewNode node, @NotNull String nodePath,
              @NotNull Path filePath, boolean isRoot)
focal_method.body: @Override
      public @Nullable Collection<ValidationMessage> validate(@NotNull NodeContext nodeContext) {
          // ignore uncovered nodePaths
          if (!filter.covers(nodeContext.getNodePath())) {
              return null;
          }
          Collection<ValidationMessage> messages = new LinkedList<>();
          switch (type) {
          case CONTENT:
              if (isAppContent(nodeContext.getNodePath())) {
                  messages.add(new ValidationMessage(severity, String.format(MESSAGE_APP_CONTENT, type)));
              }
              if (isOsgiBundleOrConfiguration(nodeContext.getNodePath(), true)) {
                  messages.add(new ValidationMessage(severity, String.format(MESSAGE_OSGI_BUNDLE_OR_CONFIG, type)));
              }
              break;
          case APPLICATION:
              if (!isAppContent(nodeContext.getNodePath())) {
                  messages.add(new ValidationMessage(severity, String.format(MESSAGE_NO_APP_CONTENT_FOUND, type)));
              }
              if (isOsgiBundleOrConfiguration(nodeContext.getNodePath(), true)) {
                  messages.add(new ValidationMessage(severity, String.format(MESSAGE_OSGI_BUNDLE_OR_CONFIG, type)));
              }
              // sub packages are detected via validate(Properties) on the sub package
              break;
          case CONTAINER:
              // sling:OsgiConfig
              if (isOsgiBundleOrConfiguration(nodeContext.getNodePath(), false)) {
                  validContainerNodePaths.add(nodeContext.getNodePath());
              }
              else if (isSubPackage(nodeContext.getNodePath())) {
                  validContainerNodePaths.add(nodeContext.getNodePath());
              } else {
                  // only potentially disallowed, as the node may be a parent of a sub package or osgi bundle, which is allowed as well
                  potentiallyDisallowedContainerNodes.add(nodeContext);
              }
              break;
          case MIXED:
              // no validations currently as most relaxed type
              break;
          }
          return messages;
      }
focal_method.class_method_signature: PackageTypeValidator.validate(@NotNull NodeContext nodeContext)
focal_method.full_signature: @Override public @Nullable Collection<ValidationMessage> validate(@NotNull NodeContext nodeContext)
focal_method.identifier: validate
focal_method.invocations: covers getNodePath isAppContent getNodePath add format isOsgiBundleOrConfiguration getNodePath add format isAppContent getNodePath add format isOsgiBundleOrConfiguration getNodePath add format isOsgiBundleOrConfiguration getNodePath add getNodePath isSubPackage getNodePath add getNodePath add
focal_method.modifiers: @Override public @Nullable
focal_method.parameters: (@NotNull NodeContext nodeContext)
focal_method.return: Collection<ValidationMessage>
focal_method.signature: Collection<ValidationMessage> validate(@NotNull NodeContext nodeContext)