Inline
The Inline refactoring lets you reverse the Extract refactoring for a method, constructor, parameter, superclass, anonymous class, and closure (for Swift).
You can inline the pattern variable since the Java 14 version. In this case, all the occurrences will be replaced with old-style cast expression.
Place the caret at the code fragment you want to inline.
Press Ctrl+Alt+N. Alternatively, right-click the code fragment and go to the
menu. Select the inline refactoring that you need.In the Inline dialog, specify the inlining options.
Preview and apply changes.
Examples
Inline Variable
Inline Variable refactoring replaces redundant variable usage with its initializer.
Before | After |
---|---|
public void method() {
int number = anotherClass.intValue();
int b = a + number;
}
|
public void method() {
int b = a + anotherClass.intValue();
}
|
public void method() {
AnotherClass.InnerClass aClass = anotherClass.innerClass;
int a = aClass.i;
}
|
public void method() {
int a = anotherClass.innerClass.i;
}
|
Inline Method
Inline Method results in placing method's body into the body of its caller(s).
Before | After |
---|---|
public void method() {
int c=add(a,b);
int d=add(a,c);
}
private int add(int a, int b) {
return a+b;
}
|
public void method() {
int c= a + b;
int d= a + c;
}
|
public ArrayList method() {
String[] strings = {"a","b","c"};
ArrayList list=add(strings);
return list;
}
private ArrayList add(String[] strings) {
ArrayList list = new ArrayList();
for (int i=0; i< strings.length; i++)
{list.add(strings[i]);}
return list;
}
|
public ArrayList method() {
String[] strings = {"a","ab","abc"};
ArrayList list1 = new ArrayList();
for (int i=0; i< strings.length; i++)
{list.add(strings[i]);}
ArrayList list = list1;
return list;
}
|
Inline Constructor
Inline Constructor allows compressing a chain of constructors, if one of them is a special case of another.
Before | After |
---|---|
public class Class {
public int varInt;
public Class() {
this(0);
}
public Class(int i) {
varInt=i;
}
public void method() {
Class aClass=new Class();
...
}
}
|
public class Class {
public int varInt;
public Class(int i) {
varInt=i;
}
public void method() {
Class aClass=new Class(0);
...
}
}
|
Inline Superclass
The Inline Superclass refactoring results in pushing superclass' methods into the class where they are used, and removing the superclass.
Before | After |
---|---|
public class Bar {
...
int calculations1() { ... }
int calculations2() { ... }
}
class Foo extends Bar {
int someMethod() {
...
if (something > calculations1()) {
...
return calculations2();
}
...
}
}
|
class Foo {
...
int someMethod() {
...
if (something > calculations1()) {
...
return calculations2();
}
...
}
int calculations1() {...}
int calculations2() {...}
}
|
Inline to Anonymous Class
Inline to Anonymous Class refactoring allows replacing redundant class with its contents. Starting with Java 8, the inlined anonymous classes can be converted to lambdas automatically.
Before | After |
---|---|
import java.util.*;
public class Main {
public class MyComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return 0;
}
}
void sort(List<String> scores) {
scores.sort(new MyComparator());
}
}
|
import java.util.*;
public class Main {
void sort(List<String> scores) {
scores.sort((s1, s2) -> 0);
}
}
|