Lines 345-350
Link Here
|
345 |
return; |
345 |
return; |
346 |
} |
346 |
} |
347 |
IPackageFragmentRoot root = (IPackageFragmentRoot) type.getPackageFragment().getParent(); |
347 |
IPackageFragmentRoot root = (IPackageFragmentRoot) type.getPackageFragment().getParent(); |
|
|
348 |
IPath pkgFragmentRootPath = root.getPath(); |
348 |
final HashSet tempRoots = new HashSet(); |
349 |
final HashSet tempRoots = new HashSet(); |
349 |
long time = 0; |
350 |
long time = 0; |
350 |
if (VERBOSE) { |
351 |
if (VERBOSE) { |
Lines 353-388
Link Here
|
353 |
} |
354 |
} |
354 |
final HashSet firstLevelPackageNames = new HashSet(); |
355 |
final HashSet firstLevelPackageNames = new HashSet(); |
355 |
boolean containsADefaultPackage = false; |
356 |
boolean containsADefaultPackage = false; |
|
|
357 |
boolean containsJavaSource = !pkgFragmentRootPath.equals(this.sourcePath); // used to optimize zip file reading only if source path and root path are equals, otherwise assume that attachment contains Java source |
356 |
|
358 |
|
357 |
String sourceLevel = null; |
359 |
String sourceLevel = null; |
358 |
String complianceLevel = null; |
360 |
String complianceLevel = null; |
359 |
if (root.isArchive()) { |
361 |
if (root.isArchive()) { |
360 |
JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) root; |
|
|
361 |
JavaModelManager manager = JavaModelManager.getJavaModelManager(); |
362 |
JavaModelManager manager = JavaModelManager.getJavaModelManager(); |
362 |
ZipFile zip = null; |
363 |
ZipFile zip = null; |
363 |
try { |
364 |
try { |
364 |
zip = manager.getZipFile(jarPackageFragmentRoot.getPath()); |
365 |
zip = manager.getZipFile(pkgFragmentRootPath); |
365 |
for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { |
366 |
for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { |
366 |
ZipEntry entry = (ZipEntry) entries.nextElement(); |
367 |
ZipEntry entry = (ZipEntry) entries.nextElement(); |
367 |
String entryName = entry.getName(); |
368 |
String entryName = entry.getName(); |
368 |
if (!entry.isDirectory()) { |
369 |
if (!entry.isDirectory()) { |
369 |
int index = entryName.indexOf('/'); |
370 |
if (Util.isClassFileName(entryName)) { |
370 |
if (index != -1 && Util.isClassFileName(entryName)) { |
371 |
int index = entryName.indexOf('/'); |
371 |
String firstLevelPackageName = entryName.substring(0, index); |
372 |
if (index != -1) { |
372 |
if (!firstLevelPackageNames.contains(firstLevelPackageName)) { |
373 |
String firstLevelPackageName = entryName.substring(0, index); |
373 |
if (sourceLevel == null) { |
374 |
if (!firstLevelPackageNames.contains(firstLevelPackageName)) { |
374 |
IJavaProject project = root.getJavaProject(); |
375 |
if (sourceLevel == null) { |
375 |
sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); |
376 |
IJavaProject project = root.getJavaProject(); |
376 |
complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); |
377 |
sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); |
377 |
} |
378 |
complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); |
378 |
IStatus status = JavaConventions.validatePackageName(firstLevelPackageName, sourceLevel, complianceLevel); |
379 |
} |
379 |
if (status.isOK() || status.getSeverity() == IStatus.WARNING) { |
380 |
IStatus status = JavaConventions.validatePackageName(firstLevelPackageName, sourceLevel, complianceLevel); |
380 |
firstLevelPackageNames.add(firstLevelPackageName); |
381 |
if (status.isOK() || status.getSeverity() == IStatus.WARNING) { |
|
|
382 |
firstLevelPackageNames.add(firstLevelPackageName); |
383 |
} |
381 |
} |
384 |
} |
|
|
385 |
} else { |
386 |
containsADefaultPackage = true; |
382 |
} |
387 |
} |
383 |
} else if (Util.isClassFileName(entryName)) { |
388 |
} else if (!containsJavaSource && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(entryName)) { |
384 |
containsADefaultPackage = true; |
389 |
containsJavaSource = true; |
385 |
} |
390 |
} |
386 |
} |
391 |
} |
387 |
} |
392 |
} |
388 |
} catch (CoreException e) { |
393 |
} catch (CoreException e) { |
Lines 399-417
Link Here
|
399 |
IResource[] members = ((IContainer) resource).members(); |
404 |
IResource[] members = ((IContainer) resource).members(); |
400 |
for (int i = 0, max = members.length; i < max; i++) { |
405 |
for (int i = 0, max = members.length; i < max; i++) { |
401 |
IResource member = members[i]; |
406 |
IResource member = members[i]; |
|
|
407 |
String resourceName = member.getName(); |
402 |
if (member.getType() == IResource.FOLDER) { |
408 |
if (member.getType() == IResource.FOLDER) { |
403 |
if (sourceLevel == null) { |
409 |
if (sourceLevel == null) { |
404 |
IJavaProject project = root.getJavaProject(); |
410 |
IJavaProject project = root.getJavaProject(); |
405 |
sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); |
411 |
sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); |
406 |
complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); |
412 |
complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); |
407 |
} |
413 |
} |
408 |
String firstLevelPackageName = member.getName(); |
414 |
IStatus status = JavaConventions.validatePackageName(resourceName, sourceLevel, complianceLevel); |
409 |
IStatus status = JavaConventions.validatePackageName(firstLevelPackageName, sourceLevel, complianceLevel); |
|
|
410 |
if (status.isOK() || status.getSeverity() == IStatus.WARNING) { |
415 |
if (status.isOK() || status.getSeverity() == IStatus.WARNING) { |
411 |
firstLevelPackageNames.add(firstLevelPackageName); |
416 |
firstLevelPackageNames.add(resourceName); |
412 |
} |
417 |
} |
413 |
} else if (Util.isClassFileName(member.getName())) { |
418 |
} else if (Util.isClassFileName(resourceName)) { |
414 |
containsADefaultPackage = true; |
419 |
containsADefaultPackage = true; |
|
|
420 |
} else if (!containsJavaSource && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourceName)) { |
421 |
containsJavaSource = true; |
415 |
} |
422 |
} |
416 |
} |
423 |
} |
417 |
} catch (CoreException e) { |
424 |
} catch (CoreException e) { |
Lines 421-460
Link Here
|
421 |
} |
428 |
} |
422 |
} |
429 |
} |
423 |
|
430 |
|
424 |
Object target = JavaModel.getTarget(this.sourcePath, true); |
431 |
if (containsJavaSource) { // no need to read source attachment if it contains no Java source (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=190840 ) |
425 |
if (target instanceof IContainer) { |
432 |
Object target = JavaModel.getTarget(this.sourcePath, true); |
426 |
IContainer folder = (IContainer)target; |
433 |
if (target instanceof IContainer) { |
427 |
computeRootPath(folder, firstLevelPackageNames, containsADefaultPackage, tempRoots, folder.getFullPath().segmentCount()/*if external folder, this is the linked folder path*/); |
434 |
IContainer folder = (IContainer)target; |
428 |
} else { |
435 |
computeRootPath(folder, firstLevelPackageNames, containsADefaultPackage, tempRoots, folder.getFullPath().segmentCount()/*if external folder, this is the linked folder path*/); |
429 |
JavaModelManager manager = JavaModelManager.getJavaModelManager(); |
436 |
} else { |
430 |
ZipFile zip = null; |
437 |
JavaModelManager manager = JavaModelManager.getJavaModelManager(); |
431 |
try { |
438 |
ZipFile zip = null; |
432 |
zip = manager.getZipFile(this.sourcePath); |
439 |
try { |
433 |
for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { |
440 |
zip = manager.getZipFile(this.sourcePath); |
434 |
ZipEntry entry = (ZipEntry) entries.nextElement(); |
441 |
for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { |
435 |
String entryName; |
442 |
ZipEntry entry = (ZipEntry) entries.nextElement(); |
436 |
if (!entry.isDirectory() && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(entryName = entry.getName())) { |
443 |
String entryName; |
437 |
IPath path = new Path(entryName); |
444 |
if (!entry.isDirectory() && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(entryName = entry.getName())) { |
438 |
int segmentCount = path.segmentCount(); |
445 |
IPath path = new Path(entryName); |
439 |
if (segmentCount > 1) { |
446 |
int segmentCount = path.segmentCount(); |
440 |
for (int i = 0, max = path.segmentCount() - 1; i < max; i++) { |
447 |
if (segmentCount > 1) { |
441 |
if (firstLevelPackageNames.contains(path.segment(i))) { |
448 |
for (int i = 0, max = path.segmentCount() - 1; i < max; i++) { |
442 |
tempRoots.add(path.uptoSegment(i)); |
449 |
if (firstLevelPackageNames.contains(path.segment(i))) { |
443 |
// don't break here as this path could contain other first level package names (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=74014) |
450 |
tempRoots.add(path.uptoSegment(i)); |
444 |
} |
451 |
// don't break here as this path could contain other first level package names (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=74014) |
445 |
if (i == max - 1 && containsADefaultPackage) { |
452 |
} |
446 |
tempRoots.add(path.uptoSegment(max)); |
453 |
if (i == max - 1 && containsADefaultPackage) { |
|
|
454 |
tempRoots.add(path.uptoSegment(max)); |
455 |
} |
447 |
} |
456 |
} |
|
|
457 |
} else if (containsADefaultPackage) { |
458 |
tempRoots.add(new Path("")); //$NON-NLS-1$ |
448 |
} |
459 |
} |
449 |
} else if (containsADefaultPackage) { |
|
|
450 |
tempRoots.add(new Path("")); //$NON-NLS-1$ |
451 |
} |
460 |
} |
452 |
} |
461 |
} |
|
|
462 |
} catch (CoreException e) { |
463 |
// ignore |
464 |
} finally { |
465 |
manager.closeZipFile(zip); // handle null case |
453 |
} |
466 |
} |
454 |
} catch (CoreException e) { |
|
|
455 |
// ignore |
456 |
} finally { |
457 |
manager.closeZipFile(zip); // handle null case |
458 |
} |
467 |
} |
459 |
} |
468 |
} |
460 |
int size = tempRoots.size(); |
469 |
int size = tempRoots.size(); |