Author: hibou
Date: Mon Oct 11 08:21:40 2010
New Revision: 1021277
URL: http://svn.apache.org/viewvc?rev=1021277&view=rev
Log:
IVYDE-259 : re-enable ".classpath rewriting" in the classpath initializer, and
make the IvyDERuntimeClasspathEntryResolver support containers not configured
on a project
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java?rev=1021277&r1=1021276&r2=1021277&view=diff
==============================================================================
---
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java
(original)
+++
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java
Mon Oct 11 08:21:40 2010
@@ -49,55 +49,52 @@ public class IvyDERuntimeClasspathEntryR
public IRuntimeClasspathEntry[]
resolveRuntimeClasspathEntry(IRuntimeClasspathEntry entry,
ILaunchConfiguration configuration) throws CoreException {
+ if (entry == null) {
+ // cannot resolve without entry or project context
+ return new IRuntimeClasspathEntry[0];
+ }
+
+ IvyClasspathContainer ivycp;
+
IJavaProject project = entry.getJavaProject();
if (project == null) {
project = JavaRuntime.getJavaProject(configuration);
+ ivycp = new
IvyClasspathContainer(FakeProjectManager.createPlaceholderProject(),
+ entry.getPath(), null, null);
+ } else {
+ IClasspathContainer container = JavaCore
+ .getClasspathContainer(entry.getPath(), project);
+ if (container == null) {
+ String message = "Could not resolve classpath container: "
+ + entry.getPath().toString();
+ throw new CoreException(new Status(IStatus.ERROR, IvyPlugin.ID,
+ IJavaLaunchConfigurationConstants.ERR_INTERNAL_ERROR,
message, null));
+ // execution will not reach here - exception will be thrown
+ }
+ ivycp = (IvyClasspathContainer) container;
}
- return computeDefaultContainerEntries(entry, project);
+
+ return computeDefaultContainerEntries(ivycp, entry, project);
}
private static IRuntimeClasspathEntry[] computeDefaultContainerEntries(
- IRuntimeClasspathEntry entry, IJavaProject project) throws
CoreException {
- if (project == null || entry == null) {
- // cannot resolve without entry or project context
- return new IRuntimeClasspathEntry[0];
- }
- IClasspathContainer container =
JavaCore.getClasspathContainer(entry.getPath(), project);
- if (container == null) {
- String message = "Could not resolve classpath container: " +
entry.getPath().toString();
- throw new CoreException(new Status(IStatus.ERROR, IvyPlugin.ID,
- IJavaLaunchConfigurationConstants.ERR_INTERNAL_ERROR,
message, null));
- // execution will not reach here - exception will be thrown
- }
- IvyClasspathContainer ivycp = (IvyClasspathContainer) container;
- if (ivycp.getConf().isInheritedResolveBeforeLaunch()) {
+ IvyClasspathContainer ivycp, IRuntimeClasspathEntry entry,
IJavaProject project)
+ throws CoreException {
+ if (ivycp.getClasspathEntries() == null
+ || ivycp.getConf().isInheritedResolveBeforeLaunch()) {
IStatus status = ivycp.launchResolve(false, new
NullProgressMonitor());
if (status.getCode() != IStatus.OK) {
throw new CoreException(status);
}
}
- IClasspathEntry[] cpes = container.getClasspathEntries();
- int property;
- switch (container.getKind()) {
- case IClasspathContainer.K_APPLICATION:
- property = IRuntimeClasspathEntry.USER_CLASSES;
- break;
- case IClasspathContainer.K_DEFAULT_SYSTEM:
- property = IRuntimeClasspathEntry.STANDARD_CLASSES;
- break;
- case IClasspathContainer.K_SYSTEM:
- property = IRuntimeClasspathEntry.BOOTSTRAP_CLASSES;
- break;
- default:
- property = -1;
- }
+ IClasspathEntry[] cpes = ivycp.getClasspathEntries();
List resolved = new ArrayList(cpes.length);
List projects = new ArrayList();
for (int i = 0; i < cpes.length; i++) {
IClasspathEntry cpe = cpes[i];
if (cpe.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
- IProject p =
ResourcesPlugin.getWorkspace().getRoot().getProject(
- cpe.getPath().segment(0));
+ IProject p = ResourcesPlugin.getWorkspace().getRoot()
+ .getProject(cpe.getPath().segment(0));
IJavaProject jp = JavaCore.create(p);
if (!projects.contains(jp)) {
projects.add(jp);
@@ -124,7 +121,7 @@ public class IvyDERuntimeClasspathEntryR
IRuntimeClasspathEntry[] result = new
IRuntimeClasspathEntry[resolved.size()];
for (int i = 0; i < result.length; i++) {
result[i] = (IRuntimeClasspathEntry) resolved.get(i);
- result[i].setClasspathProperty(property);
+
result[i].setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES);
}
return result;
}
@@ -134,7 +131,7 @@ public class IvyDERuntimeClasspathEntryR
if (!(entry instanceof IRuntimeClasspathEntry2)) {
return new IRuntimeClasspathEntry[] {entry};
}
-
+
IRuntimeClasspathEntry2 entry2 = (IRuntimeClasspathEntry2) entry;
IRuntimeClasspathEntry[] entries =
entry2.getRuntimeClasspathEntries(null);
List resolved = new ArrayList();
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
URL:
http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java?rev=1021277&r1=1021276&r2=1021277&view=diff
==============================================================================
---
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
(original)
+++
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
Mon Oct 11 08:21:40 2010
@@ -140,7 +140,7 @@ public class IvyClasspathContainer imple
}
private void setClasspathEntries(final IClasspathEntry[] entries) {
- Display.getDefault().asyncExec(new Runnable() {
+ Display.getDefault().syncExec(new Runnable() {
public void run() {
if (conf.isInheritedAlphaOrder()) {
Arrays.sort(entries, new Comparator() {
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java
URL:
http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java?rev=1021277&r1=1021276&r2=1021277&view=diff
==============================================================================
---
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java
(original)
+++
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerConfAdapter.java
Mon Oct 11 08:21:40 2010
@@ -64,8 +64,10 @@ public final class IvyClasspathContainer
}
conf.setAttributes(attributes);
- // ensure that the project has the Ivy nature
- IvyNature.addNature(conf.getJavaProject().getProject());
+ if (!FakeProjectManager.isFake(conf.getJavaProject())) {
+ // ensure that the project has the Ivy nature
+ IvyNature.addNature(conf.getJavaProject().getProject());
+ }
}
/**
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java
URL:
http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java?rev=1021277&r1=1021276&r2=1021277&view=diff
==============================================================================
---
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java
(original)
+++
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathInitializer.java
Mon Oct 11 08:21:40 2010
@@ -92,16 +92,12 @@ public class IvyClasspathInitializer ext
}
}
- // FIXME : this breaks the java launcher.
IvyDERuntimeClasspathEntryResolver gets an
- // unconfigured container. The culprit may be the resolver
which doesn't handle properly
- // project less container.
-
// recompute the path as it may have been "upgraded"
- // IPath updatedPath =
IvyClasspathContainerConfAdapter.getPath(ivycp.getConf());
- // if (!updatedPath.equals(containerPath)) {
- // updateIvyDEContainerPath(project, entry, attributes,
exported, updatedPath);
- // return;
- // }
+ IPath updatedPath =
IvyClasspathContainerConfAdapter.getPath(ivycp.getConf());
+ if (!updatedPath.equals(containerPath)) {
+ updateIvyDEContainerPath(project, entry, attributes,
exported, updatedPath);
+ return;
+ }
JavaCore.setClasspathContainer(containerPath, new
IJavaProject[] {project},
new IClasspathContainer[] {ivycp}, null);
@@ -123,8 +119,7 @@ public class IvyClasspathInitializer ext
}
private void updateIvyDEContainerPath(final IJavaProject project, final
IClasspathEntry entry,
- final IClasspathAttribute[] attributes, final boolean exported,
- final IPath updatedPath) {
+ final IClasspathAttribute[] attributes, final boolean exported,
final IPath updatedPath) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
try {