Source:
<code>public List<IDockerImage> listImages() throws DockerException { <START> final List<IDockerImage> images = new ArrayList<>(); <END> try { final List<Image> nativeImages = new ArrayList<>(); synchronized (clientLock) { if (client == null) { return Collections.emptyList(); } nativeImages.addAll(client .listImages(DockerClient.ListImagesParam.allImages())); } for (Image nativeImage : nativeImages) { final DockerImageQualifier imageQualifier = resolveQualifier( nativeImage, nativeImages); final List<String> repoTags = (nativeImage.repoTags() != null) ? new ArrayList<>(nativeImage.repoTags()) : new ArrayList<>(); Collections.sort(repoTags); if (repoTags.isEmpty()) { repoTags.add("<none>:<none>"); } final String repo = DockerImage.extractRepo(repoTags.get(0)); final List<String> tags = Arrays .asList(DockerImage.extractTag(repoTags.get(0))); images.add(new DockerImage(this, repoTags, repo, tags, nativeImage.id(), nativeImage.parentId(), nativeImage.created(), nativeImage.size(), nativeImage.virtualSize(), imageQualifier)); } } catch (com.spotify.docker.client.DockerTimeoutException e) { if (isOpen()) { Activator.log( new Status(IStatus.WARNING, Activator.PLUGIN_ID, Messages.Docker_Connection_Timeout, e)); close(); } } catch (com.spotify.docker.client.DockerRequestException e) { throw new DockerException(e.message()); } catch (com.spotify.docker.client.DockerException | InterruptedException e) { if (isOpen() && e.getCause() != null && e.getCause().getCause() != null && e.getCause().getCause() instanceof ProcessingException) { close(); } else { throw new DockerException( NLS.bind(Messages.List_Docker_Images_Failure, this.getName()), e); } } finally { synchronized (imageLock) { this.images = images; this.imagesLoaded = true; } notifyImageListeners(this.images); } return this.images; }</code><technical_language>Do rename local array "images" this matches global field this.images easily confusion changing local global vice-versa. a good practice</technical_language>

Target:
public List<IDockerImage> listImages() throws DockerException { synchronized (imageLock) { final List<IDockerImage> tempImages = new ArrayList<>(); try { final List<Image> nativeImages = new ArrayList<>(); synchronized (clientLock) { if (client == null) { return Collections.emptyList(); } nativeImages.addAll(client.listImages( DockerClient.ListImagesParam.allImages())); } for (Image nativeImage : nativeImages) { final DockerImageQualifier imageQualifier = resolveQualifier( nativeImage, nativeImages); final List<String> repoTags = (nativeImage .repoTags() != null) ? new ArrayList<>(nativeImage.repoTags()) : new ArrayList<>(); Collections.sort(repoTags); if (repoTags.isEmpty()) { repoTags.add("<none>:<none>"); } final String repo = DockerImage .extractRepo(repoTags.get(0)); final List<String> tags = Arrays .asList(DockerImage.extractTag(repoTags.get(0))); tempImages.add(new DockerImage(this, repoTags, repo, tags, nativeImage.id(), nativeImage.parentId(), nativeImage.created(), nativeImage.size(), nativeImage.virtualSize(), imageQualifier)); } } catch (com.spotify.docker.client.DockerTimeoutException e) { if (isOpen()) { Activator.log( new Status(IStatus.WARNING, Activator.PLUGIN_ID, Messages.Docker_Connection_Timeout, e)); close(); } } catch (com.spotify.docker.client.DockerRequestException e) { throw new DockerException(e.message()); } catch (com.spotify.docker.client.DockerException | InterruptedException e) { if (isOpen() && e.getCause() != null && e.getCause().getCause() != null && e.getCause() .getCause() instanceof ProcessingException) { close(); } else { throw new DockerException( NLS.bind(Messages.List_Docker_Images_Failure, this.getName()), e); } } finally { this.images = tempImages; this.imagesLoaded = true; } } notifyImageListeners(this.images); return this.images; }