// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/gccAttributes/GccAttribute.java
// public final class GccAttribute<N extends Enum<N> & AttributeName> implements Writable
// {
// 	@NotNull private final N name;
// 	@NotNull private final GccAttributeParameter[] gccAttributeParameters;
// 
// 	public GccAttribute(@NotNull final N name, @NotNull GccAttributeParameter... gccAttributeParameters)
// 	{
// 		this.name = name;
// 		this.gccAttributeParameters = gccAttributeParameters;
// 	}
// 
// 	public void write(@NotNull final Writer writer) throws IOException
// 	{
// 		writer.write(name.name());
// 		if (gccAttributeParameters.length != 0)
// 		{
// 			writer.write(" (");
// 			boolean afterFirst = false;
// 			for (GccAttributeParameter gccAttributeParameter : gccAttributeParameters)
// 			{
// 				if (afterFirst)
// 				{
// 					writer.write(", ");
// 				}
// 				else
// 				{
// 					afterFirst = true;
// 				}
// 				gccAttributeParameter.write(writer);
// 			}
// 			writer.write(')');
// 		}
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/gccAttributes/GccAttributeParameter.java
// public final class GccAttributeParameter implements Writable
// {
// 	@NotNull private final String value;
// 
// 	public GccAttributeParameter(@NotNull final String value)
// 	{
// 		this.value = '"' + value + '"';
// 	}
// 
// 	public GccAttributeParameter(final int value)
// 	{
// 		assert value >= 0;
// 		this.value = Integer.toString(value);
// 	}
// 
// 	public void write(@NotNull final Writer writer) throws IOException
// 	{
// 		writer.write(value);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/gccAttributes/variable/GccVariableAttributeName.java
// public enum GccVariableAttributeName implements AttributeName
// {
// 	aligned,
// 	cleanup,
// 	common,
// 	nocommon,
// 	deprecated,
// 	mode,
// 	packed,
// 	section,
// 	tls_model,
// 	unused,
// 	used,
// 	vector_size,
// 	weak,
// 	;
// }
// 
// 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);
// 	}
// }


import com.stormmq.java2c.model.variables.section;
import com.stormmq.java2c.transpiler.conversion.c.gccAttributes.GccAttribute;
import com.stormmq.java2c.transpiler.conversion.c.gccAttributes.GccAttributeParameter;
import com.stormmq.java2c.transpiler.conversion.c.gccAttributes.variable.GccVariableAttributeName;
import com.stormmq.java2c.transpiler.conversion.elementConverters.ConversionException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.lang.model.element.VariableElement;
import java.util.Collection;
package com.stormmq.java2c.transpiler.conversion.elementConverters.fieldAttributesProcessors;



public final class SectionFieldAttributesProcessor extends AbstractFieldAttributesProcessor
{
	@NotNull public static final FieldAttributesProcessor Section = new SectionFieldAttributesProcessor();

	private SectionFieldAttributesProcessor()
	{
	}

	@Override
	public void processField(@NotNull final Collection<GccAttribute<GccVariableAttributeName>> gccAttributes, @NotNull final VariableElement field) throws ConversionException
	{
		@Nullable final section section = field.getAnnotation(section.class);
		if (section == null)
		{
			return;
		}

		@Nullable final String sectionName = section.value();
		if (sectionName == null)
		{
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/gccAttributes/GccAttribute.java
// public final class GccAttribute<N extends Enum<N> & AttributeName> implements Writable
// {
// 	@NotNull private final N name;
// 	@NotNull private final GccAttributeParameter[] gccAttributeParameters;
// 
// 	public GccAttribute(@NotNull final N name, @NotNull GccAttributeParameter... gccAttributeParameters)
// 	{
// 		this.name = name;
// 		this.gccAttributeParameters = gccAttributeParameters;
// 	}
// 
// 	public void write(@NotNull final Writer writer) throws IOException
// 	{
// 		writer.write(name.name());
// 		if (gccAttributeParameters.length != 0)
// 		{
// 			writer.write(" (");
// 			boolean afterFirst = false;
// 			for (GccAttributeParameter gccAttributeParameter : gccAttributeParameters)
// 			{
// 				if (afterFirst)
// 				{
// 					writer.write(", ");
// 				}
// 				else
// 				{
// 					afterFirst = true;
// 				}
// 				gccAttributeParameter.write(writer);
// 			}
// 			writer.write(')');
// 		}
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/gccAttributes/GccAttributeParameter.java
// public final class GccAttributeParameter implements Writable
// {
// 	@NotNull private final String value;
// 
// 	public GccAttributeParameter(@NotNull final String value)
// 	{
// 		this.value = '"' + value + '"';
// 	}
// 
// 	public GccAttributeParameter(final int value)
// 	{
// 		assert value >= 0;
// 		this.value = Integer.toString(value);
// 	}
// 
// 	public void write(@NotNull final Writer writer) throws IOException
// 	{
// 		writer.write(value);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/gccAttributes/variable/GccVariableAttributeName.java
// public enum GccVariableAttributeName implements AttributeName
// {
// 	aligned,
// 	cleanup,
// 	common,
// 	nocommon,
// 	deprecated,
// 	mode,
// 	packed,
// 	section,
// 	tls_model,
// 	unused,
// 	used,
// 	vector_size,
// 	weak,
// 	;
// }
// 
// 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/fieldAttributesProcessors/SectionFieldAttributesProcessor.java
import com.stormmq.java2c.model.variables.section;
import com.stormmq.java2c.transpiler.conversion.c.gccAttributes.GccAttribute;
import com.stormmq.java2c.transpiler.conversion.c.gccAttributes.GccAttributeParameter;
import com.stormmq.java2c.transpiler.conversion.c.gccAttributes.variable.GccVariableAttributeName;
import com.stormmq.java2c.transpiler.conversion.elementConverters.ConversionException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.lang.model.element.VariableElement;
import java.util.Collection;

package com.stormmq.java2c.transpiler.conversion.elementConverters.fieldAttributesProcessors;



public final class SectionFieldAttributesProcessor extends AbstractFieldAttributesProcessor
{
	@NotNull public static final FieldAttributesProcessor Section = new SectionFieldAttributesProcessor();

	private SectionFieldAttributesProcessor()
	{
	}

	@Override
	public void processField(@NotNull final Collection<GccAttribute<GccVariableAttributeName>> gccAttributes, @NotNull final VariableElement field) throws ConversionException
	{
		@Nullable final section section = field.getAnnotation(section.class);
		if (section == null)
		{
			return;
		}

		@Nullable final String sectionName = section.value();
		if (sectionName == null)
		{
			throw new ConversionException("@section must specify a section name (value)");