Skip to content

Commit

Permalink
Added hint about extract class
Browse files Browse the repository at this point in the history
  • Loading branch information
Anna Potriasaeva authored and onewhl committed Apr 23, 2023
1 parent 4586c81 commit 63f5a65
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public RefactoringInfo specify(Refactoring refactoring, RefactoringInfo info) {
.setNameBefore(ref.getExtractedClass().getName())
.setNameAfter(ref.getExtractedClass().getName());

info.setFoldingDescriptorAfter(FoldingBuilder.fromClass(ref.getExtractedClass()));

ref.getExtractedAttributes().keySet().forEach(attribute -> info.addMarking(
createCodeRangeFromJava(attribute.codeRange()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ public class RefactoringFolder {
FoldingHandler moveClassHandler = new MoveClassFoldingHandler();
foldingHandlers.put(RefactoringType.MOVE_CLASS.getName(), moveClassHandler);
foldingHandlers.put(RefactoringType.MOVE_RENAME_CLASS.getName(), moveClassHandler);
FoldingHandler extractClassHandler = new ExtractClassFoldingHandler();
foldingHandlers.put(RefactoringType.EXTRACT_CLASS.getName(), extractClassHandler);
foldingHandlers.put(RefactoringType.EXTRACT_SUBCLASS.getName(), extractClassHandler);
foldRegions = new HashSet<>();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package org.jetbrains.research.refactorinsight.folding.handlers;

import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.research.refactorinsight.data.RefactoringInfo;
import org.jetbrains.research.refactorinsight.folding.FoldingDescriptor;
import org.jetbrains.research.refactorinsight.utils.TextUtils;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class ExtractClassFoldingHandler implements FoldingHandler {
@Override
public @NotNull List<FoldingDescriptor> getFolds(@NotNull RefactoringInfo info, @NotNull PsiFile file, boolean isBefore) {
String path = isBefore ? info.getLeftPath() : info.getRightPath();
if (isBefore || !file.getVirtualFile().getPath().endsWith(path)) {
return Collections.emptyList();
}
FoldingDescriptor descriptor = info.getFoldingDescriptorAfter();
if (!descriptor.hasHintText()) {
String details = TextUtils.skipPackages(info.getDetailsBefore());
String hintText = "Extracted from " + details;
descriptor.addHintText(hintText);
}
return Collections.singletonList(descriptor);
}

@Override
public @NotNull FoldingDescriptor uniteFolds(@NotNull List<FoldingDescriptor> folds) {
FoldingDescriptor descriptor = folds.get(0);
if (!descriptor.isHintTextUnited()) {
String hintText = "Extracted from ";
List<String> hints = folds.stream().map(FoldingDescriptor::getHintText).collect(Collectors.toList());
hints = hints.stream().map(hint -> hint.substring("Extracted from ".length())).collect(Collectors.toList());

if (hints.size() < 4) {
hintText += String.join(", ", hints) + " classes";
} else {
hintText += hints.size() + " classes";
}
descriptor.addHintText(hintText);

String finalHintText = hintText;
folds.forEach(eachDescriptor -> eachDescriptor.addUnitedHintText(finalHintText));
}

return descriptor;
}
}

0 comments on commit 63f5a65

Please sign in to comment.