Home / Function/ generateMetadata() — netty Function Reference

generateMetadata() — netty Function Reference

Architecture documentation for the generateMetadata() function in ChannelHandlerMetadataUtil.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  551c0cf8_9074_2186_24dc_6d297424d67b["generateMetadata()"]
  746b9c8e_354b_ecaf_85dc_a1e83631fad5["ChannelHandlerMetadataUtil"]
  551c0cf8_9074_2186_24dc_6d297424d67b -->|defined in| 746b9c8e_354b_ecaf_85dc_a1e83631fad5
  4af8bb15_8b41_7e81_dfb7_5f30251ffaf2["findChannelHandlerSubclasses()"]
  551c0cf8_9074_2186_24dc_6d297424d67b -->|calls| 4af8bb15_8b41_7e81_dfb7_5f30251ffaf2
  fa51f88b_c104_04f8_9dd3_f303e401e6fe["HandlerMetadata()"]
  551c0cf8_9074_2186_24dc_6d297424d67b -->|calls| fa51f88b_c104_04f8_9dd3_f303e401e6fe
  75802313_9f6f_fac0_6148_0bfe7ad40b93["Condition()"]
  551c0cf8_9074_2186_24dc_6d297424d67b -->|calls| 75802313_9f6f_fac0_6148_0bfe7ad40b93
  style 551c0cf8_9074_2186_24dc_6d297424d67b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

transport/src/test/java/io/netty/nativeimage/ChannelHandlerMetadataUtil.java lines 58–128

    public static void generateMetadata(String... packageNames) {
        String projectGroupId = System.getProperty("nativeImage.handlerMetadataGroupId");
        String projectArtifactId = System.getProperty("nativeimage.handlerMetadataArtifactId");

        Set<Class<? extends ChannelHandler>> subtypes = findChannelHandlerSubclasses(packageNames);

        if (Arrays.asList(packageNames).contains("io.netty.channel")) {
            // We want the metadata for the ChannelHandler itself too
            subtypes.add(ChannelHandler.class);
        }

        Set<HandlerMetadata> handlerMetadata = new HashSet<HandlerMetadata>();
        for (Class<?> subtype : subtypes) {
            handlerMetadata.add(new HandlerMetadata(subtype.getName(), new Condition(subtype.getName()), true));
        }

        String projectRelativeResourcePath = "src/main/resources/META-INF/native-image/" + projectGroupId + "/" +
                projectArtifactId + "/generated/handlers/reflect-config.json";
        File existingMetadataFile = new File(projectRelativeResourcePath);
        String existingMetadataPath = existingMetadataFile.getAbsolutePath();
        if (!existingMetadataFile.exists()) {
            if (handlerMetadata.size() == 0) {
                return;
            }

            String message = "Native Image reflection metadata is required for handlers in this project. " +
                    "This metadata was not found under " +
                    existingMetadataPath +
                    "\nPlease create this file with the following content: \n" +
                    getMetadataJsonString(handlerMetadata) +
                    "\n";
            Assertions.fail(message);
        }

        List<HandlerMetadata> existingMetadata = null;
        try {
            FileReader reader = new FileReader(existingMetadataFile);
            existingMetadata = gson.fromJson(reader, HANDLER_METADATA_LIST_TYPE);
        } catch (IOException e) {
            Assertions.fail("Failed to open the native-image metadata file at: " + existingMetadataPath, e);
        }

        Set<HandlerMetadata> newMetadata = new HashSet<HandlerMetadata>(handlerMetadata);
        newMetadata.removeAll(existingMetadata);

        Set<HandlerMetadata> removedMetadata = new HashSet<HandlerMetadata>(existingMetadata);
        removedMetadata.removeAll(handlerMetadata);

        if (!newMetadata.isEmpty() || !removedMetadata.isEmpty()) {
            StringBuilder builder = new StringBuilder();
            builder.append("In the native-image handler metadata file at ")
                    .append(existingMetadataPath)
                    .append("\n");

            if (!newMetadata.isEmpty()) {
                builder.append("The following new metadata must be added:\n\n")
                        .append(getMetadataJsonString(newMetadata))
                        .append("\n\n");
            }
            if (!removedMetadata.isEmpty()) {
                builder.append("The following metadata must be removed:\n\n")
                        .append(getMetadataJsonString(removedMetadata))
                        .append("\n\n");
            }

            builder.append("Expected metadata file contents:\n\n")
                    .append(getMetadataJsonString(handlerMetadata))
                    .append("\n");
            Assertions.fail(builder.toString());
        }
    }

Domain

Subdomains

Frequently Asked Questions

What does generateMetadata() do?
generateMetadata() is a function in the netty codebase, defined in transport/src/test/java/io/netty/nativeimage/ChannelHandlerMetadataUtil.java.
Where is generateMetadata() defined?
generateMetadata() is defined in transport/src/test/java/io/netty/nativeimage/ChannelHandlerMetadataUtil.java at line 58.
What does generateMetadata() call?
generateMetadata() calls 3 function(s): Condition, HandlerMetadata, findChannelHandlerSubclasses.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free