Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.intellij.java.impl.codeInsight.generation.actions;

import consulo.annotation.access.RequiredReadAction;
import consulo.language.editor.action.CodeInsightActionHandler;
import consulo.language.editor.action.CodeInsightAction;
import consulo.language.editor.generation.GenerateActionPopupTemplateInjector;
import com.intellij.java.language.psi.PsiClass;
import com.intellij.java.language.psi.PsiJavaFile;
import consulo.language.editor.refactoring.ContextAwareActionHandler;
import consulo.localize.LocalizeValue;
import consulo.ui.ex.action.AnAction;
import consulo.dataContext.DataContext;
import consulo.ui.ex.action.Presentation;
Expand All @@ -34,59 +35,69 @@
import jakarta.annotation.Nullable;

public class BaseGenerateAction extends CodeInsightAction implements GenerateActionPopupTemplateInjector {
private final CodeInsightActionHandler myHandler;

public BaseGenerateAction(CodeInsightActionHandler handler) {
myHandler = handler;
}
private final CodeInsightActionHandler myHandler;

@Override
protected void update(@Nonnull Presentation presentation, @Nonnull Project project, @Nonnull Editor editor, @Nonnull PsiFile file, @Nonnull DataContext dataContext, @Nullable String actionPlace) {
super.update(presentation, project, editor, file, dataContext, actionPlace);
if (myHandler instanceof ContextAwareActionHandler && presentation.isEnabled()) {
presentation.setEnabled(((ContextAwareActionHandler) myHandler).isAvailableForQuickList(editor, file, dataContext));
public BaseGenerateAction(CodeInsightActionHandler handler, @Nonnull LocalizeValue text) {
myHandler = handler;
getTemplatePresentation().setTextValue(text);
}
}

@Override
@Nullable
public AnAction createEditTemplateAction(DataContext dataContext) {
return null;
}

@Nonnull
@Override
protected final CodeInsightActionHandler getHandler() {
return myHandler;
}
@Override
protected void update(
@Nonnull Presentation presentation,
@Nonnull Project project,
@Nonnull Editor editor,
@Nonnull PsiFile file,
@Nonnull DataContext dataContext,
@Nullable String actionPlace
) {
super.update(presentation, project, editor, file, dataContext, actionPlace);
if (myHandler instanceof ContextAwareActionHandler contextAwareHandler && presentation.isEnabled()) {
presentation.setEnabled(contextAwareHandler.isAvailableForQuickList(editor, file, dataContext));
}
}

@Nullable
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
int offset = editor.getCaretModel().getOffset();
PsiElement element = file.findElementAt(offset);
if (element == null) {
return null;
@Override
@Nullable
public AnAction createEditTemplateAction(DataContext dataContext) {
return null;
}
final PsiClass target = PsiTreeUtil.getParentOfType(element, PsiClass.class);
return target instanceof SyntheticElement ? null : target;
}

@Override
protected boolean isValidForFile(@Nonnull Project project, @Nonnull Editor editor, @Nonnull PsiFile file) {
if (!(file instanceof PsiJavaFile)) {
return false;
@Nonnull
@Override
protected final CodeInsightActionHandler getHandler() {
return myHandler;
}
if (file instanceof PsiCompiledElement) {
return false;

@Nullable
@RequiredReadAction
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
int offset = editor.getCaretModel().getOffset();
PsiElement element = file.findElementAt(offset);
if (element == null) {
return null;
}
PsiClass target = PsiTreeUtil.getParentOfType(element, PsiClass.class);
return target instanceof SyntheticElement ? null : target;
}

PsiDocumentManager.getInstance(project).commitAllDocuments();
@Override
@RequiredReadAction
protected boolean isValidForFile(@Nonnull Project project, @Nonnull Editor editor, @Nonnull PsiFile file) {
if (!(file instanceof PsiJavaFile)) {
return false;
}
if (file instanceof PsiCompiledElement) {
return false;
}

PsiDocumentManager.getInstance(project).commitAllDocuments();

PsiClass targetClass = getTargetClass(editor, file);
return targetClass != null && isValidForClass(targetClass);
}
PsiClass targetClass = getTargetClass(editor, file);
return targetClass != null && isValidForClass(targetClass);
}

protected boolean isValidForClass(final PsiClass targetClass) {
return !targetClass.isInterface();
}
protected boolean isValidForClass(PsiClass targetClass) {
return !targetClass.isInterface();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,23 @@
import com.intellij.java.impl.codeInsight.generation.GenerateConstructorHandler;
import com.intellij.java.language.psi.PsiAnonymousClass;
import com.intellij.java.language.psi.PsiClass;
import consulo.annotation.component.ActionImpl;
import consulo.java.localize.JavaLocalize;

/**
* Action group which contains Generate... actions
* Available in the Java code editor context only
* Action group which contains Generate... actions.
* Available in the Java code editor context only.
*
* @author Alexey Kudravtsev
*/
*/
@ActionImpl(id = "GenerateConstructor")
public class GenerateConstructorAction extends BaseGenerateAction {
public GenerateConstructorAction() {
super(new GenerateConstructorHandler());
}
public GenerateConstructorAction() {
super(new GenerateConstructorHandler(), JavaLocalize.actionGenerateconstructorText());
}

@Override
protected boolean isValidForClass(final PsiClass targetClass) {
return super.isValidForClass(targetClass) && !(targetClass instanceof PsiAnonymousClass);
}
@Override
protected boolean isValidForClass(PsiClass targetClass) {
return super.isValidForClass(targetClass) && !(targetClass instanceof PsiAnonymousClass);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,45 +17,48 @@

import com.intellij.java.language.psi.*;
import com.intellij.java.language.psi.util.PsiTypesUtil;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ActionImpl;
import consulo.java.localize.JavaLocalize;

/**
* @author Konstantin Bulenkov
*/
@ActionImpl(id = "GenerateCreateUI")
public class GenerateCreateUIAction extends BaseGenerateAction {
public GenerateCreateUIAction() {
super(new GenerateCreateUIHandler());
}
public GenerateCreateUIAction() {
super(new GenerateCreateUIHandler(), JavaLocalize.actionGeneratecreateuiText());
}

@Override
protected boolean isValidForClass(PsiClass targetClass) {
final PsiModifierList list = targetClass.getModifierList();
return list != null
&& !list.hasModifierProperty(PsiModifier.ABSTRACT)
&& !hasCreateUIMethod(targetClass)
&& isComponentUI(targetClass);
}
@Override
@RequiredReadAction
protected boolean isValidForClass(PsiClass targetClass) {
return !targetClass.isAbstract()
&& !hasCreateUIMethod(targetClass)
&& isComponentUI(targetClass);
}

private static boolean hasCreateUIMethod(PsiClass aClass) {
for (PsiMethod method : aClass.findMethodsByName("createUI", false)) {
if (method.hasModifierProperty(PsiModifier.STATIC)) {
final PsiParameter[] parameters = method.getParameterList().getParameters();
if (parameters.length == 1) {
final PsiType type = parameters[0].getType();
final PsiClass typeClass = PsiTypesUtil.getPsiClass(type);
return typeClass != null && "javax.swing.JComponent".equals(typeClass.getQualifiedName());
private static boolean hasCreateUIMethod(PsiClass aClass) {
for (PsiMethod method : aClass.findMethodsByName("createUI", false)) {
if (method.isStatic()) {
PsiParameter[] parameters = method.getParameterList().getParameters();
if (parameters.length == 1) {
PsiType type = parameters[0].getType();
PsiClass typeClass = PsiTypesUtil.getPsiClass(type);
return typeClass != null && "javax.swing.JComponent".equals(typeClass.getQualifiedName());
}
}
}
}
return false;
}
return false;
}

private static boolean isComponentUI(PsiClass aClass) {
while (aClass != null) {
if ("javax.swing.plaf.ComponentUI".equals(aClass.getQualifiedName())) {
return true;
}
aClass = aClass.getSuperClass();
private static boolean isComponentUI(PsiClass aClass) {
while (aClass != null) {
if ("javax.swing.plaf.ComponentUI".equals(aClass.getQualifiedName())) {
return true;
}
aClass = aClass.getSuperClass();
}
return false;
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,30 @@
package com.intellij.java.impl.codeInsight.generation.actions;

import com.intellij.java.impl.codeInsight.generation.GenerateEqualsHandler;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ActionImpl;
import consulo.codeEditor.Editor;
import com.intellij.java.language.psi.PsiAnonymousClass;
import com.intellij.java.language.psi.PsiClass;
import consulo.java.localize.JavaLocalize;
import consulo.language.psi.PsiFile;

/**
* @author dsl
*/
@ActionImpl(id = "GenerateEquals")
public class GenerateEqualsAction extends BaseGenerateAction {
public GenerateEqualsAction() {
super(new GenerateEqualsHandler());
}
public GenerateEqualsAction() {
super(new GenerateEqualsHandler(), JavaLocalize.actionGenerateequalsText());
}

@Override
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
final PsiClass targetClass = super.getTargetClass(editor, file);
if (targetClass == null || targetClass instanceof PsiAnonymousClass ||
targetClass.isEnum()) return null;
return targetClass;
}
@Override
@RequiredReadAction
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
PsiClass targetClass = super.getTargetClass(editor, file);
if (targetClass == null || targetClass instanceof PsiAnonymousClass || targetClass.isEnum()) {
return null;
}
return targetClass;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@
package com.intellij.java.impl.codeInsight.generation.actions;

import com.intellij.java.impl.codeInsight.generation.GenerateGetterHandler;
import consulo.annotation.component.ActionImpl;
import consulo.java.localize.JavaLocalize;

/**
* Action group which contains Generate... actions
* Available in the Java code editor context only
*
* @author Alexey Kudravtsev
*/
@ActionImpl(id = "GenerateGetter")
public class GenerateGetterAction extends GenerateGetterSetterBaseAction {
public GenerateGetterAction() {
super(new GenerateGetterHandler());
}
public GenerateGetterAction() {
super(new GenerateGetterHandler(), JavaLocalize.actionGenerategetterText());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@
package com.intellij.java.impl.codeInsight.generation.actions;

import com.intellij.java.impl.codeInsight.generation.GenerateGetterAndSetterHandler;
import consulo.annotation.component.ActionImpl;
import consulo.java.localize.JavaLocalize;

/**
* Action group which contains Generate... actions
* Available in the Java code editor context only
*
* @author Alexey Kudravtsev
*/
*/
@ActionImpl(id = "GenerateGetterAndSetter")
public class GenerateGetterAndSetterAction extends GenerateGetterSetterBaseAction {
public GenerateGetterAndSetterAction() {
super(new GenerateGetterAndSetterHandler());
}
public GenerateGetterAndSetterAction() {
super(new GenerateGetterAndSetterHandler(), JavaLocalize.actionGenerategetterandsetterText());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,18 @@
*/
package com.intellij.java.impl.codeInsight.generation.actions;

import com.intellij.java.impl.codeInsight.generation.GenerateGetterSetterHandlerBase;
import consulo.language.editor.action.CodeInsightActionHandler;
import consulo.localize.LocalizeValue;
import jakarta.annotation.Nonnull;

/**
* Action group which contains Generate... actions
* Available in the Java code editor context only
*
* @author Danila Ponomarenko
*/
public abstract class GenerateGetterSetterBaseAction extends BaseGenerateAction {
public GenerateGetterSetterBaseAction(GenerateGetterSetterHandlerBase handler) {
super(handler);
}
protected GenerateGetterSetterBaseAction(CodeInsightActionHandler handler, @Nonnull LocalizeValue text) {
super(handler, text);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,18 @@
package com.intellij.java.impl.codeInsight.generation.actions;

import com.intellij.java.impl.codeInsight.generation.GenerateSetterHandler;
import consulo.annotation.component.ActionImpl;
import consulo.java.localize.JavaLocalize;

/**
* Action group which contains Generate... actions
* Available in the Java code editor context only
*
* @author Alexey Kudravtsev
*/
*/
@ActionImpl(id = "GenerateSetter")
public class GenerateSetterAction extends GenerateGetterSetterBaseAction {
public GenerateSetterAction() {
super(new GenerateSetterHandler());
}

public GenerateSetterAction() {
super(new GenerateSetterHandler(), JavaLocalize.actionGeneratesetterText());
}
}
Loading
Loading