View | Details | Raw Unified | Return to bug 154593 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/pde/internal/ui/wizards/plugin/ClasspathComputer.java (-7 / +47 lines)
Lines 59-82 Link Here
59
	}
59
	}
60
	
60
	
61
	public static IClasspathEntry[] getClasspath(IProject project, IPluginModelBase model, boolean clear) throws CoreException {
61
	public static IClasspathEntry[] getClasspath(IProject project, IPluginModelBase model, boolean clear) throws CoreException {
62
62
		IJavaProject javaProject = JavaCore.create(project);
63
		ArrayList result = new ArrayList();
63
		ArrayList result = new ArrayList();
64
				
65
		IBuild build = getBuild(project);
64
		IBuild build = getBuild(project);
66
65
67
		// add own libraries/source
66
		// add own libraries/source
68
		addSourceAndLibraries(project, model, build, clear, result);
67
		addSourceAndLibraries(project, model, build, clear, result);
69
	
68
		
70
		// add JRE and set compliance options
69
		// add JRE and set compliance options
71
		String ee = getExecutionEnvironment(model.getBundleDescription());	
70
		String ee = getExecutionEnvironment(model.getBundleDescription());	
72
		result.add(createJREEntry(ee));
71
		result.add(createJREEntryUsingPreviousEntry(javaProject, ee));
73
		setComplianceOptions(JavaCore.create(project), ExecutionEnvironmentAnalyzer.getCompliance(ee));
72
		setComplianceOptions(JavaCore.create(project), ExecutionEnvironmentAnalyzer.getCompliance(ee));
74
73
75
		// add pde container
74
		// add pde container
76
		result.add(createContainerEntry());
75
		result.add(createContainerEntry());
77
76
78
		IClasspathEntry[] entries = (IClasspathEntry[]) result.toArray(new IClasspathEntry[result.size()]);
77
		IClasspathEntry[] entries = (IClasspathEntry[]) result.toArray(new IClasspathEntry[result.size()]);
79
		IJavaProject javaProject = JavaCore.create(project);
80
		IJavaModelStatus validation = 
78
		IJavaModelStatus validation = 
81
			JavaConventions.validateClasspath(
79
			JavaConventions.validateClasspath(
82
								javaProject, 
80
								javaProject, 
Lines 295-302 Link Here
295
		}
293
		}
296
	}
294
	}
297
	
295
	
296
	/**
297
	 * Returns a new classpath container entry for the given execution environment.  If the given java project
298
	 * has an existing JRE/EE classpath entry, the access rules, extra attributes and isExported settings of
299
	 * the existing entry will be added to the new execution entry.
300
	 *  
301
	 * @param javaProject project to check for existing JRE/EE classpath entries
302
	 * @param ee id of the execution environment to create an entry for
303
	 * @return new classpath container entry
304
	 * @throws CoreException if there is a problem accessing the classpath entries of the project
305
	 */
306
	public static IClasspathEntry createJREEntryUsingPreviousEntry(IJavaProject javaProject, String ee) throws CoreException {
307
		IClasspathEntry existingEntry = null;
308
		IClasspathEntry[] entries = javaProject.getRawClasspath();
309
		for (int i = 0; i < entries.length; i++) {
310
			if (entries[i].getPath().segment(0).equals(JavaRuntime.JRE_CONTAINER)){
311
				existingEntry = entries[i];
312
				break;
313
			}
314
		}
315
		if (existingEntry == null){
316
			return createJREEntry(ee);
317
		}
318
		return JavaCore.newContainerEntry(getEEPath(ee), existingEntry.getAccessRules(), existingEntry.getExtraAttributes(), existingEntry.isExported());
319
	}
298
	
320
	
321
	/**
322
	 * Returns a classpath container entry for the given execution environment.
323
	 * @param ee id of the execution environment
324
	 * @return classpath container entry
325
	 */
299
	public static IClasspathEntry createJREEntry(String ee) {
326
	public static IClasspathEntry createJREEntry(String ee) {
327
		return JavaCore.newContainerEntry(getEEPath(ee));
328
	}
329
		
330
	/**
331
	 * Returns the JRE container path for the execution environment with the given id.
332
	 * @param ee execution environment id
333
	 * @return JRE container path for the execution environment
334
	 */
335
	private static IPath getEEPath(String ee){
300
		IPath path = null;
336
		IPath path = null;
301
		if (ee != null) {
337
		if (ee != null) {
302
			IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
338
			IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
Lines 304-314 Link Here
304
			if (env != null) 
340
			if (env != null) 
305
				path = JavaRuntime.newJREContainerPath(env);
341
				path = JavaRuntime.newJREContainerPath(env);
306
		}
342
		}
307
		if (path == null)
343
		if (path == null){
308
			path = JavaRuntime.newDefaultJREContainerPath();
344
			path = JavaRuntime.newDefaultJREContainerPath();
309
		return JavaCore.newContainerEntry(path);
345
		}
346
		return path;
310
	}
347
	}
311
	
348
	
349
	/**
350
	 * @return a new classpath container entry for a required plugin container
351
	 */
312
	public static IClasspathEntry createContainerEntry() {
352
	public static IClasspathEntry createContainerEntry() {
313
		return JavaCore.newContainerEntry(PDECore.REQUIRED_PLUGINS_CONTAINER_PATH);
353
		return JavaCore.newContainerEntry(PDECore.REQUIRED_PLUGINS_CONTAINER_PATH);
314
	}
354
	}

Return to bug 154593