added tests for jaxb GenericRootContextNode persistenceClasses
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java
index ff20203..5108419 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java
@@ -665,7 +665,7 @@
public JavaResourcePackage getAnnotatedJavaResourcePackage(String packageName) {
JavaResourcePackage jrp = getJavaResourcePackage(packageName);
- return (jrp.isAnnotated()) ? jrp : null;
+ return (jrp != null && jrp.isAnnotated()) ? jrp : null;
}
/**
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericRootContextNode.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericRootContextNode.java
index e486200..1d7c712 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericRootContextNode.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericRootContextNode.java
@@ -103,6 +103,7 @@
final Set<String> packagesToRemove = CollectionTools.set(this.packages.keySet());
final Set<String> persistentClassesToBuild = CollectionTools.set(initialPersistentClasses);
final Set<String> persistentClassesToUpdate = CollectionTools.<String>set();
+ final Set<String> persistentClassesToRemove = CollectionTools.set(this.persistentClasses.keySet());
for (String packageToBuild : packagesToBuild) {
if (this.packages.containsKey(packageToBuild)) {
@@ -117,6 +118,7 @@
for (String classToBuild : persistentClassesToBuild) {
if (this.persistentClasses.containsKey(classToBuild)) {
persistentClassesToUpdate.add(classToBuild);
+ persistentClassesToRemove.remove(classToBuild);
}
else {
this.addPersistentClass(this.buildPersistentClass(classToBuild));
@@ -134,6 +136,10 @@
for (String packageToRemove : packagesToRemove) {
this.removePackage(packageToRemove);
}
+
+ for (String persistentClassToRemove : persistentClassesToRemove) {
+ this.removePersistentClass(persistentClassToRemove);
+ }
}
/*
@@ -174,7 +180,7 @@
}) {
@Override
protected String transform(JavaResourceType o) {
- return o.getName();
+ return o.getQualifiedName();
}
});
}
@@ -257,11 +263,15 @@
}
protected void removePersistentClass(JaxbPersistentClass persistentClass) {
- if (! this.persistentClasses.containsKey(persistentClass.getName())) {
+ this.removePersistentClass(persistentClass.getName());
+ }
+
+ protected void removePersistentClass(String persistentClassName) {
+ if (! this.persistentClasses.containsKey(persistentClassName)) {
throw new IllegalArgumentException("No class with that name exists."); //$NON-NLS-1$
}
- this.persistentClasses.remove(persistentClass.getName());
- fireItemRemoved(PERSISTENT_CLASSES_COLLECTION, persistentClass);
+ JaxbPersistentClass removedPersistentClass = this.persistentClasses.remove(persistentClassName);
+ fireItemRemoved(PERSISTENT_CLASSES_COLLECTION, removedPersistentClass);
}
protected JaxbPersistentClass buildPersistentClass(String className) {
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/GenericRootContextNodeTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/GenericRootContextNodeTests.java
index ba8d5c1..8f5150e 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/GenericRootContextNodeTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.core.tests/src/org/eclipse/jpt/jaxb/core/tests/internal/context/GenericRootContextNodeTests.java
@@ -17,9 +17,11 @@
import org.eclipse.jpt.core.utility.jdt.Member;
import org.eclipse.jpt.core.utility.jdt.ModifiedDeclaration;
import org.eclipse.jpt.jaxb.core.context.JaxbPackage;
+import org.eclipse.jpt.jaxb.core.context.JaxbPersistentClass;
import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage;
-import org.eclipse.jpt.jaxb.core.tests.internal.context.JaxbContextModelTestCase;
+import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType;
+import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
@SuppressWarnings("nls")
@@ -40,6 +42,23 @@
return createTestPackageInfo(packageName);
}
+ private ICompilationUnit createTypeWithXmlType() throws Exception {
+ return this.createTestType(new DefaultAnnotationWriter() {
+ @Override
+ public Iterator<String> imports() {
+ return new ArrayIterator<String>(JAXB.XML_TYPE);
+ }
+ @Override
+ public void appendTypeAnnotationTo(StringBuilder sb) {
+ sb.append("@XmlType");
+ }
+ });
+ }
+
+ private ICompilationUnit createUnannotatedTestTypeNamed(String typeName) throws Exception {
+ return this.createTestType(PACKAGE_NAME, typeName + ".java", typeName, new DefaultAnnotationWriter());
+ }
+
public void testGetPackages() throws Exception {
this.createPackageInfoWithAccessorOrder();
Iterator<JaxbPackage> packages = this.getRootContextNode().getPackages().iterator();
@@ -91,6 +110,48 @@
this.removeAnnotation(declaration, JAXB.XML_ACCESSOR_TYPE);
}
+ public void testGetPersistentClasses() throws Exception {
+ this.createTypeWithXmlType();
+ Iterator<JaxbPersistentClass> persistentClasses = this.getRootContextNode().getPersistentClasses().iterator();
+ assertEquals(1, this.getRootContextNode().getPersistentClassesSize());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, persistentClasses.next().getName());
+ assertFalse(persistentClasses.hasNext());
+
+ //add an unannotated class and make sure it's not added to the root context node
+ this.createUnannotatedTestTypeNamed("Foo");
+ persistentClasses = this.getRootContextNode().getPersistentClasses().iterator();
+ assertEquals(1, this.getRootContextNode().getPersistentClassesSize());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, persistentClasses.next().getName());
+ assertFalse(persistentClasses.hasNext());
+
+ //annotate the class with @XmlType and test it's added to the root context node
+ JavaResourceType fooResourcePackage = getJaxbProject().getJavaResourceType("test.Foo");
+ AnnotatedElement annotatedElement = this.annotatedElement(fooResourcePackage);
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericRootContextNodeTests.this.addMarkerAnnotation(declaration.getDeclaration(), JAXB.XML_TYPE);
+ }
+ });
+
+ persistentClasses = this.getRootContextNode().getPersistentClasses().iterator();
+ assertEquals(2, this.getRootContextNode().getPersistentClassesSize());
+ assertEquals("test.Foo", persistentClasses.next().getName());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, persistentClasses.next().getName());
+ assertFalse(persistentClasses.hasNext());
+
+ //remove the annotation from the package-info.java and test it's removed from the root context node
+ annotatedElement.edit(new Member.Editor() {
+ public void edit(ModifiedDeclaration declaration) {
+ GenericRootContextNodeTests.this.removeAnnotation(declaration, JAXB.XML_TYPE);
+ }
+ });
+
+ persistentClasses = this.getRootContextNode().getPersistentClasses().iterator();
+ assertEquals(1, this.getRootContextNode().getPersistentClassesSize());
+ assertEquals(FULLY_QUALIFIED_TYPE_NAME, persistentClasses.next().getName());
+ assertFalse(persistentClasses.hasNext());
+ }
+
// public void testGetXmlSchemaTypesSize() throws Exception {
// this.createPackageInfoWithAccessorOrder();
// JaxbPackageInfo contextPackageInfo = CollectionTools.get(getRootContextNode().getPackages(), 0).getPackageInfo();