# Flow Obfuscation

```java
// Given Input
package dev.sim0n.evaluator.test.impl.annotation;

import dev.sim0n.evaluator.Main;
import dev.sim0n.evaluator.test.Test;
import dev.sim0n.evaluator.test.impl.annotation.TestAnnotation;

@TestAnnotation(string="Test", doubleValue=0.36, intValue=36)
public class AnnotationTest
implements Test {
    public void handle() {
        Class<AnnotationTest> clazz = AnnotationTest.class;
        if (clazz.isAnnotationPresent(TestAnnotation.class)) {
            TestAnnotation annotation = (TestAnnotation)clazz.getAnnotation(TestAnnotation.class);
            String value = annotation.string();
            double doubleValue = annotation.doubleValue();
            int intValue = annotation.intValue();
            Main.LOG.println("Testing annotations");
            Main.LOG.println(String.format((String)"%s, %s, %d", (Object[])new Object[]{value, doubleValue, intValue}));
        }
    }
}
```

```java
// Output
package dev.sim0n.evaluator.test.impl.annotation;

import dev.sim0n.evaluator.Main;
import dev.sim0n.evaluator.test.Test;
import dev.sim0n.evaluator.test.impl.annotation.TestAnnotation;

@TestAnnotation(string="Test", doubleValue=0.36, intValue=36)
public class AnnotationTest
implements Test {
    public static final int ff;
    public static final boolean fg = false;

    /*
     * WARNING - void declaration
     */
    public void handle() {
        Class<TestAnnotation> clazz;
        Class<AnnotationTest> clazz2;
        block8: {
            clazz2 = AnnotationTest.class;
            try {
                clazz = TestAnnotation.class;
                break block8;
            }
            catch (RuntimeException runtimeException) {
                // empty catch block
            }
            while (true) {
                // Infinite loop
            }
        }
        if (clazz2.isAnnotationPresent(clazz)) {
            Double d;
            void annotation;
            try {
                TestAnnotation testAnnotation = (TestAnnotation)clazz2.getAnnotation(TestAnnotation.class);
            }
            catch (IllegalStateException illegalStateException) {
                illegalStateException.printStackTrace();
                throw illegalStateException;
            }
            String value = annotation.string();
            double doubleValue = annotation.doubleValue();
            int intValue = annotation.intValue();
            Main.LOG.println("Testing annotations");
            Object[] objectArray = new Object[3];
            objectArray[0] = value;
            try {
                d = doubleValue;
            }
            catch (IllegalStateException illegalStateException) {
                illegalStateException.printStackTrace();
                throw illegalStateException;
            }
            objectArray[1] = d;
            objectArray[2] = intValue;
            Main.LOG.println(String.format((String)"%s, %s, %d", (Object[])objectArray));
        }
    }
}

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mdma.dev/transformers/flow-obfuscation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
