String[] oldRequired = this.oldResolvedClasspath == null ? CharOperation.NO_STRINGS : this.project.projectPrerequisites(this.oldResolvedClasspath);
IClasspathEntry[] newResolvedClasspath = this.project.getResolvedClasspath();
String[] newRequired = this.project.projectPrerequisites(newResolvedClasspath);
try {
IProject projectResource = this.project.getProject();
IProjectDescription description = projectResource.getDescription();
IProject[] projectReferences = description.getDynamicReferences();
HashSet oldReferences = new HashSet(projectReferences.length);
for (int i = 0; i < projectReferences.length; i++){
String projectName = projectReferences[i].getName();
oldReferences.add(projectName);
}
HashSet newReferences = (HashSet)oldReferences.clone();
for (int i = 0; i < oldRequired.length; i++){
String projectName = oldRequired[i];
newReferences.remove(projectName);
}
for (int i = 0; i < newRequired.length; i++){
String projectName = newRequired[i];
newReferences.add(projectName);
}
Iterator iter;
int newSize = newReferences.size();
checkIdentity: {
if (oldReferences.size() == newSize){
iter = newReferences.iterator();
while (iter.hasNext()){
if (!oldReferences.contains(iter.next())){
break checkIdentity;
}
}
return;
}
}
String[] requiredProjectNames = new String[newSize];
int index = 0;
iter = newReferences.iterator();
while (iter.hasNext()){
requiredProjectNames[index++] = (String)iter.next();
}
Util.sort(requiredProjectNames); // ensure that if changed, the order is consistent
IProject[] requiredProjectArray = new IProject[newSize];
IWorkspaceRoot wksRoot = projectResource.getWorkspace().getRoot();
for (int i = 0; i < newSize; i++){
requiredProjectArray[i] = wksRoot.getProject(requiredProjectNames[i]);
}
description.setDynamicReferences(requiredProjectArray);
projectResource.setDescription(description, null);
} catch(CoreException e){
if (!ExternalJavaProject.EXTERNAL_PROJECT_NAME.equals(this.project.getElementName()))
throw new JavaModelException(e);