// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ConversionException.java
// public final class ConversionException extends Exception
// {
// 	public ConversionException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public ConversionException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ElementConverter.java
// public interface ElementConverter<E extends Element>
// {
// 	@NotNull ElementConverter<Element> UnknownElementConverterInstance = new ElementConverter<Element>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final Element element) throws ConversionException
// 		{
// 			throw new ConversionException(format(ENGLISH, "Do not know how to convert elements like '%1$s'", element));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<PackageElement> PackageElementIgnoredElementConverterInstance = new ElementConverter<PackageElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final PackageElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<TypeElement> TypeElementIgnoredElementConverterInstance = new ElementConverter<TypeElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final TypeElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	void convert(@NotNull final Warnings warnings, @NotNull final E element) throws ConversionException;
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/javaModules/FatalCompilationException.java
// public final class FatalCompilationException extends Exception
// {
// 	public FatalCompilationException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public FatalCompilationException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/warnings/Warnings.java
// public interface Warnings extends DiagnosticListener<JavaFileObject>
// {
// 	void fatal(@NotNull final FatalCompilationException cause);
// 
// 	void warn(@NotNull final String warning);
// 
// 	void information(@NotNull final String information);
// }


import com.stormmq.java2c.transpiler.conversion.elementConverters.ConversionException;
import com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter;
import com.stormmq.java2c.transpiler.javaModules.FatalCompilationException;
import com.stormmq.java2c.transpiler.warnings.Warnings;
import com.sun.source.tree.Tree;
import com.sun.source.util.TreePath;
import com.sun.source.util.Trees;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter.UnknownElementConverterInstance;
import static javax.lang.model.element.ElementKind.*;
package com.stormmq.java2c.transpiler.annotationProcessors;




// https://today.java.net/pub/a/today/2008/04/10/source-code-analysis-using-java-6-compiler-apis.html#accessing-the-abstract-syntax-tree-the-compiler-tree-api
public final class CodeTreeAnalyzerProcessor extends AbstractTreeAnalyzerProcessor
{
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ConversionException.java
// public final class ConversionException extends Exception
// {
// 	public ConversionException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public ConversionException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ElementConverter.java
// public interface ElementConverter<E extends Element>
// {
// 	@NotNull ElementConverter<Element> UnknownElementConverterInstance = new ElementConverter<Element>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final Element element) throws ConversionException
// 		{
// 			throw new ConversionException(format(ENGLISH, "Do not know how to convert elements like '%1$s'", element));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<PackageElement> PackageElementIgnoredElementConverterInstance = new ElementConverter<PackageElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final PackageElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<TypeElement> TypeElementIgnoredElementConverterInstance = new ElementConverter<TypeElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final TypeElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	void convert(@NotNull final Warnings warnings, @NotNull final E element) throws ConversionException;
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/javaModules/FatalCompilationException.java
// public final class FatalCompilationException extends Exception
// {
// 	public FatalCompilationException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public FatalCompilationException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/warnings/Warnings.java
// public interface Warnings extends DiagnosticListener<JavaFileObject>
// {
// 	void fatal(@NotNull final FatalCompilationException cause);
// 
// 	void warn(@NotNull final String warning);
// 
// 	void information(@NotNull final String information);
// }


// Path: source/transpiler/com/stormmq/java2c/transpiler/annotationProcessors/CodeTreeAnalyzerProcessor.java
import com.stormmq.java2c.transpiler.conversion.elementConverters.ConversionException;
import com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter;
import com.stormmq.java2c.transpiler.javaModules.FatalCompilationException;
import com.stormmq.java2c.transpiler.warnings.Warnings;
import com.sun.source.tree.Tree;
import com.sun.source.util.TreePath;
import com.sun.source.util.Trees;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter.UnknownElementConverterInstance;
import static javax.lang.model.element.ElementKind.*;

package com.stormmq.java2c.transpiler.annotationProcessors;




// https://today.java.net/pub/a/today/2008/04/10/source-code-analysis-using-java-6-compiler-apis.html#accessing-the-abstract-syntax-tree-the-compiler-tree-api
public final class CodeTreeAnalyzerProcessor extends AbstractTreeAnalyzerProcessor
{
	@NotNull private final Warnings warnings;