KT-4018 When moving members move comments too

This commit is contained in:
Alexey Sedunov
2013-10-14 15:39:25 +04:00
parent 28b3db53fe
commit 71a0d4cc45
116 changed files with 478 additions and 58 deletions
@@ -21,20 +21,30 @@ public abstract class AbstractJetUpDownMover extends LineMover {
}
protected abstract boolean checkSourceElement(@NotNull PsiElement element);
protected abstract LineRange getElementSourceLineRange(@NotNull PsiElement element, @NotNull Editor editor, @NotNull LineRange oldRange);
protected abstract LineRange getElementSourceLineRange(
@NotNull PsiElement element,
@NotNull Editor editor,
@NotNull LineRange oldRange
);
protected PsiElement adjustElement(PsiElement element, Editor editor, boolean first) {
return element;
}
protected final Pair<PsiElement, PsiElement> adjustElementRange(Pair<PsiElement, PsiElement> elementRange, Editor editor) {
PsiElement first = adjustElement(elementRange.first, editor, true);
PsiElement second = adjustElement(elementRange.second, editor, false);
return new Pair<PsiElement, PsiElement>(first, second);
}
@Nullable
protected LineRange getSourceRange(@NotNull PsiElement firstElement, @NotNull PsiElement lastElement, @NotNull Editor editor, LineRange oldRange) {
if (firstElement == lastElement) {
LineRange sourceRange = getElementSourceLineRange(firstElement, editor, oldRange);
if (sourceRange != null) {
sourceRange.firstElement = sourceRange.lastElement = firstElement;
}
return sourceRange;
}
protected LineRange getSourceRange(
@NotNull PsiElement firstElement,
@NotNull PsiElement lastElement,
@NotNull Editor editor,
LineRange oldRange
) {
PsiElement parent = PsiTreeUtil.findCommonParent(firstElement, lastElement);
int topExtension = 0;
@@ -50,7 +60,8 @@ public abstract class AbstractJetUpDownMover extends LineMover {
comment = lastElement;
extendDown = true;
lastElement = block.getLastChild();
} else if (checkCommentAtBlockBound(lastElement, firstElement, block)) {
}
else if (checkCommentAtBlockBound(lastElement, firstElement, block)) {
comment = firstElement;
firstElement = block.getFirstChild();
}
@@ -72,11 +83,12 @@ public abstract class AbstractJetUpDownMover extends LineMover {
if (parent == null) return null;
Pair<PsiElement, PsiElement> combinedRange = getElementRange(parent, firstElement, lastElement);
Pair<PsiElement, PsiElement> originalRange = getElementRange(parent, firstElement, lastElement);
Pair<PsiElement, PsiElement> combinedRange = adjustElementRange(originalRange, editor);
if (combinedRange == null
|| !checkSourceElement(combinedRange.first)
|| !checkSourceElement(combinedRange.second)) {
|| !checkSourceElement(originalRange.first)
|| !checkSourceElement(originalRange.second)) {
return null;
}
@@ -89,9 +101,14 @@ public abstract class AbstractJetUpDownMover extends LineMover {
LineRange parentLineRange = getElementSourceLineRange(parent, editor, oldRange);
LineRange sourceRange = new LineRange(lineRange1.startLine - topExtension, lineRange2.endLine + bottomExtension);
if (parentLineRange != null && sourceRange.contains(parentLineRange)) {
if (parentLineRange != null
&& sourceRange.startLine == parentLineRange.startLine
&& sourceRange.endLine == parentLineRange.endLine
) {
sourceRange.firstElement = sourceRange.lastElement = parent;
} else {
}
else {
sourceRange.firstElement = combinedRange.first;
sourceRange.lastElement = combinedRange.second;
}
@@ -107,10 +107,12 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
}
@Nullable
private static PsiElement skipInsignificantElements(@NotNull PsiElement element, boolean down) {
private static PsiElement skipInsignificantElements(@Nullable PsiElement element, boolean down) {
if (element == null) return null;
PsiElement result = element;
while (result instanceof PsiWhiteSpace || result.getTextLength() == 0) {
while (result instanceof PsiWhiteSpace || result instanceof PsiComment || result.getTextLength() == 0) {
result = down ? result.getNextSibling() : result.getPrevSibling();
if (result == null) break;
}
@@ -120,12 +122,19 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
@Override
protected LineRange getElementSourceLineRange(@NotNull PsiElement element, @NotNull Editor editor, @NotNull LineRange oldRange) {
JetDeclaration declaration = (JetDeclaration) element;
PsiElement first;
PsiElement last;
PsiElement first = skipInsignificantElements(declaration.getFirstChild(), true);
PsiElement last = skipInsignificantElements(declaration.getLastChild(), false);
if (element instanceof JetDeclaration) {
first = skipInsignificantElements(element.getFirstChild(), true);
last = skipInsignificantElements(element.getLastChild(), false);
if (first == null || last == null) return null;
}
else {
first = last = element;
}
if (first == null || last == null) return null;
TextRange textRange1 = first.getTextRange();
TextRange textRange2 = last.getTextRange();
@@ -137,21 +146,29 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
int startLine = editor.offsetToLogicalPosition(textRange1.getStartOffset()).line;
int endLine = editor.offsetToLogicalPosition(textRange2.getEndOffset()).line + 1;
if (startLine == oldRange.startLine || startLine == oldRange.endLine
if (element instanceof PsiComment
|| startLine == oldRange.startLine || startLine == oldRange.endLine
|| endLine == oldRange.startLine || endLine == oldRange.endLine) {
return new LineRange(startLine, endLine);
}
TextRange lineTextRange = new TextRange(doc.getLineStartOffset(oldRange.startLine),
doc.getLineEndOffset(oldRange.endLine));
for (PsiElement anchor : getDeclarationAnchors(declaration)) {
TextRange suspectTextRange = anchor.getTextRange();
if (suspectTextRange != null && lineTextRange.intersects(suspectTextRange)) return new LineRange(startLine, endLine);
if (element instanceof JetDeclaration) {
for (PsiElement anchor : getDeclarationAnchors((JetDeclaration) element)) {
TextRange suspectTextRange = anchor.getTextRange();
if (suspectTextRange != null && lineTextRange.intersects(suspectTextRange)) return new LineRange(startLine, endLine);
}
}
return null;
}
@Override
protected PsiElement adjustElement(PsiElement element, Editor editor, boolean first) {
return first ? getTopmostSiblingCommentOrOriginal(element, editor) : element;
}
@Nullable
private static LineRange getTargetRange(
@NotNull Editor editor,
@@ -164,6 +181,10 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
PsiElement nextParent = null;
if (target instanceof PsiComment) {
target = PsiTreeUtil.getNextSiblingOfType(target, JetDeclaration.class);
}
// moving out of code block
if (sibling.getNode().getElementType() == (down ? JetTokens.RBRACE : JetTokens.LBRACE)) {
// elements which aren't immediately placed in class body can't leave the block
@@ -181,15 +202,24 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
}
// moving into code block
// element may move only into class body
else if (sibling instanceof JetClassOrObject) {
JetClassOrObject jetClassOrObject = (JetClassOrObject) sibling;
JetClassBody classBody = jetClassOrObject.getBody();
else {
PsiElement adjustedSibling = sibling;
if (adjustedSibling instanceof PsiComment || isEmptyNamespaceHeader(adjustedSibling)) {
adjustedSibling = PsiTreeUtil.getNextSiblingOfType(adjustedSibling, JetDeclaration.class);
}
// confined elements can't leave their block
if (classBody != null) {
nextParent = classBody;
start = down ? jetClassOrObject : classBody.getRBrace();
end = down ? classBody.getLBrace() : classBody.getRBrace();
if (adjustedSibling instanceof JetClassOrObject) {
JetClassOrObject jetClassOrObject = (JetClassOrObject) adjustedSibling;
JetClassBody classBody = jetClassOrObject.getBody();
// confined elements can't leave their block
if (classBody != null) {
nextParent = classBody;
if (!down) {
start = classBody.getRBrace();
}
end = down ? classBody.getLBrace() : classBody.getRBrace();
}
}
}
@@ -208,16 +238,30 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
if (target instanceof JetPropertyAccessor && !(sibling instanceof JetPropertyAccessor)) return null;
if (start != null && start.getFirstChild() != null) {
if (!down && start instanceof JetDeclaration) {
start = getTopmostSiblingCommentOrOriginal(start, editor);
}
else if (start != null && start.getFirstChild() != null) {
start = skipInsignificantElements(start.getFirstChild(), true);
}
if (end != null && end.getFirstChild() != null) {
if (down && end instanceof PsiComment) {
PsiElement nextDeclaration = PsiTreeUtil.getNextSiblingOfType(end, JetDeclaration.class);
if (nextDeclaration != null) {
end = nextDeclaration;
}
}
else if (end != null && end.getFirstChild() != null) {
end = skipInsignificantElements(end.getLastChild(), false);
}
return start != null && end != null ? new LineRange(start, end, editor.getDocument()) : null;
}
private static boolean isEmptyNamespaceHeader(PsiElement adjustedSibling) {
return adjustedSibling instanceof JetNamespaceHeader && adjustedSibling.getTextLength() == 0;
}
@Override
public boolean checkAvailable(@NotNull Editor editor, @NotNull PsiFile file, @NotNull MoveInfo info, boolean down) {
if (!super.checkAvailable(editor, file, info, down)) return false;
@@ -249,4 +293,19 @@ public class JetDeclarationMover extends AbstractJetUpDownMover {
info.toMove2 = getTargetRange(editor, sibling, down, sourceRange.firstElement);
return true;
}
@NotNull
private static PsiElement getTopmostSiblingCommentOrOriginal(@NotNull PsiElement originalElement, @NotNull Editor editor) {
PsiElement element = originalElement;
PsiElement sibling = element.getPrevSibling();
while (sibling instanceof PsiComment
|| (sibling instanceof PsiWhiteSpace && getElementLineCount(sibling, editor) <= 1)
|| (sibling != null && (sibling.getText() == null || sibling.getText().isEmpty()))) {
if (sibling instanceof PsiComment) {
element = sibling;
}
sibling = sibling.getPrevSibling();
}
return element;
}
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// val x
val x = ""
// class B
<caret>class B {
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// val x
val x = ""
}
// class B
<caret>class B {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// class B
<caret>class B {
}
// val y
val y = ""
}
@@ -1,8 +1,11 @@
// MOVE: up
// class B
<caret>class B {
}
// MOVE: up
// class A
class A {
// val y
val y = ""
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// class B
class B {
<caret>class B {
// class C
<caret>class C {
}
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// class B
class B {
}
<caret>class B {
// class C
<caret>class C {
}
}
@@ -1,7 +1,10 @@
// MOVE: up
// class A
class A {
// class B
class B {
<caret>class B {
// class C
<caret>class C {
}
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
<caret>class B {
// class C
<caret>class C {
}
// class B
class B {
}
}
@@ -1,6 +1,9 @@
// MOVE: down
// fun foo
fun foo() {
// class A
class A {
// class B
<caret>class B {
}
@@ -1,7 +1,10 @@
// MOVE: down
// fun foo
fun foo() {
// class A
class A {
}
// class B
<caret>class B {
}
@@ -1,6 +1,9 @@
// MOVE: up
// fun foo
fun foo() {
// class A
class A {
// class B
<caret>class B {
}
@@ -1,8 +1,11 @@
// MOVE: up
// fun foo
fun foo() {
// class B
<caret>class B {
}
// class A
class A {
}
}
@@ -1,9 +1,12 @@
// MOVE: down
// class A
class A {
// class B
<caret>class B {
}
class B {
// class C
class C {
}
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
class B {
<caret>class B {
// class C
class C {
// class B
class B {
}
@@ -1,9 +1,12 @@
// MOVE: up
// class A
class A {
// class B
class B {
}
<caret>class B {
// class C
<caret>class C {
}
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// class B
class B {
<caret>class B {
// class C
<caret>class C {
}
}
@@ -1,5 +1,7 @@
// MOVE: down
// class A
class A {
// class B
<caret>class B {
}
@@ -1,8 +1,10 @@
// MOVE: down
// class A
class A {
{
}
// class B
<caret>class B {
}
@@ -1,8 +1,10 @@
// MOVE: up
// class A
class A {
{
}
// class B
<caret>class B {
}
@@ -1,5 +1,7 @@
// MOVE: up
// class A
class A {
// class B
<caret>class B {
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// class B
<caret>class B {
}
// val y
val y = ""
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// val y
val y = ""
// class B
<caret>class B {
}
@@ -1,7 +1,10 @@
// MOVE: up
// class A
class A {
// val x
val x = ""
// class B
<caret>class B {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// class B
<caret>class B {
}
// val x
val x = ""
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// class B
<caret>class B {
}
// fun foo
fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// fun foo
fun foo() {
}
// class B
<caret>class B {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// fun foo
fun foo() {
}
// class B
<caret>class B {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// class B
<caret>class B {
}
// fun foo
fun foo() {
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// class B
<caret>class B {
}
// val y
val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// val y
val y = ""
// class B
<caret>class B {
}
@@ -1,6 +1,9 @@
// MOVE: up
// class A
class A {
// val y
val y = ""
// class B
<caret>class B {
}
@@ -1,7 +1,10 @@
// MOVE: up
// class A
class A {
// class B
<caret>class B {
}
// val y
val y = ""
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
<caret>class A
// class D
class D {
}
// class C
class C {
}
@@ -1,8 +1,11 @@
// MOVE: down
// class D
class D {
// MOVE: down
// class A
<caret>class A
}
// class C
class C {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class D
class D {
}
// class A
<caret>class A
// class C
class C {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class D
class D {
// class A
<caret>class A
}
// class C
class C {
}
@@ -1,5 +1,7 @@
// MOVE: down
// class A
<caret>class A
// class D
class D {
}
@@ -1,5 +1,7 @@
// MOVE: down
// class D
class D {
// MOVE: down
// class A
<caret>class A
}
@@ -1,5 +1,7 @@
// MOVE: up
// class D
class D {
}
// class A
<caret>class A
@@ -1,5 +1,7 @@
// MOVE: up
// class D
class D {
// class A
<caret>class A
}
@@ -1,7 +1,11 @@
// MOVE: down
// class A
class A {
// class B
enum class B {
// X
<caret>X
// Y
Y
}
}
@@ -1,7 +1,11 @@
// MOVE: down
// class A
class A {
// class B
enum class B {
// Y
Y
// X
<caret>X
}
}
@@ -1,8 +1,12 @@
// MOVE: up
// IS_APPLICABLE: false
// class A
class A {
// class B
enum class B {
// X
<caret>X
// Y
Y
}
}
@@ -1,8 +1,12 @@
// MOVE: down
// IS_APPLICABLE: false
// class A
class A {
// class B
enum class B {
// X
X
// Y
<caret>Y
}
}
@@ -1,7 +1,11 @@
// MOVE: up
// class A
class A {
// class B
enum class B {
// X
X
// Y
<caret>Y
}
}
@@ -1,7 +1,11 @@
// MOVE: up
// class A
class A {
// class B
enum class B {
// Y
<caret>Y
// X
X
}
}
@@ -1,10 +1,16 @@
// MOVE: up
// class A
enum class A {
// U
U
// V
V
// class B
enum class B {
// X
<caret>X
// Y
Y
}
}
@@ -1,10 +1,16 @@
// MOVE: up
// class A
enum class A {
// U
U
// V
V
<caret>X
// X
X
// class B
enum class B {
// Y
Y
}
}
@@ -1,10 +1,16 @@
// MOVE: down
// class A
enum class A {
// U
U
// V
V
// class B
enum class B {
// X
X
// Y
<caret>Y
}
}
@@ -1,10 +1,16 @@
// MOVE: down
// class A
enum class A {
// U
U
// V
V
// class B
enum class B {
// X
X
}
// Y
<caret>Y
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// val x
val x = ""
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// val x
val x = ""
}
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// fun foo
<caret>fun foo() {
}
// val y
val y = ""
}
@@ -1,8 +1,11 @@
// MOVE: up
// fun foo
<caret>fun foo() {
}
// MOVE: up
// class A
class A {
// val y
val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// class B
class B {
// fun foo
<caret>fun foo() {
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// class B
class B {
}
// fun foo
<caret>fun foo() {
}
@@ -1,6 +1,9 @@
// MOVE: up
// class A
class A {
// class B
class B {
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// fun foo
<caret>fun foo() {
}
// class B
class B {
}
}
@@ -1,6 +1,9 @@
// MOVE: down
// fun foo
fun foo() {
// class B
class B {
// fun foo
<caret>fun foo() {
}
@@ -1,7 +1,10 @@
// MOVE: down
// fun foo
fun foo() {
// class B
class B {
}
// fun foo
<caret>fun foo() {
}
@@ -1,6 +1,9 @@
// MOVE: up
// fun foo
fun foo() {
// class B
class B {
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: up
// fun foo
fun foo() {
// fun foo
<caret>fun foo() {
}
// class B
class B {
}
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// fun foo
<caret>fun foo() {
}
// class B
class B {
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// class B
class B {
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// class B
class B {
}
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// class B
class B {
<caret>fun foo() {
// fun foo
fun foo() {
}
}
@@ -1,5 +1,7 @@
// MOVE: down
// class A
class A {
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,10 @@
// MOVE: down
// class A
class A {
{
}
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,10 @@
// MOVE: up
// class A
class A {
{
}
// fun foo
<caret>fun foo() {
}
@@ -1,5 +1,7 @@
// MOVE: up
// class A
class A {
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
// fun foo
<caret>fun foo() {
}
// val y
val y = ""
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// val y
val y = ""
// fun foo
<caret>fun foo() {
}
@@ -1,7 +1,10 @@
// MOVE: up
// class A
class A {
// val x
val x = ""
// fun foo
<caret>fun foo() {
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
// fun foo
<caret>fun foo() {
}
// val x
val x = ""
}
@@ -1,9 +1,12 @@
// MOVE: down
// class A
class A {
// fun foo
<caret>fun foo() {
}
fun foo() {
// fun bar
fun bar() {
}
}
@@ -1,8 +1,11 @@
// MOVE: down
// class A
class A {
fun foo() {
// fun bar
fun bar() {
}
// fun foo
<caret>fun foo() {
}
@@ -1,9 +1,12 @@
// MOVE: up
// class A
class A {
// fun foo
fun foo() {
}
<caret>fun foo() {
// fun bar
<caret>fun bar() {
}
}
@@ -1,8 +1,11 @@
// MOVE: up
// class A
class A {
<caret>fun foo() {
// fun bar
<caret>fun bar() {
}
// fun foo
fun foo() {
}
@@ -1,7 +1,10 @@
// MOVE: down
// class A
class A {
// fun foo
<caret>fun foo() {
}
// val y
val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// val y
val y = ""
// fun foo
<caret>fun foo() {
}
@@ -1,6 +1,9 @@
// MOVE: up
// class A
class A {
// val y
val y = ""
// fun foo
<caret>fun foo() {
}
@@ -1,7 +1,10 @@
// MOVE: up
// class A
class A {
// fun foo
<caret>fun foo() {
}
// val y
val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// val x
val x = ""
// val y
<caret>val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// val x
val x = ""
}
// val y
<caret>val y = ""
@@ -1,6 +1,9 @@
// MOVE: up
// class A
class A {
// val x
<caret>val x = ""
// val y
val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: up
// val x
<caret>val x = ""
// MOVE: up
// class A
class A {
// val y
val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// class B
class B {
// val y
<caret>val y = ""
}
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// class B
class B {
}
// val y
<caret>val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: up
// class A
class A {
// class B
class B {
// val y
<caret>val y = ""
}
}
@@ -1,6 +1,9 @@
// MOVE: up
// class A
class A {
// val y
<caret>val y = ""
// class B
class B {
}
}
@@ -1,6 +1,9 @@
// MOVE: down
// fun foo
fun foo() {
// class B
class B {
// val y
<caret>val y = ""
}
}
@@ -1,6 +1,9 @@
// MOVE: down
// fun foo
fun foo() {
// class B
class B {
}
// val y
<caret>val y = ""
}
@@ -1,6 +1,9 @@
// MOVE: up
// fun foo
fun foo() {
// class B
class B {
// val y
<caret>val y = ""
}
}
@@ -1,6 +1,9 @@
// MOVE: up
// fun foo
fun foo() {
// val y
<caret>val y = ""
// class B
class B {
}
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// val x
<caret>val x = ""
// class B
class B {
}
@@ -1,6 +1,9 @@
// MOVE: down
// class A
class A {
// class B
class B {
// val x
<caret>val x = ""
}
@@ -1,7 +1,10 @@
// MOVE: up
// class A
class A {
// class B
class B {
}
// val x
<caret>val x = ""
}
@@ -1,7 +1,10 @@
// MOVE: up
// class A
class A {
// class B
class B {
// val x
<caret>val x = ""
}
}

Some files were not shown because too many files have changed in this diff Show More