# Eclipse Quickfix JDT ENUM Constant



## xplox (30. Mai 2014)

Hallo,

ich bin gerade dabei im Rahmen der Entwicklung eines EclipsePlugin's Quickfixe zu programmieren. 
Das klappt auch alles soweit ganz gut. Allerdings bin ich dabei jetzt auf ein Problem gestoßen, an dem ich mir gerade die Zähne ausbeiße.

Und zwar möchte ich den Standard-Eclipse Quickfix zum Anlegen von ENUM Constanten um eine Funktionalität zur Eingabe von Kommentartexten erweitern. Beispiel:


```
public class Test
{
	public Test()
	{
		new A().setID(ID.A),
		new B().setID(ID.[WR]Z[/WR])
	}

	public static enum ID
	{
		/** Comment A */
		A, 
		B,
		C;
	}

}
```

An Stelle ID.Z erscheint jetzt der Quickfix und ich kann ihn anwählen. Wenn ich jetzt versuche mir über JDT zugriff auf die Klasse/Enum ID zu verschaffen, klappt das auch. Ich kann mir sogar die bisherigen Felder anzeigen lassen. 
Allerdings führt der Aufruf von IType.createField("Z", null, false, new NullProgressMonitor()) immer wieder zu einem Fehler 


```
/*
 * 
 * @see org.eclipse.jface.text.contentassist.ICompletionProposal#apply(org.eclipse.jface.text.IDocument)
 */
@Override
public void apply(IDocument document)
{
	IType typeClass = m_context.getCompilationUnit().getType(typeName);
	IType[] types = typeClass.getTypes();
	for(IType type : types)
	{
		try
		{
			typeClass.createType("\n/**\n* ID ENUM */\n" + "public static enum "
				+ "ID" + " implements IID {\n}\n", null, false, new NullProgressMonitor());

		} catch(JavaModelException e){
			/** */
		}
				
		if(type.isEnum() && type.getElementName().toUpperCase().equals("ID"))
		{
			// neues ENUM Feld anlegen
			boolean contains = false;
			for(IField field : type.getFields())
			{
				if(field.getElementName().equals(m_elementName))
					contains = true;
			}
			if(!contains)
				type.createField(m_elementName, null, false, new NullProgressMonitor());

//	type.createType("class " + m_elementName.toUpperCase() + "(){}", null, false, null);
//	type.createField("int TEST = 0;", null, false, null);
//	type.createMethod("public void getString(){ System.out.println(\"Test\"); }", null, false, null);
		}
	}
}
```


```
Java Model Exception: Java Model Status [Invalid contents specified]
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:784)
	at org.eclipse.jdt.internal.core.SourceType.createField(SourceType.java:145)
...
```

Hat von euch jemand einen Rat für mich, oder kann mir sagen an was es liegt, wieso ich zwar Methoden innerhalb des nested Enum erstellen kann, auch Felder a la private int test; aber keine ENUM Constante. Welche Methode muss ich hierfür verwenden?

Danke


----------

