Bug 560724 - NPE parsing ANT files imported or included via classpath ANT files that are imported or included using a javaresource and with a classpath result in a AntXMLContext that does not have a build file but a build file URL. Change-Id: I5a545f56aee016cec0d0b38e4e052937a6e48446 Signed-off-by: Michael Schnell <niks@gmx.li>
diff --git a/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorTests.java b/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorTests.java index b7a0f58..6f62dcd 100644 --- a/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorTests.java +++ b/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorTests.java
@@ -312,6 +312,28 @@ assertNotNull("Should have a document", doc); //$NON-NLS-1$ } + public void testOpenImportViaClasspath() throws PartInitException { + IFile file = getIFile("importViaClasspath.xml"); //$NON-NLS-1$ + AntEditor editor = (AntEditor) EditorTestHelper.openInEditor(file, "org.eclipse.ant.ui.internal.editor.AntEditor", true); //$NON-NLS-1$ + IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput()); + assertNotNull("Should have a document", doc); //$NON-NLS-1$ + + file = getIFile("BaseBaseBuild.xml"); //$NON-NLS-1$ + editor = (AntEditor) EditorTestHelper.openInEditor(file, "org.eclipse.ant.ui.internal.editor.AntEditor", true); //$NON-NLS-1$ + doc = editor.getDocumentProvider().getDocument(editor.getEditorInput()); + assertNotNull("Should have a document", doc); //$NON-NLS-1$ + + file = getIFile("BaseBuild.xml"); //$NON-NLS-1$ + editor = (AntEditor) EditorTestHelper.openInEditor(file, "org.eclipse.ant.ui.internal.editor.AntEditor", true); //$NON-NLS-1$ + doc = editor.getDocumentProvider().getDocument(editor.getEditorInput()); + assertNotNull("Should have a document", doc); //$NON-NLS-1$ + + file = getIFile("Base.xml"); //$NON-NLS-1$ + editor = (AntEditor) EditorTestHelper.openInEditor(file, "org.eclipse.ant.ui.internal.editor.AntEditor", true); //$NON-NLS-1$ + doc = editor.getDocumentProvider().getDocument(editor.getEditorInput()); + assertNotNull("Should have a document", doc); //$NON-NLS-1$ + } + /** * bug 195840 Import a XML file with BOM character in ant editor fails Runs on 1.5 vms or newer. */
diff --git a/ant/org.eclipse.ant.tests.ui/testbuildfiles/Base.xml b/ant/org.eclipse.ant.tests.ui/testbuildfiles/Base.xml new file mode 100644 index 0000000..d48026e --- /dev/null +++ b/ant/org.eclipse.ant.tests.ui/testbuildfiles/Base.xml
@@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<!-- + Copyright (c) 2020 Michael Schnell and others. + + This program and the accompanying materials + are made available under the terms of the Eclipse Public License 2.0 + which accompanies this distribution, and is available at + https://www.eclipse.org/legal/epl-2.0/ + + SPDX-License-Identifier: EPL-2.0 + + Contributors: + Michael Schnell - initial API and implementation + --> +<project name="TOP" default="Middle.Base.DoBase"> + <include> + <javaresource name="BaseBuild.xml" classpath="." /> + </include> +</project> \ No newline at end of file
diff --git a/ant/org.eclipse.ant.tests.ui/testbuildfiles/BaseBaseBuild.xml b/ant/org.eclipse.ant.tests.ui/testbuildfiles/BaseBaseBuild.xml new file mode 100644 index 0000000..15d5887 --- /dev/null +++ b/ant/org.eclipse.ant.tests.ui/testbuildfiles/BaseBaseBuild.xml
@@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<!-- + Copyright (c) 2020 Michael Schnell and others. + + This program and the accompanying materials + are made available under the terms of the Eclipse Public License 2.0 + which accompanies this distribution, and is available at + https://www.eclipse.org/legal/epl-2.0/ + + SPDX-License-Identifier: EPL-2.0 + + Contributors: + Michael Schnell - initial API and implementation + --> +<project name="Base"> + <target name="DoBase"> + <echo message="Hello ANT" /> + </target> +</project> \ No newline at end of file
diff --git a/ant/org.eclipse.ant.tests.ui/testbuildfiles/BaseBuild.xml b/ant/org.eclipse.ant.tests.ui/testbuildfiles/BaseBuild.xml new file mode 100644 index 0000000..ead8228 --- /dev/null +++ b/ant/org.eclipse.ant.tests.ui/testbuildfiles/BaseBuild.xml
@@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<!-- + Copyright (c) 2020 Michael Schnell and others. + + This program and the accompanying materials + are made available under the terms of the Eclipse Public License 2.0 + which accompanies this distribution, and is available at + https://www.eclipse.org/legal/epl-2.0/ + + SPDX-License-Identifier: EPL-2.0 + + Contributors: + Michael Schnell - initial API and implementation + --> +<project name="Middle"> + <include> + <javaresource name="BaseBaseBuild.xml" classpath="." /> + </include> + + <target name="DoMore"> + <echo message="Hello ANT" /> + </target> +</project> \ No newline at end of file
diff --git a/ant/org.eclipse.ant.tests.ui/testbuildfiles/importViaClasspath.xml b/ant/org.eclipse.ant.tests.ui/testbuildfiles/importViaClasspath.xml new file mode 100644 index 0000000..72c55f9 --- /dev/null +++ b/ant/org.eclipse.ant.tests.ui/testbuildfiles/importViaClasspath.xml
@@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<!-- + Copyright (c) 2020 Andrey Loskutov <loskutov@gmx.de> and others. + + This program and the accompanying materials + are made available under the terms of the Eclipse Public License 2.0 + which accompanies this distribution, and is available at + https://www.eclipse.org/legal/epl-2.0/ + + SPDX-License-Identifier: EPL-2.0 + + Contributors: + Andrey Loskutov <loskutov@gmx.de> - initial API and implementation + --> + +<project name="importViaClasspath" default="import-default"> + <import> + <javaresource name="toBeImported.xml" classpath="." /> + </import> +</project> +
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java index 4045ffe..d5143e9 100644 --- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java +++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
@@ -278,6 +278,17 @@ } /** + * Gets the associated project name by the absolute build-file path + * + * @param buildFile + * The file + * @return The project name + */ + public static String getProjectNameOfBuildFile(String absolutePath) { + return parsedProjectNames.get(absolutePath); + } + + /** * Builds the hash-map's build-file key * * @param buildFile @@ -345,8 +356,11 @@ String currentProjectName = context.getCurrentProjectName(); // just an additional check if the name is non-empty if (this.isCurrentProjectNameValid(currentProjectName)) { - String buildFilePath = context.getBuildFile().getAbsolutePath(); - storeParsedProjectName(buildFilePath, currentProjectName); + if (context.getBuildFile() != null) { + storeParsedProjectName(context.getBuildFile().getAbsolutePath(), currentProjectName); + } else if (context.getBuildFileURL() != null) { + storeParsedProjectName(new File(context.getBuildFileURL().getPath()).getAbsolutePath(), currentProjectName); + } } } catch (SAXParseException e) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntIncludeNode.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntIncludeNode.java index 906d54c..dfda703 100644 --- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntIncludeNode.java +++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntIncludeNode.java
@@ -141,7 +141,10 @@ * of any subsequent operation on the AntIncludeNode object. */ IFile projectSpecificBuildFile = this.handleCorrectBuildFile(importedFromNode); - return org.eclipse.ant.internal.ui.editor.utils.ProjectHelper.getProjectNameOfBuildFile(projectSpecificBuildFile); + if (projectSpecificBuildFile != null) { + return org.eclipse.ant.internal.ui.editor.utils.ProjectHelper.getProjectNameOfBuildFile(projectSpecificBuildFile); + } + return org.eclipse.ant.internal.ui.editor.utils.ProjectHelper.getProjectNameOfBuildFile(this.getFilePath()); } /**