View | Details | Raw Unified | Return to bug 228639
Collapse All | Expand All

(-)model/org/eclipse/jdt/internal/core/SourceMapper.java (-4 / +13 lines)
Lines 354-364 Link Here
354
		final HashSet firstLevelPackageNames = new HashSet();
354
		final HashSet firstLevelPackageNames = new HashSet();
355
		boolean containsADefaultPackage = false;
355
		boolean containsADefaultPackage = false;
356
356
357
		String sourceLevel = null;
358
		String complianceLevel = null;
357
		if (root.isArchive()) {
359
		if (root.isArchive()) {
358
			JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) root;
360
			JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) root;
359
			IJavaProject project = jarPackageFragmentRoot.getJavaProject();
360
			String sourceLevel = null;
361
			String complianceLevel = null;
362
			JavaModelManager manager = JavaModelManager.getJavaModelManager();
361
			JavaModelManager manager = JavaModelManager.getJavaModelManager();
363
			ZipFile zip = null;
362
			ZipFile zip = null;
364
			try {
363
			try {
Lines 372-377 Link Here
372
							String firstLevelPackageName = entryName.substring(0, index);
371
							String firstLevelPackageName = entryName.substring(0, index);
373
							if (!firstLevelPackageNames.contains(firstLevelPackageName)) {
372
							if (!firstLevelPackageNames.contains(firstLevelPackageName)) {
374
								if (sourceLevel == null) {
373
								if (sourceLevel == null) {
374
									IJavaProject project = root.getJavaProject();
375
									sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
375
									sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
376
									complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
376
									complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
377
								}
377
								}
Lines 400-406 Link Here
400
						for (int i = 0, max = members.length; i < max; i++) {
400
						for (int i = 0, max = members.length; i < max; i++) {
401
							IResource member = members[i];
401
							IResource member = members[i];
402
							if (member.getType() == IResource.FOLDER) {
402
							if (member.getType() == IResource.FOLDER) {
403
								firstLevelPackageNames.add(member.getName());
403
								if (sourceLevel == null) {
404
									IJavaProject project = root.getJavaProject();
405
									sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
406
									complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
407
								}
408
								String firstLevelPackageName = member.getName();
409
								IStatus status = JavaConventions.validatePackageName(firstLevelPackageName, sourceLevel, complianceLevel);
410
								if (status.isOK() || status.getSeverity() == IStatus.WARNING) {
411
									firstLevelPackageNames.add(firstLevelPackageName);
412
								}
404
							} else if (Util.isClassFileName(member.getName())) {
413
							} else if (Util.isClassFileName(member.getName())) {
405
								containsADefaultPackage = true;
414
								containsADefaultPackage = true;
406
							}
415
							}
(-)src/org/eclipse/jdt/core/tests/model/AttachSourceTests.java (-1 / +35 lines)
Lines 444-450 Link Here
444
			"}",
444
			"}",
445
			type.getSource());
445
			type.getSource());
446
	} finally {
446
	} finally {
447
		deleteExternalResource("src227813");
447
		deleteExternalResource("externalFolder/src227813");
448
		deleteProject("P");
449
	}
450
}
451
/*
452
 * Ensures that root paths are correctly detected when attaching an external source folder that contains a META-INF folder to an external library folder.
453
 * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=228639 )
454
 */
455
public void testExternalFolder5() throws Exception {
456
	try {
457
		String externalFolder = getExternalFolder();
458
		String[] pathsAndContents = 
459
			new String[] {
460
				"p/X.java",
461
				"package p;\n" +
462
				"public class X {\n" +
463
				"}"
464
			};
465
		org.eclipse.jdt.core.tests.util.Util.createSourceDir(pathsAndContents, externalFolder + "/src228639/src");
466
		createExternalFolder("externalFolder/src228639/META-INF");
467
		createExternalFolder("externalFolder/lib/META-INF");
468
		
469
		String externalLib = externalFolder + "/lib";
470
		IJavaProject javaProject = createJavaProject("P", new String[0], new String[] {externalLib}, "");
471
		IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(externalLib);
472
		attachSource(root, externalFolder + "/src228639", "");
473
		IType type = root.getPackageFragment("p").getClassFile("X.class").getType();
474
		assertSourceEquals(
475
			"Unexpected source",
476
			"public class X {\n" + 
477
			"}",
478
			type.getSource());
479
	} finally {
480
		deleteExternalResource("externalFolder/src228639");
481
		deleteExternalResource("externalFolder/lib/META-INF");
448
		deleteProject("P");
482
		deleteProject("P");
449
	}
483
	}
450
}
484
}

Return to bug 228639