# Advanced completion

## Type-matching completion

Smart type-matching code completion filters the suggestion list and shows only the types applicable to the current context.

Type-matching completion is useful in situations when it is possible to determine the appropriate type:

* In the right part of assignment statements

* In variable initializers

* In `return` statements

* In the list of arguments of a method call

* After the `new` keyword in an object declaration

* In chained expressions

Procedure: Invoke type-matching completion

1. To invoke type-matching completion, start typing and press `Ctrl+Shift+Space` (Windows), `⌃ ⇧ Space` (macOS), `⌃ ⇧ Space` (IntelliJ IDEA Classic (macOS)), `⌃ ⇧ Space` (macOS System Shortcuts), `Ctrl+Shift+Space` (XWin), `Ctrl+Shift+Space` (GNOME), `Ctrl+Shift+Space` (KDE), `Ctrl+Shift+Space` (Emacs), `Ctrl+Shift+Space` (Sublime Text), `Ctrl+Shift+Space` (Sublime Text (macOS)), `Ctrl+Shift+Space` (NetBeans), `Ctrl+Alt+Space` (Visual Studio), `⌃ ⌥ Space` (Visual Studio (macOS)), `Alt+Shift+Space` (Eclipse), `⌥ ⇧ Space` (Eclipse (macOS)) or  select `Code | Code Completion | Type-Matching` from the main menu.

![Smart code completion](https://resources.jetbrains.com/help/img/idea/2026.2/smartTypeCompletion.png)

2. If necessary, press `Ctrl+Shift+Space` (Windows), `⌃ ⇧ Space` (macOS), `⌃ ⇧ Space` (IntelliJ IDEA Classic (macOS)), `⌃ ⇧ Space` (macOS System Shortcuts), `Ctrl+Shift+Space` (XWin), `Ctrl+Shift+Space` (GNOME), `Ctrl+Shift+Space` (KDE), `Ctrl+Shift+Space` (Emacs), `Ctrl+Shift+Space` (Sublime Text), `Ctrl+Shift+Space` (Sublime Text (macOS)), `Ctrl+Shift+Space` (NetBeans), `Ctrl+Alt+Space` (Visual Studio), `⌃ ⌥ Space` (Visual Studio (macOS)), `Alt+Shift+Space` (Eclipse), `⌥ ⇧ Space` (Eclipse (macOS)) once again.  This lets you complete:

* Collections, lists and arrays. IntelliJ IDEA searches for symbols with the same component type and suggests converting them.

* Static method calls or constant references. IntelliJ IDEA scans for static methods and fields and suggests the ones suitable in the current context.

![smart type completion second call](https://resources.jetbrains.com/help/img/idea/2026.2/SmartTypeCompletionSecondCall.png)

> **Note:**
> Completion for chained expressions is only available for Java and requires the project to be built with the IntelliJ IDEA compiler (not the Gradle compiler).

## Statement completion

You can create syntactically correct code constructs by using statement completion. It inserts the necessary syntax elements (parentheses, braces, and semicolons) and gets you in a position where you can start typing the next statement.

To invoke statement completion, start typing a code construct and press `Ctrl+Shift+Enter` (Windows), `⌘ ⇧ ⏎` (macOS), `⌘ ⇧ ⏎` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ ⏎` (macOS System Shortcuts), `Ctrl+Shift+Enter` (XWin), `Ctrl+Shift+Enter` (GNOME), `Ctrl+Shift+Enter` (KDE), `Ctrl+Shift+Enter` (Emacs), `Ctrl+Shift+Enter` (Sublime Text), `Ctrl+Shift+Enter` (Sublime Text (macOS)), `Ctrl+Shift+Enter` (NetBeans), `Ctrl+Shift+Enter` (Visual Studio), `⌘ ⇧ ⏎` (Visual Studio (macOS)), `Ctrl+Shift+Enter` (Eclipse), `⌘ ⇧ ⏎` (Eclipse (macOS)).

Procedure: Complete a method declaration

* Start typing a method declaration and press `Ctrl+Shift+Enter` (Windows), `⌘ ⇧ ⏎` (macOS), `⌘ ⇧ ⏎` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ ⏎` (macOS System Shortcuts), `Ctrl+Shift+Enter` (XWin), `Ctrl+Shift+Enter` (GNOME), `Ctrl+Shift+Enter` (KDE), `Ctrl+Shift+Enter` (Emacs), `Ctrl+Shift+Enter` (Sublime Text), `Ctrl+Shift+Enter` (Sublime Text (macOS)), `Ctrl+Shift+Enter` (NetBeans), `Ctrl+Shift+Enter` (Visual Studio), `⌘ ⇧ ⏎` (Visual Studio (macOS)), `Ctrl+Shift+Enter` (Eclipse), `⌘ ⇧ ⏎` (Eclipse (macOS)) after the parenthesis.

Before:

```JAVA
                        public class Converter{
    int a = 0;

    static boolean RepeatConversion(//caret)
}
```

After:

```JAVA
public class Converter{
    int a = 0;

    static boolean RepeatConversion(){
        //caret
    }
}
```

Procedure: Complete a code construct

* Start typing a code construct and press `Ctrl+Shift+Enter` (Windows), `⌘ ⇧ ⏎` (macOS), `⌘ ⇧ ⏎` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ ⏎` (macOS System Shortcuts), `Ctrl+Shift+Enter` (XWin), `Ctrl+Shift+Enter` (GNOME), `Ctrl+Shift+Enter` (KDE), `Ctrl+Shift+Enter` (Emacs), `Ctrl+Shift+Enter` (Sublime Text), `Ctrl+Shift+Enter` (Sublime Text (macOS)), `Ctrl+Shift+Enter` (NetBeans), `Ctrl+Shift+Enter` (Visual Studio), `⌘ ⇧ ⏎` (Visual Studio (macOS)), `Ctrl+Shift+Enter` (Eclipse), `⌘ ⇧ ⏎` (Eclipse (macOS)).

IntelliJ IDEA automatically completes the construct and adds `end`. The caret is placed at the next editing position.

Before:

```JAVA
} catch (ArithmeticException e) {
     if(//caret)
}
```

After:

```JAVA
} catch (ArithmeticException e) {
    if(//caret){
    }
}
```

Procedure: Wrap a method call argument

* Type an expression. Then type a method call. When `println`  gets the focus in the suggestion list, select it with `Ctrl+Shift+Enter` (Windows), `⌘ ⇧ ⏎` (macOS), `⌘ ⇧ ⏎` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ ⏎` (macOS System Shortcuts), `Ctrl+Shift+Enter` (XWin), `Ctrl+Shift+Enter` (GNOME), `Ctrl+Shift+Enter` (KDE), `Ctrl+Shift+Enter` (Emacs), `Ctrl+Shift+Enter` (Sublime Text), `Ctrl+Shift+Enter` (Sublime Text (macOS)), `Ctrl+Shift+Enter` (NetBeans), `Ctrl+Shift+Enter` (Visual Studio), `⌘ ⇧ ⏎` (Visual Studio (macOS)), `Ctrl+Shift+Enter` (Eclipse), `⌘ ⇧ ⏎` (Eclipse (macOS)):

Before:

```JAVA
System.out.println"Hello, world!"
```

After:

```JAVA
System.out.println("Hello, world!");
```

## Hippie completion

Hippie completion is a completion engine that analyses your text in the visible scope and generates suggestions from the current context. It helps you complete any word from any of the currently opened files.

Procedure: Expand a string at caret to an existing word

1. Type the initial string and do one of the following:

* Press `Alt+/` (Windows), `⌥ /` (macOS), `⌥ /` (IntelliJ IDEA Classic (macOS)), `⌥ /` (macOS System Shortcuts), `Alt+/` (XWin), `Alt+/` (GNOME), `Alt+/` (KDE), `Alt+/` (Emacs), `Alt+/` (Sublime Text), `⌥ /` (Sublime Text (macOS)), `Ctrl+Shift+K` (NetBeans), `Alt+/` (Visual Studio), `⌥ /` (Visual Studio (macOS)), `Alt+/` (Eclipse), `⌃ .` (Eclipse (macOS)) or choose `Code | Code Completion | Cyclic Expand Word` to search for matching words before the caret.

* Press `Alt+Shift+/` (Windows), `⌥ ⇧ /` (macOS), `⌥ ⇧ /` (IntelliJ IDEA Classic (macOS)), `⌥ ⇧ /` (macOS System Shortcuts), `Alt+Shift+/` (XWin), `Alt+Shift+/` (GNOME), `Alt+Shift+/` (KDE), `Alt+Shift+/` (Emacs), `Alt+Shift+/` (Sublime Text), `⌥ ⇧ /` (Sublime Text (macOS)), `Ctrl+K` (NetBeans), `Alt+Shift+/` (Visual Studio), `⌥ ⇧ /` (Visual Studio (macOS)), `Alt+Shift+/` (Eclipse), `Alt+Shift+/` (Eclipse (macOS)) or choose `Code | Code Completion | Cyclic Expand Word (Backward)` to search for matching words after the caret and in other open files.

The first suggested value appears, and the prototype is highlighted in the source code.

[Video](https://resources.jetbrains.com/help/img/idea/2026.2/ij_hippie_completion.mp4)

2. Accept the suggestion or hold the `Alt` (Windows), `Alt` (macOS), `Alt` (IntelliJ IDEA Classic (macOS)), `Alt` (macOS System Shortcuts), `Alt` (XWin), `Alt` (GNOME), `Alt` (KDE), `Alt` (Emacs), `Alt` (Sublime Text), `Alt` (Sublime Text (macOS)), `Alt` (NetBeans), `Alt` (Visual Studio), `Alt` (Visual Studio (macOS)), `Alt` (Eclipse), `Alt` (Eclipse (macOS)) key and keep pressing `\` (Windows), `\` (macOS), `\` (IntelliJ IDEA Classic (macOS)), `\` (macOS System Shortcuts), `\` (XWin), `\` (GNOME), `\` (KDE), `\` (Emacs), `\` (Sublime Text), `\` (Sublime Text (macOS)), `\` (NetBeans), `\` (Visual Studio), `\` (Visual Studio (macOS)), `\` (Eclipse), `\` (Eclipse (macOS)) until you find the word you need.

## Completion of tags and attributes

IntelliJ IDEA automatically completes names and values of tags and attributes in many file types:

* HTML/XHTML, including [completion for CSS classes](css.html#ws_css_complete_class_in_html_tags) and for [HTML tags inside JSX](react.html#react_code_completion_html_tags_and_components). > **Tip:** > If [Emmet support is enabled](using-zen-coding-support.html#ws_emmet_enable), Emmet templates are also completed automatically in the HTML and XML contexts.

* [XML/XSL](null) > **Note:** > Available only in IntelliJ IDEA with the Ultimate subscription.

* JSP/JSPX > **Note:** > Available only in IntelliJ IDEA with the Ultimate subscription.

* GSP

* JSON. For more information, refer to [Editing package.json](installing-and-removing-external-software-using-node-package-manager.html#ws_npm_yarn_edit_package_json).

Completion of tags and attribute names is based on the [DTD or Schema](referencing-xml-schemas-and-dtds.html) the file is associated with. If there is no schema association, IntelliJ IDEA will use the file content (tag and attribute names and their values) to complete your input.

In XML/XSL and JSP/JSPX files, completion for taglibs and namespaces is available.

Procedure: Complete tag names

1. Type the opening `<` and then start typing the tag name. IntelliJ IDEA displays the list of tag names appropriate in the current context.

![Tags completion](https://resources.jetbrains.com/help/img/idea/2026.2/tags_completion.png)

Use the `Up` (Windows), `↑` (macOS), `↑` (IntelliJ IDEA Classic (macOS)), `↑` (macOS System Shortcuts), `Up` (XWin), `Up` (GNOME), `Up` (KDE), `Up` (Emacs), `Up` (Sublime Text), `↑` (Sublime Text (macOS)), `Up` (NetBeans), `Up` (Visual Studio), `↑` (Visual Studio (macOS)), `Up` (Eclipse), `↑` (Eclipse (macOS)) and `Down` (Windows), `↓` (macOS), `↓` (IntelliJ IDEA Classic (macOS)), `↓` (macOS System Shortcuts), `Down` (XWin), `Down` (GNOME), `Down` (KDE), `Down` (Emacs), `Down` (Sublime Text), `↓` (Sublime Text (macOS)), `Down` (NetBeans), `Down` (Visual Studio), `↓` (Visual Studio (macOS)), `Down` (Eclipse), `↓` (Eclipse (macOS)) keys to scroll through the list.

2. Press `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (NetBeans), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (Eclipse), `⏎` (Eclipse (macOS)) to accept a selection from the list. If your file is associated with a schema or a DTD, IntelliJ IDEA automatically inserts the mandatory attributes according to it.

Procedure: Import a taglib declaration

If you need to use tags declared in a tag library, you need to import this taglib before any custom tag from it can be used.

1. Start typing a taglib prefix and press `Alt+Insert` (Windows), `⌘ N` (macOS), `⌃ N` (IntelliJ IDEA Classic (macOS)), `⌘ N` (macOS System Shortcuts), `Alt+Insert` (XWin), `Alt+Insert` (GNOME), `Alt+Insert` (KDE), `Alt+Insert` (Emacs), `Alt+Insert` (Sublime Text), `⌘ N` (Sublime Text (macOS)), `Alt+Insert` (NetBeans), `Alt+Insert` (Visual Studio), `⌘ ⌃ N` (Visual Studio (macOS)), `Alt+Insert` (Eclipse), `⌘ N` (Eclipse (macOS)).

2. Select a taglib from the list and press `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (NetBeans), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (Eclipse), `⏎` (Eclipse (macOS)).

IntelliJ IDEA imports the selected taglib and adds the import statement automatically.

Procedure: Insert a tag declared in a taglib

1. Start typing a tag and press `Ctrl+Alt+Space` (Windows), `⌃ ⌥ Space` (macOS), `⌃ ⌥ Space` (IntelliJ IDEA Classic (macOS)), `⌃ ⌥ Space` (macOS System Shortcuts), `Ctrl+Alt+Space` (XWin), `Ctrl+Alt+Space` (GNOME), `Ctrl+Alt+Space` (KDE), `Ctrl+Alt+Space` (Emacs), `Ctrl+Alt+Space` (Sublime Text), `⌃ ⌥ Space` (Sublime Text (macOS)), `Ctrl+Alt+Space` (NetBeans), `Alt+Shift+Space` (Visual Studio), `⌥ ⇧ Space` (Visual Studio (macOS)), `Ctrl+Alt+Space` (Eclipse), `⌃ ⌥ Space` (Eclipse (macOS)).

2. Select a tag from the list. The `uri` of the taglib it belongs to is displayed in brackets.

3. Select a taglib and press `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (NetBeans), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (Eclipse), `⏎` (Eclipse (macOS)). IntelliJ IDEA adds the declaration of the selected taglib.

