docs: protected void completeSubJavaTypes(Class<?> superType, boolean allowSuperTypeItself, ContentAssistContext context,
  			EReference reference, IValueConverter<String> valueConverter, final ITypesProposalProvider.Filter filter,
  			ICompletionProposalAcceptor acceptor) {
  		assert superType != null;
  		final INode lastCompleteNode = context.getLastCompleteNode();
  		if (lastCompleteNode instanceof ILeafNode && !((ILeafNode) lastCompleteNode).isHidden()) {
  			if (lastCompleteNode.getLength() > 0 && lastCompleteNode.getTotalEndOffset() == context.getOffset()) {
  				final String text = lastCompleteNode.getText();
  				final char lastChar = text.charAt(text.length() - 1);
  				if (Character.isJavaIdentifierPart(lastChar)) {
  					return;
  				}
  			}
  		}
  		final ITypesProposalProvider.Filter subTypeFilter;
  		if (allowSuperTypeItself) {
  			subTypeFilter = filter;
  		} else {
  			final String superTypeQualifiedName = superType.getName();
  			subTypeFilter = new ITypesProposalProvider.Filter() {
  
  				@Override
  				public boolean accept(int modifiers, char[] packageName, char[] simpleTypeName,
  						char[][] enclosingTypeNames, String path) {
  					final String fullName = JavaModelUtil.concatenateName(packageName, simpleTypeName);
  					if (Objects.equals(superTypeQualifiedName, fullName)) {
  						return false;
  					}
  					return filter.accept(modifiers, packageName, simpleTypeName, enclosingTypeNames, path);
  				}
  
  				@Override
  				public int getSearchFor() {
  					return filter.getSearchFor();
  				}
  
  			};
  		}
  		getTypesProposalProvider().createSubTypeProposals(
  				this.typeReferences.findDeclaredType(superType, context.getCurrentModel()),
  				this,
  				context,
  				reference,
  				subTypeFilter,
  				valueConverter,
  				acceptor);
  	}