### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java,v retrieving revision 1.124 diff -u -r1.124 AbstractImageBuilder.java --- model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java 27 Nov 2008 20:31:16 -0000 1.124 +++ model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java 16 Dec 2008 12:53:45 -0000 @@ -20,6 +20,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; +import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; import org.eclipse.jdt.internal.compiler.problem.*; import org.eclipse.jdt.internal.compiler.util.SimpleSet; import org.eclipse.jdt.internal.compiler.util.SuffixConstants; @@ -390,7 +391,21 @@ IMarker marker = resource.createMarker(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER); int severity = problemSeverity.equals(JavaCore.WARNING) ? IMarker.SEVERITY_WARNING : IMarker.SEVERITY_ERROR; - ISourceRange range = javaElement == null ? null : javaElement.getNameRange(); + ISourceRange range = null; + if (javaElement != null) { + try { + range = javaElement.getNameRange(); + } catch (JavaModelException e) { + if (e.getJavaModelStatus().getCode() != IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST) { + throw e; + } + if (!CharOperation.equals(javaElement.getElementName().toCharArray(), TypeConstants.PACKAGE_INFO_NAME)) { + throw e; + } + // else silently swallow the exception as the synthetic interface type package-info has no + // source range really. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=258145 + } + } int start = range == null ? 0 : range.getOffset(); int end = range == null ? 1 : start + range.getLength(); marker.setAttributes( #P org.eclipse.jdt.core.tests.builder Index: src/org/eclipse/jdt/core/tests/builder/PackageInfoTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/PackageInfoTest.java,v retrieving revision 1.10 diff -u -r1.10 PackageInfoTest.java --- src/org/eclipse/jdt/core/tests/builder/PackageInfoTest.java 24 Nov 2008 08:22:41 -0000 1.10 +++ src/org/eclipse/jdt/core/tests/builder/PackageInfoTest.java 16 Dec 2008 12:53:47 -0000 @@ -37,6 +37,45 @@ public static Test suite() { return buildTestSuite(PackageInfoTest.class); } + +//test for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=258145 : JME on duplicate package-info +public void test258145() throws JavaModelException { + IPath projectPath = env.addProject("Project", "1.5"); //$NON-NLS-1$ + env.addExternalJars(projectPath, Util.getJavaClassLibs()); + fullBuild(projectPath); + + // remove old package fragment root so that names don't collide + env.removePackageFragmentRoot(projectPath, ""); //$NON-NLS-1$ + + IPath root = env.addPackageFragmentRoot(projectPath, "src"); //$NON-NLS-1$ + env.setOutputFolder(projectPath, "bin"); //$NON-NLS-1$ + + IPath otherRoot = env.addPackageFragmentRoot(projectPath, "test"); //$NON-NLS-1$ + env.setOutputFolder(projectPath, "bin"); //$NON-NLS-1$ + + env.addPackage(root, "my.foo"); + env.addFile(root, "my/foo/package-info.java", //$NON-NLS-1$ //$NON-NLS-2$ + "/**\n" + + "* A demo package for foo.\n" + + "*/\n" + + "package my.foo;\n" + ); + + fullBuild(projectPath); + + env.addPackage(otherRoot, "my.foo"); + + + IPath otherPackageInfoPath = env.addFile(otherRoot, "my/foo/package-info.java", //$NON-NLS-1$ //$NON-NLS-2$ + "/**\n" + + "* A demo package for foo.\n" + + "*/\n" + + "package my.foo;\n" + ); + + incrementalBuild(projectPath); + expectingOnlySpecificProblemFor(otherPackageInfoPath, new Problem("my/foo/package-info.java", "The type package-info is already defined", otherPackageInfoPath, 0, 0, CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR)); //$NON-NLS-1$ //$NON-NLS-2$ +} public void test001() throws JavaModelException { IPath projectPath = env.addProject("Project", "1.5"); //$NON-NLS-1$ env.addExternalJars(projectPath, Util.getJavaClassLibs());