[345667] NPE when creating a servlet if created in a source folder with java build path exclusion patters
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html b/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html index 9dc1682..be6108e 100644 --- a/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html +++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html
@@ -14,6 +14,7 @@ <h2>org.eclipse.jst.enterprise_ui.feature</h2> <p>Bug <a href='https://bugs.eclipse.org/344733'>344733</a>. [JAX-RS] Upon selection, the JAX-RS Configuration page is blank when Project Facets page has unapplied changes</p> +<p>Bug <a href='https://bugs.eclipse.org/345667'>345667</a>. NPE when creating a servlet if created in a source folder with java build path exclusion patters</p> </body> </html> \ No newline at end of file
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties index d1b4e67..4500af7 100644 --- a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties +++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties
@@ -29,6 +29,7 @@ The fixes are described in the following bugzilla entries:\n\ \n\ Bug https://bugs.eclipse.org/344733 [JAX-RS] Upon selection, the JAX-RS Configuration page is blank when Project Facets page has unapplied changes\n\ +Bug https://bugs.eclipse.org/345667 NPE when creating a servlet if created in a source folder with java build path exclusion patters\n\ \n\ # "copyright" property - text of the "Feature Update Copyright"
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml index f356799..69fead2 100644 --- a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml +++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml
@@ -22,6 +22,13 @@ </requires> <plugin + id="org.eclipse.jst.servlet.ui" + download-size="0" + install-size="0" + version="0.0.0" + unpack="false"/> + + <plugin id="org.eclipse.jst.ws.jaxrs.ui" download-size="0" install-size="0"
diff --git a/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF index 7805cdf..2b256b9 100644 --- a/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.jst.servlet.ui; singleton:=true -Bundle-Version: 1.1.405.qualifier +Bundle-Version: 1.1.406.qualifier Bundle-Activator: org.eclipse.jst.servlet.ui.internal.plugin.ServletUIPlugin Bundle-Vendor: %pluginVendor Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java index d1fe456..a75b864 100644 --- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java +++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java
@@ -11,19 +11,28 @@ package org.eclipse.jst.servlet.ui.internal.wizard; import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.CLASS_NAME; +import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.JAVA_PACKAGE; import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.OPEN_IN_EDITOR; import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.PROJECT; import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.QUALIFIED_CLASS_NAME; +import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.JAVA_SOURCE_FOLDER; import static org.eclipse.jst.j2ee.internal.web.operations.INewWebClassDataModelProperties.USE_EXISTING_CLASS; import java.net.URL; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Path; +import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IPackageFragment; +import org.eclipse.jdt.core.IPackageFragmentRoot; +import org.eclipse.jdt.core.IType; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jst.j2ee.internal.common.operations.JavaModelUtil; import org.eclipse.jst.j2ee.internal.plugin.J2EEEditorUtility; import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; import org.eclipse.jst.servlet.ui.internal.plugin.ServletUIPlugin; @@ -76,8 +85,35 @@ } IProject p = (IProject) getDataModel().getProperty(PROJECT); IJavaProject javaProject = J2EEEditorUtility.getJavaProject(p); - IFile file = (IFile) javaProject.findType(className).getResource(); - openEditor(file); + IType type = javaProject.findType(className); + IFile file = null; + + if (type != null){ + file = (IFile) type.getResource(); + } + else if (!getDataModel().getBooleanProperty(USE_EXISTING_CLASS)){ + // If we could not find the type, the class might be in a folder that is not part of the build path. + // Let's look for it using the class name and source folder (this does not work when using existing class, but + // should not be a problem, because the wizard to select the existing class will not let you select class that + // is not in the build path) + IFolder sourceFolder = (IFolder) getDataModel().getProperty(JAVA_SOURCE_FOLDER); + String packageName = getDataModel().getStringProperty(JAVA_PACKAGE); + IPackageFragmentRoot packageFragmentRoot = javaProject.getPackageFragmentRoot(sourceFolder); + IPackageFragment packageFragment = null; + if (packageFragmentRoot!= null){ + packageFragment = packageFragmentRoot.getPackageFragment(packageName); + } + if (packageFragment!= null){ + ICompilationUnit cu = packageFragment.getCompilationUnit(getDataModel().getStringProperty(CLASS_NAME) + JavaModelUtil.DEFAULT_CU_SUFFIX); + IResource resource = cu.getResource(); + if (resource.exists() && resource instanceof IFile) { + file = (IFile)resource; + } + } + } + if (file != null){ + openEditor(file); + } } catch (Exception cantOpen) { ServletUIPlugin.log(cantOpen); }