docs: public void doCreate(Composite parentComposite, IDialogSettings settings) {
  		// Introduction
  		final String introductionMessage = getIntroductionLabel();
  		if (!Strings.isEmpty(introductionMessage)) {
  			final GridData gd = new GridData();
  			gd.grabExcessHorizontalSpace = true;
  			gd.horizontalAlignment = GridData.FILL_HORIZONTAL;
  			gd.horizontalSpan = 2;
  			final Label textWidget = new Label(parentComposite, SWT.WRAP);
  			textWidget.setLayoutData(gd);
  			textWidget.setText(introductionMessage);
  			textWidget.setFont(parentComposite.getFont());
  		}
  		//
  		final GridData gd = new GridData(GridData.FILL_BOTH);
  		gd.heightHint = HEIGHT_HINT;
  		gd.widthHint = WIDTH_HINT;
  		this.table = new Table(parentComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
  		this.table.setLayoutData(gd);
  		this.table.setFont(parentComposite.getFont());
  		this.table.setHeaderVisible(true);
  		this.table.setLinesVisible(true);
  		this.table.setLinesVisible(true);
  
  		TableColumn column = new TableColumn(this.table, SWT.NULL);
  		column.setText(getSourceColumnLabel());
  		if (!this.isSortedElements) {
  			column.addSelectionListener(new SelectionAdapter() {
  				@SuppressWarnings("synthetic-access")
  				@Override
  				public void widgetSelected(SelectionEvent event) {
  					sortBySourceColumn();
  					AbstractConversionTable.this.list.refresh(true);
  				}
  			});
  		}
  		column.setWidth(DEFAULT_WIDTH);
  
  		column = new TableColumn(this.table, SWT.NULL);
  		column.setText(getTargetColumnLabel());
  		if (!this.isSortedElements) {
  			column.addSelectionListener(new SelectionAdapter() {
  				@SuppressWarnings("synthetic-access")
  				@Override
  				public void widgetSelected(SelectionEvent event) {
  					sortByTargetColumn();
  					AbstractConversionTable.this.list.refresh(true);
  				}
  			});
  		}
  		column.setWidth(DEFAULT_WIDTH);
  
  		this.list = new TableViewer(this.table);
  		this.list.setLabelProvider(createLabelProvider());
  		this.list.setContentProvider(createContentProvider());
  		this.list.setUseHashlookup(true);
  
  		this.list.addSelectionChangedListener(evt -> enableButtons());
  
  		this.table.addKeyListener(new KeyAdapter() {
  			@SuppressWarnings("synthetic-access")
  			@Override
  			public void keyPressed(KeyEvent event) {
  				if (event.character == SWT.DEL && event.stateMask == 0) {
  					if (AbstractConversionTable.this.removeButton.isEnabled()) {
  						removeCurrentTypeConversion();
  					}
  				}
  			}
  		});
  
  		this.editors = new CellEditor[2];
  		this.editors[0] = createSourceColumnEditor();
  		this.editors[1] = createTargetColumnEditor();
  		this.list.setCellEditors(this.editors);
  
  		this.cellModifier = createCellModifier();
  		this.list.setColumnProperties(new String[] {SOURCE_COLUMN_PROPERTY, TARGET_COLUMN_PROPERTY});
  		this.list.setCellModifier(this.cellModifier);
  
  		final Composite buttons = SWTFactory.createComposite(parentComposite, parentComposite.getFont(), 1, 1,
  				GridData.VERTICAL_ALIGN_BEGINNING, 0, 0);
  
  		final Button addButton = SWTFactory.createPushButton(buttons, Messages.AbstractConversionTable_0, null);
  		addButton.addListener(SWT.Selection, evt -> addTypeConversion(null, null, true));
  
  		this.removeButton = SWTFactory.createPushButton(buttons, Messages.AbstractConversionTable_1, null);
  		this.removeButton.addListener(SWT.Selection, evt -> removeCurrentTypeConversion());
  
  		this.clearButton = SWTFactory.createPushButton(buttons, Messages.AbstractConversionTable_2, null);
  		this.clearButton.addListener(SWT.Selection, evt -> removeAllTypeConversions());
  
  		if (this.isSortedElements) {
  			this.moveTopButton = SWTFactory.createPushButton(buttons, Messages.AbstractConversionTable_3, null);
  			this.moveTopButton.addListener(SWT.Selection, evt -> moveSelectionTop());
  
  			this.moveUpButton = SWTFactory.createPushButton(buttons, Messages.AbstractConversionTable_4, null);
  			this.moveUpButton.addListener(SWT.Selection, evt -> moveSelectionUp());
  
  			this.moveDownButton = SWTFactory.createPushButton(buttons, Messages.AbstractConversionTable_5, null);
  			this.moveDownButton.addListener(SWT.Selection, evt -> moveSelectionDown());
  
  			this.moveBottomButton = SWTFactory.createPushButton(buttons, Messages.AbstractConversionTable_6, null);
  			this.moveBottomButton.addListener(SWT.Selection, evt -> moveSelectionBottom());
  		}
  
  		SWTFactory.createVerticalSpacer(parentComposite, 1);
  
  		// Register the preference key(s)
  		registerKey(getPreferenceKey());
  
  		// Fill the content of the table
  		updateControls();
  
  		// Enable/disable the buttons
  		enableButtons();
  
  		// By default, sort by name
  		restoreColumnSettings(settings);
  	}