[244419] label parser customization: support for boilerplate custom parser implementation generation; separate package for implementations; better class names of generated parsers
diff --git a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/HandcodedImplTest.java b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/HandcodedImplTest.java
index 8c70844..54ab056 100644
--- a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/HandcodedImplTest.java
+++ b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/HandcodedImplTest.java
@@ -889,6 +889,9 @@
 		checkPackageName(state, "PackageNames:parsers", genDiagram.getParsersPackageName());
 		checkPackageName(state, "PackageNames:preferences", genDiagram.getPreferencesPackageName());
 		checkPackageName(state, "PackageNames:notationViewFactories", genDiagram.getNotationViewFactoriesPackageName());
+		if (genDiagram.getEditorGen().getLabelParsers() != null) {
+			checkPackageName(state, "GenParsers:impl", genDiagram.getEditorGen().getLabelParsers().getImplPackageName());
+		}
 		GenApplication application = genDiagram.getEditorGen().getApplication();
 		if (application != null) {
 			checkPackageName(state, "GenApplication:application", application.getPackageName());
diff --git a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/RuntimeCompilationTest.java b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/RuntimeCompilationTest.java
index cf2d076..a4bffba 100644
--- a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/RuntimeCompilationTest.java
+++ b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/RuntimeCompilationTest.java
@@ -24,6 +24,7 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.gmf.codegen.gmfgen.CreateShortcutAction;
+import org.eclipse.gmf.codegen.gmfgen.CustomParser;
 import org.eclipse.gmf.codegen.gmfgen.DynamicModelAccess;
 import org.eclipse.gmf.codegen.gmfgen.GMFGenFactory;
 import org.eclipse.gmf.codegen.gmfgen.GenCommandAction;
@@ -339,4 +340,25 @@
 		assertTrue(methodText.indexOf(p1.getDefaultValue()) != -1);
 		assertTrue(methodText.indexOf(p2.getName()) == -1);
 	}
+
+	// check CustomParser#isGenerateBoilerplate == true emits java class 
+	public void testCustomParsers() throws Exception {
+		DiaGenSource s = createLibraryGen(false);
+		final GenEditorGenerator gd = s.getGenDiagram().getEditorGen();
+		CustomParser cp1 = GMFGenFactory.eINSTANCE.createCustomParser();
+		cp1.setQualifiedName(gd.getLabelParsers().getImplPackageName() + "CustomParserOne");
+		CustomParser cp2 = GMFGenFactory.eINSTANCE.createCustomParser();
+		cp2.setQualifiedName(gd.getLabelParsers().getImplPackageName() + "CustomParserTwo");
+		cp2.setGenerateBoilerplate(true);
+		gd.getLabelParsers().getImplementations().add(cp1);
+		gd.getLabelParsers().getImplementations().add(cp2);
+		//
+		generateAndCompile(s);
+		//
+		IProject generatedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(gd.getPlugin().getID());
+		IFile file_cp1 = generatedProject.getFile("/src/" + cp1.getQualifiedName().replace('.', '/') + ".java");
+		IFile file_cp2 = generatedProject.getFile("/src/" + cp2.getQualifiedName().replace('.', '/') + ".java");
+		assertFalse(file_cp1.exists());
+		assertTrue(file_cp2.exists());
+	}
 }