docs: @Override
  	public String[] getClasspath(ILaunchConfiguration configuration) throws CoreException {
  		String[] userEntries = null;
  		synchronized (this) {
  			if (this.classpathEntries != null) {
  				userEntries = this.classpathEntries.get();
  			}
  		}
  		if (userEntries != null) {
  			return userEntries;
  		}
  
  		IRuntimeClasspathEntry[] entries = getOrComputeUnresolvedSARLRuntimeClasspath(configuration);
  		entries = JavaRuntime.resolveRuntimeClasspath(entries, configuration);
  
  		final boolean isMavenProject = getJavaProject(configuration).getProject().hasNature(SARLEclipseConfig.MAVEN_NATURE_ID);
  		boolean needSREEntry = isMavenProject;
  
  		// Store in a list for preserving the order of the entries.
  		final List<String> userEntryList = new ArrayList<>(entries.length + 1);
  		final Set<String> set = new TreeSet<>();
  		for (int i = 0; i < entries.length; i++) {
  			if (entries[i].getClasspathProperty() == IRuntimeClasspathEntry.USER_CLASSES) {
  				final String location = entries[i].getLocation();
  				if (location != null && !set.contains(location)) {
  					userEntryList.add(location);
  					set.add(location);
  					if (needSREEntry) {
  						needSREEntry = isNotSREEntry(entries[i]);
  					}
  				}
  			}
  		}
  
  		if (needSREEntry) {
  			int insertIndex = 0;
  			for (final IRuntimeClasspathEntry entry : getSREClasspathEntries(configuration,
  					this.configAccessor, cfg -> getJavaProject(cfg))) {
  				if (entry.getClasspathProperty() == IRuntimeClasspathEntry.USER_CLASSES) {
  					final String location = entry.getLocation();
  					if (location != null && !set.contains(location)) {
  						userEntryList.add(insertIndex, location);
  						set.add(location);
  						++insertIndex;
  					}
  				}
  			}
  		}
  
  		userEntries = userEntryList.toArray(new String[userEntryList.size()]);
  		synchronized (this) {
  			this.classpathEntries = new SoftReference<>(userEntries);
  		}
  		return userEntries;
  	}