Java: true intention preview for CreateFieldFromParameterAction

GitOrigin-RevId: 6bf4085d54fdebb2ea7ba0ea5c544e8a8291ced8
This commit is contained in:
Bas Leijdekkers
2023-02-05 14:06:15 +00:00
committed by intellij-monorepo-bot
parent 272585bf3c
commit 1f7adc4631
41 changed files with 54 additions and 44 deletions
@@ -1,7 +1,9 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.intention.impl;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo;
import com.intellij.codeInsight.intention.preview.IntentionPreviewUtils;
import com.intellij.java.JavaBundle;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -59,6 +61,14 @@ public abstract class CreateFieldFromParameterActionBase extends BaseIntentionAc
}
}
@Override
public @NotNull IntentionPreviewInfo generatePreview(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
PsiParameter parameter = FieldFromParameterUtils.findParameterAtCursor(file, editor);
if (parameter == null) return IntentionPreviewInfo.EMPTY;
processParameter(project, parameter, false);
return IntentionPreviewInfo.DIFF;
}
private void processParameter(@NotNull Project project,
@NotNull PsiParameter myParameter,
boolean isInteractive) {
@@ -67,8 +77,6 @@ public abstract class CreateFieldFromParameterActionBase extends BaseIntentionAc
String parameterName = myParameter.getName();
String propertyName = styleManager.variableNameToPropertyName(parameterName, VariableKind.PARAMETER);
String fieldNameToCalc;
boolean isFinalToCalc;
PsiClass targetClass = PsiTreeUtil.getParentOfType(myParameter, PsiClass.class);
if (targetClass == null) return;
PsiMethod method = (PsiMethod)myParameter.getDeclarationScope();
@@ -79,6 +87,8 @@ public abstract class CreateFieldFromParameterActionBase extends BaseIntentionAc
SuggestedNameInfo suggestedNameInfo = styleManager.suggestVariableName(kind, propertyName, null, type);
String[] names = suggestedNameInfo.names;
String fieldNameToCalc;
boolean isFinalToCalc;
if (isInteractive) {
List<String> namesList = new ArrayList<>();
ContainerUtil.addAll(namesList, names);
@@ -113,7 +123,7 @@ public abstract class CreateFieldFromParameterActionBase extends BaseIntentionAc
boolean isFinal = isFinalToCalc;
String fieldName = fieldNameToCalc;
ApplicationManager.getApplication().runWriteAction(() -> {
IntentionPreviewUtils.write(() -> {
try {
performRefactoring(project, targetClass, method, myParameter, type, fieldName, isMethodStatic, isFinal);
}
@@ -1,4 +1,4 @@
// "Create field for parameter 'id'" "true"
// "Create field for parameter 'id'" "true-preview"
class Person {
private String __fname;
@@ -1,4 +1,4 @@
// "Create field for parameter 'test'" "true"
// "Create field for parameter 'test'" "true-preview"
package codeInsight.createFieldFromParameterAction.test1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'length'" "true"
// "Create field for parameter 'length'" "true-preview"
package codeInsight.createFieldFromParameterAction.test1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
private final int myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
int myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
int myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
private static int p1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
int b;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
private String[] myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
import java.util.*;
class Test{
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test<T>{
private T myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
enum Test{
A;//comment
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
import java.util.*;
class Test<T>{
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
import java.util.*;
class Test{
@@ -1,4 +1,4 @@
// "Create field for parameter 'name'" "true"
// "Create field for parameter 'name'" "true-preview"
import org.jetbrains.annotations.NotNull;
@@ -1,4 +1,4 @@
// "Create field for parameter 'name'" "true"
// "Create field for parameter 'name'" "true-preview"
import org.jetbrains.annotations.NotNull;
@@ -1,4 +1,4 @@
// "Create field for parameter 'name'" "true"
// "Create field for parameter 'name'" "true-preview"
package codeInsight.createFieldFromParameterAction.test1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'val'" "true"
// "Create field for parameter 'val'" "true-preview"
import java.util.Objects;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
private Object myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
private String myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'id'" "true"
// "Create field for parameter 'id'" "true-preview"
class Person {
private String __fname, __lname, __street;
@@ -1,4 +1,4 @@
// "Create field for parameter 'test'" "true"
// "Create field for parameter 'test'" "true-preview"
package codeInsight.createFieldFromParameterAction.test1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'length'" "true"
// "Create field for parameter 'length'" "true-preview"
package codeInsight.createFieldFromParameterAction.test1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
int myP2;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
int myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
int myP1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
static void f(int p<caret>1){
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
int b;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
void f(String[] p<caret>1){
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
import java.util.*;
class Test{
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test<T>{
void f(T p<caret>1){
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
enum Test{
A;//comment
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
import java.util.*;
class Test<T>{
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
import java.util.*;
class Test{
@@ -1,4 +1,4 @@
// "Create field for parameter 'name'" "true"
// "Create field for parameter 'name'" "true-preview"
import org.jetbrains.annotations.NotNull;
@@ -1,4 +1,4 @@
// "Create field for parameter 'name'" "true"
// "Create field for parameter 'name'" "true-preview"
import org.jetbrains.annotations.NotNull;
@@ -1,4 +1,4 @@
// "Create field for parameter 'name'" "true"
// "Create field for parameter 'name'" "true-preview"
package codeInsight.createFieldFromParameterAction.test1;
@@ -1,4 +1,4 @@
// "Create field for parameter 'val'" "true"
// "Create field for parameter 'val'" "true-preview"
import java.util.Objects;
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
<T> void f(T p<caret>1){
@@ -1,4 +1,4 @@
// "Create field for parameter 'p1'" "true"
// "Create field for parameter 'p1'" "true-preview"
class Test{
<T extends String> void f(T p<caret>1){