bug 353495 - NPE in JDTPackage constructor for default packages - fix from Dmitry
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/JavaPackageInfoResourceModelProvider.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/JavaPackageInfoResourceModelProvider.java
index 82042f5..b6d64b4 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/JavaPackageInfoResourceModelProvider.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/JavaPackageInfoResourceModelProvider.java
@@ -11,10 +11,13 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jpt.common.core.JptCommonCorePlugin;
import org.eclipse.jpt.jaxb.core.JaxbProject;
import org.eclipse.jpt.jaxb.core.JaxbResourceModelProvider;
+import org.eclipse.jpt.jaxb.core.JptJaxbCorePlugin;
import org.eclipse.jpt.jaxb.core.internal.resource.java.source.SourcePackageInfoCompilationUnit;
import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceCompilationUnit;
@@ -46,12 +49,23 @@
}
public JavaResourceCompilationUnit buildResourceModel(JaxbProject jaxbProject, IFile file) {
- return new SourcePackageInfoCompilationUnit(
- JavaCore.createCompilationUnitFrom(file),
- jaxbProject.getPlatform().getAnnotationProvider(),
- jaxbProject.getPlatform().getAnnotationEditFormatter(),
- jaxbProject.getModifySharedDocumentCommandExecutor()
- );
+ ICompilationUnit compilationUnit = JavaCore.createCompilationUnitFrom(file);
+ try {
+ if (compilationUnit.getPackageDeclarations().length > 0){
+ return new SourcePackageInfoCompilationUnit(
+ compilationUnit,
+ jaxbProject.getPlatform().getAnnotationProvider(),
+ jaxbProject.getPlatform().getAnnotationEditFormatter(),
+ jaxbProject.getModifySharedDocumentCommandExecutor());
+ }
+ //ignore package-info placed in default package as
+ //it doesn't have package declaration and can't hold annotations
+ return null;
+ } catch (JavaModelException e) {
+ JptJaxbCorePlugin.log(e);
+ // Ignore -- project is in a bad state. This will get recalled if necessary
+ return null;
+ }
}
}
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/JavaPackageInfoResourceModelProvider.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/JavaPackageInfoResourceModelProvider.java
index 4cde45e..f132486 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/JavaPackageInfoResourceModelProvider.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/JavaPackageInfoResourceModelProvider.java
@@ -11,10 +11,13 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jpt.common.core.JptCommonCorePlugin;
import org.eclipse.jpt.jpa.core.JpaProject;
import org.eclipse.jpt.jpa.core.JpaResourceModelProvider;
+import org.eclipse.jpt.jpa.core.JptJpaCorePlugin;
import org.eclipse.jpt.jpa.core.internal.resource.java.source.SourcePackageInfoCompilationUnit;
import org.eclipse.jpt.jpa.core.resource.java.JavaResourceCompilationUnit;
@@ -46,12 +49,23 @@
}
public JavaResourceCompilationUnit buildResourceModel(JpaProject jpaProject, IFile file) {
- return new SourcePackageInfoCompilationUnit(
- JavaCore.createCompilationUnitFrom(file),
- jpaProject.getJpaPlatform().getAnnotationProvider(),
- jpaProject.getJpaPlatform().getAnnotationEditFormatter(),
- jpaProject.getModifySharedDocumentCommandExecutor()
- );
+ ICompilationUnit compilationUnit = JavaCore.createCompilationUnitFrom(file);
+ try {
+ if (compilationUnit.getPackageDeclarations().length > 0){
+ return new SourcePackageInfoCompilationUnit(
+ compilationUnit,
+ jpaProject.getJpaPlatform().getAnnotationProvider(),
+ jpaProject.getJpaPlatform().getAnnotationEditFormatter(),
+ jpaProject.getModifySharedDocumentCommandExecutor());
+ }
+ //ignore package-info placed in default package as
+ //it doesn't have package declaration and can't hold annotations
+ return null;
+ } catch (JavaModelException e) {
+ JptJpaCorePlugin.log(e);
+ // Ignore -- project is in a bad state. This will get recalled if necessary
+ return null;
+ }
}
}