mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
+1
-1
@@ -53,7 +53,7 @@ public class AnyExceptionBreakpointFactory extends BreakpointFactory{
|
||||
}
|
||||
|
||||
@Override
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project) {
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project, boolean compact) {
|
||||
return null; //To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ public abstract class BreakpointFactory {
|
||||
|
||||
public BreakpointPanel createBreakpointPanel(final Project project, final DialogWrapper parentDialog) {
|
||||
BreakpointPanel panel = new BreakpointPanel(project,
|
||||
createBreakpointPropertiesPanel(project),
|
||||
createBreakpointPropertiesPanel(project, false),
|
||||
createBreakpointPanelActions(project, parentDialog),
|
||||
getBreakpointCategory(), getDisplayName(), getHelpID());
|
||||
configureBreakpointPanel(panel);
|
||||
@@ -66,7 +66,7 @@ public abstract class BreakpointFactory {
|
||||
|
||||
public abstract String getDisplayName();
|
||||
|
||||
public abstract BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project);
|
||||
public abstract BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project, boolean compact);
|
||||
|
||||
protected abstract BreakpointPanelAction[] createBreakpointPanelActions(Project project, DialogWrapper parentDialog);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.debugger.ui.breakpoints.BreakpointPropertiesPanel">
|
||||
<grid id="6570" binding="myPanel" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="6570" binding="myPanel" custom-create="true" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="23" y="37" width="631" height="347"/>
|
||||
|
||||
+27
-1
@@ -38,6 +38,7 @@ import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.FixedSizeButton;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.ui.FieldPanel;
|
||||
@@ -59,6 +60,7 @@ import java.util.List;
|
||||
public abstract class BreakpointPropertiesPanel {
|
||||
protected final Project myProject;
|
||||
private final Key<? extends Breakpoint> myBreakpointCategory;
|
||||
private boolean myCompact;
|
||||
private JPanel myPanel;
|
||||
private final DebuggerExpressionComboBox myConditionCombo;
|
||||
private final DebuggerExpressionComboBox myLogExpressionCombo;
|
||||
@@ -111,6 +113,20 @@ public abstract class BreakpointPropertiesPanel {
|
||||
return myMoreOptionsVisible;
|
||||
}
|
||||
|
||||
private void createUIComponents() {
|
||||
myPanel = new JPanel() {
|
||||
@Override
|
||||
public boolean requestFocus(boolean b) {
|
||||
return super.requestFocus(b); //To change body of overridden methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requestFocus() {
|
||||
super.requestFocus(); //To change body of overridden methods use File | Settings | File Templates.
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public interface Delegate {
|
||||
|
||||
void showActionsPanel();
|
||||
@@ -181,9 +197,10 @@ public abstract class BreakpointPropertiesPanel {
|
||||
panel.add(component, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
public BreakpointPropertiesPanel(Project project, final Key<? extends Breakpoint> breakpointCategory) {
|
||||
public BreakpointPropertiesPanel(Project project, final Key<? extends Breakpoint> breakpointCategory, boolean compact) {
|
||||
myProject = project;
|
||||
myBreakpointCategory = breakpointCategory;
|
||||
myCompact = compact;
|
||||
|
||||
mySuspendPolicyGroup = new ButtonGroup();
|
||||
mySuspendPolicyGroup.add(mySuspendAllRadio);
|
||||
@@ -230,6 +247,15 @@ public abstract class BreakpointPropertiesPanel {
|
||||
});
|
||||
|
||||
myConditionCombo = new DebuggerExpressionComboBox(project, "LineBreakpoint condition");
|
||||
if (myCompact) {
|
||||
myPanel.addFocusListener(new FocusAdapter() {
|
||||
@Override
|
||||
public void focusGained(FocusEvent event) {
|
||||
IdeFocusManager.findInstance().requestFocus(myConditionCombo, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
myLogExpressionCombo = new DebuggerExpressionComboBox(project, "LineBreakpoint logMessage");
|
||||
|
||||
final ComboBox baseBreakpointCombo = new ComboBox(100);
|
||||
|
||||
+3
-3
@@ -69,8 +69,8 @@ public class ExceptionBreakpointFactory extends BreakpointFactory{
|
||||
}
|
||||
|
||||
@Override
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project) {
|
||||
return new ExceptionBreakpointPropertiesPanel(project);
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project, boolean compact) {
|
||||
return new ExceptionBreakpointPropertiesPanel(project, compact);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,7 +99,7 @@ public class ExceptionBreakpointFactory extends BreakpointFactory{
|
||||
|
||||
public BreakpointPanel createBreakpointPanel(final Project project, final DialogWrapper parentDialog) {
|
||||
BreakpointPanel panel = new BreakpointPanel(project,
|
||||
createBreakpointPropertiesPanel(project),
|
||||
createBreakpointPropertiesPanel(project, false),
|
||||
createBreakpointPanelActions(project, parentDialog),
|
||||
getBreakpointCategory(), getDisplayName(), getHelpID()){
|
||||
public void resetBreakpoints() {
|
||||
|
||||
+2
-2
@@ -36,8 +36,8 @@ public class ExceptionBreakpointPropertiesPanel extends BreakpointPropertiesPane
|
||||
private JCheckBox myNotifyUncaughtCheckBox;
|
||||
private ExceptionBreakpoint myExceptionBreakpoint;
|
||||
|
||||
public ExceptionBreakpointPropertiesPanel(Project project) {
|
||||
super(project, ExceptionBreakpoint.CATEGORY);
|
||||
public ExceptionBreakpointPropertiesPanel(Project project, boolean compact) {
|
||||
super(project, ExceptionBreakpoint.CATEGORY, compact);
|
||||
}
|
||||
|
||||
protected ClassFilter createClassConditionFilter() {
|
||||
|
||||
+2
-2
@@ -65,8 +65,8 @@ public class FieldBreakpointFactory extends BreakpointFactory{
|
||||
}
|
||||
|
||||
@Override
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project) {
|
||||
return new FieldBreakpointPropertiesPanel(project);
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project, boolean compact) {
|
||||
return new FieldBreakpointPropertiesPanel(project, compact);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-2
@@ -34,8 +34,8 @@ public class FieldBreakpointPropertiesPanel extends BreakpointPropertiesPanel {
|
||||
private JCheckBox myWatchAccessCheckBox;
|
||||
private JCheckBox myWatchModificationCheckBox;
|
||||
|
||||
public FieldBreakpointPropertiesPanel(final Project project) {
|
||||
super(project, FieldBreakpoint.CATEGORY);
|
||||
public FieldBreakpointPropertiesPanel(final Project project, boolean compact) {
|
||||
super(project, FieldBreakpoint.CATEGORY, compact);
|
||||
}
|
||||
|
||||
protected JComponent createSpecialBox() {
|
||||
|
||||
+2
-2
@@ -54,8 +54,8 @@ public class LineBreakpointFactory extends BreakpointFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project) {
|
||||
return new LineBreakpointPropertiesPanel(project);
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project, boolean compact) {
|
||||
return new LineBreakpointPropertiesPanel(project, compact);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ package com.intellij.debugger.ui.breakpoints;
|
||||
import com.intellij.openapi.project.Project;
|
||||
|
||||
public class LineBreakpointPropertiesPanel extends BreakpointPropertiesPanel {
|
||||
public LineBreakpointPropertiesPanel(Project project) {
|
||||
super(project, LineBreakpoint.CATEGORY);
|
||||
public LineBreakpointPropertiesPanel(Project project, boolean compact) {
|
||||
super(project, LineBreakpoint.CATEGORY, compact);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -55,8 +55,8 @@ public class MethodBreakpointFactory extends BreakpointFactory{
|
||||
}
|
||||
|
||||
@Override
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project) {
|
||||
return new MethodBreakpointPropertiesPanel(project);
|
||||
public BreakpointPropertiesPanel createBreakpointPropertiesPanel(Project project, boolean compact) {
|
||||
return new MethodBreakpointPropertiesPanel(project, compact);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-2
@@ -34,8 +34,8 @@ public class MethodBreakpointPropertiesPanel extends BreakpointPropertiesPanel {
|
||||
private JCheckBox myWatchEntryCheckBox;
|
||||
private JCheckBox myWatchExitCheckBox;
|
||||
|
||||
public MethodBreakpointPropertiesPanel(final Project project) {
|
||||
super(project, MethodBreakpoint.CATEGORY);
|
||||
public MethodBreakpointPropertiesPanel(final Project project, boolean compact) {
|
||||
super(project, MethodBreakpoint.CATEGORY, compact);
|
||||
}
|
||||
|
||||
protected JComponent createSpecialBox() {
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ public class JavaEditBreakpointAction extends EditBreakpointAction {
|
||||
}
|
||||
assert breakpointFactory != null : "can't find factory for breakpoint " + myBreakpointWithHighlighter;
|
||||
|
||||
final BreakpointPropertiesPanel propertiesPanel = breakpointFactory.createBreakpointPropertiesPanel(project);
|
||||
final BreakpointPropertiesPanel propertiesPanel = breakpointFactory.createBreakpointPropertiesPanel(project, true);
|
||||
propertiesPanel.initFrom(myBreakpointWithHighlighter, false);
|
||||
|
||||
final JComponent mainPanel = propertiesPanel.getPanel();
|
||||
|
||||
+16
-20
@@ -17,6 +17,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightUtilBase;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.generation.ConstructorBodyGenerator;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInsight.generation.PsiMethodMember;
|
||||
import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
|
||||
@@ -27,6 +28,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.ScrollType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
@@ -34,7 +36,6 @@ import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -101,7 +102,7 @@ public class CreateConstructorMatchingSuperFix extends BaseIntentionAction {
|
||||
MemberChooser<PsiMethodMember> chooser = new MemberChooser<PsiMethodMember>(constructors, false, true, project);
|
||||
chooser.setTitle(QuickFixBundle.message("super.class.constructors.chooser.title"));
|
||||
chooser.show();
|
||||
if (chooser.getExitCode() != MemberChooser.OK_EXIT_CODE) return;
|
||||
if (chooser.getExitCode() != DialogWrapper.OK_EXIT_CODE) return;
|
||||
constructors = chooser.getSelectedElements(new PsiMethodMember[0]);
|
||||
isCopyJavadoc = chooser.isCopyJavadoc();
|
||||
}
|
||||
@@ -117,12 +118,12 @@ public class CreateConstructorMatchingSuperFix extends BaseIntentionAction {
|
||||
PsiClass psiClass = JavaPsiFacade.getInstance(targetClass.getProject()).getElementFactory().createClass("X");
|
||||
targetClass.addRangeAfter(psiClass.getLBrace(), psiClass.getRBrace(), targetClass.getLastChild());
|
||||
}
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
|
||||
CodeStyleManager reformatter = CodeStyleManager.getInstance(project);
|
||||
JVMElementFactory factory = JVMElementFactories.getFactory(targetClass.getLanguage(), project);
|
||||
CodeStyleManager formatter = CodeStyleManager.getInstance(project);
|
||||
PsiMethod derived = null;
|
||||
for (PsiMethodMember candidate : constructors1) {
|
||||
PsiMethod base = candidate.getElement();
|
||||
derived = GenerateMembersUtil.substituteGenericMethod(base, candidate.getSubstitutor());
|
||||
derived = GenerateMembersUtil.substituteGenericMethod(base, candidate.getSubstitutor(), targetClass);
|
||||
|
||||
if (!isCopyJavadoc1) {
|
||||
final PsiDocComment docComment = derived.getDocComment();
|
||||
@@ -131,23 +132,18 @@ public class CreateConstructorMatchingSuperFix extends BaseIntentionAction {
|
||||
}
|
||||
}
|
||||
|
||||
final PsiIdentifier identifier = targetClass.getNameIdentifier();
|
||||
LOG.assertTrue(identifier != null, targetClass);
|
||||
derived.getNameIdentifier().replace(identifier);
|
||||
@NonNls StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("void foo () {\nsuper(");
|
||||
derived.setName(targetClass.getName());
|
||||
|
||||
PsiParameter[] params = derived.getParameterList().getParameters();
|
||||
for (int j = 0; j < params.length; j++) {
|
||||
PsiParameter param = params[j];
|
||||
buffer.append(param.getName());
|
||||
if (j < params.length - 1) buffer.append(",");
|
||||
ConstructorBodyGenerator generator = ConstructorBodyGenerator.INSTANCE.forLanguage(derived.getLanguage());
|
||||
if (generator != null) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
generator.start(buffer, derived.getName(), PsiParameter.EMPTY_ARRAY);
|
||||
generator.generateSuperCallIfNeeded(buffer, derived.getParameterList().getParameters());
|
||||
generator.finish(buffer);
|
||||
PsiMethod stub = factory.createMethodFromText(buffer.toString(), targetClass);
|
||||
derived.getBody().replace(stub.getBody());
|
||||
}
|
||||
buffer.append(");\n}");
|
||||
PsiMethod stub = factory.createMethodFromText(buffer.toString(), targetClass);
|
||||
|
||||
derived.getBody().replace(stub.getBody());
|
||||
derived = (PsiMethod)reformatter.reformat(derived);
|
||||
derived = (PsiMethod)formatter.reformat(derived);
|
||||
derived = (PsiMethod)JavaCodeStyleManager.getInstance(project).shortenClassReferences(derived);
|
||||
derived = (PsiMethod)GenerateMembersUtil.insert(targetClass, derived, null, true);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.codeInsight.generation;
|
||||
|
||||
import com.intellij.lang.LanguageExtension;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiParameter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public interface ConstructorBodyGenerator {
|
||||
LanguageExtension<ConstructorBodyGenerator> INSTANCE = new LanguageExtension<ConstructorBodyGenerator>("com.intellij.constructorBodyGenerator");
|
||||
|
||||
void generateFieldInitialization(@NotNull StringBuilder buffer, @NotNull PsiField[] fields, @NotNull PsiParameter[] parameters);
|
||||
|
||||
void generateSuperCallIfNeeded(@NotNull StringBuilder buffer, @NotNull PsiParameter[] parameters);
|
||||
|
||||
StringBuilder start(StringBuilder buffer, @NotNull String name, @NotNull PsiParameter[] parameters);
|
||||
|
||||
void finish(StringBuilder builder);
|
||||
}
|
||||
+34
-26
@@ -211,7 +211,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
|
||||
|
||||
public static PsiMethod generateConstructorPrototype(PsiClass aClass, PsiMethod baseConstructor, boolean copyJavaDoc, PsiField[] fields) throws IncorrectOperationException {
|
||||
PsiManager manager = aClass.getManager();
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||
JVMElementFactory factory = JVMElementFactories.getFactory(aClass.getLanguage(), aClass.getProject());
|
||||
CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(manager.getProject());
|
||||
|
||||
PsiMethod constructor = factory.createConstructor();
|
||||
@@ -235,37 +235,28 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
|
||||
}
|
||||
}
|
||||
|
||||
@NonNls StringBuilder body = new StringBuilder();
|
||||
body.append("{\n");
|
||||
|
||||
boolean isNotEnum = false;
|
||||
if (baseConstructor != null){
|
||||
PsiClass superClass = aClass.getSuperClass();
|
||||
LOG.assertTrue(superClass != null);
|
||||
if (!CommonClassNames.JAVA_LANG_ENUM.equals(superClass.getQualifiedName())) {
|
||||
isNotEnum = true;
|
||||
if (baseConstructor instanceof PsiCompiledElement){ // to get some parameter names
|
||||
PsiClass dummyClass = factory.createClass("Dummy");
|
||||
PsiClass dummyClass = JVMElementFactories.getFactory(baseConstructor.getLanguage(), baseConstructor.getProject()).createClass("Dummy");
|
||||
baseConstructor = (PsiMethod)dummyClass.add(baseConstructor);
|
||||
}
|
||||
PsiParameter[] parms = baseConstructor.getParameterList().getParameters();
|
||||
for (PsiParameter parm : parms) {
|
||||
constructor.getParameterList().add(parm);
|
||||
}
|
||||
if (parms.length > 0){
|
||||
body.append("super(");
|
||||
for(int j = 0; j < parms.length; j++) {
|
||||
PsiParameter parm = parms[j];
|
||||
if (j > 0){
|
||||
body.append(",");
|
||||
}
|
||||
body.append(parm.getName());
|
||||
}
|
||||
body.append(");\n");
|
||||
PsiParameter newParam = factory.createParameter(parm.getName(), parm.getType());
|
||||
copyModifierList(factory, parm, newParam);
|
||||
constructor.getParameterList().add(newParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
JavaCodeStyleManager javaStyle = JavaCodeStyleManager.getInstance(aClass.getProject());
|
||||
|
||||
List<PsiParameter> fieldParams = new ArrayList<PsiParameter>();
|
||||
for (PsiField field : fields) {
|
||||
String fieldName = field.getName();
|
||||
String name = javaStyle.variableNameToPropertyName(fieldName, VariableKind.FIELD);
|
||||
@@ -280,22 +271,39 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
|
||||
}
|
||||
|
||||
constructor.getParameterList().add(parm);
|
||||
if (fieldName.equals(parmName)) {
|
||||
body.append("this.");
|
||||
fieldParams.add(parm);
|
||||
}
|
||||
|
||||
ConstructorBodyGenerator generator = ConstructorBodyGenerator.INSTANCE.forLanguage(aClass.getLanguage());
|
||||
if (generator != null) {
|
||||
@NonNls StringBuilder buffer = new StringBuilder();
|
||||
generator.start(buffer, constructor.getName(), PsiParameter.EMPTY_ARRAY);
|
||||
if (isNotEnum) {
|
||||
generator.generateSuperCallIfNeeded(buffer, baseConstructor.getParameterList().getParameters());
|
||||
}
|
||||
body.append(fieldName);
|
||||
body.append("=");
|
||||
body.append(parmName);
|
||||
body.append(";\n");
|
||||
generator.generateFieldInitialization(buffer, fields, fieldParams.toArray(new PsiParameter[fieldParams.size()]));
|
||||
generator.finish(buffer);
|
||||
PsiMethod stub = factory.createMethodFromText(buffer.toString(), aClass);
|
||||
constructor.getBody().replace(stub.getBody());
|
||||
}
|
||||
|
||||
body.append("}");
|
||||
PsiCodeBlock bodyBlock = factory.createCodeBlockFromText(body.toString(), null);
|
||||
constructor.getBody().replace(bodyBlock);
|
||||
constructor = (PsiMethod)codeStyleManager.reformat(constructor);
|
||||
return constructor;
|
||||
}
|
||||
|
||||
static void copyModifierList(JVMElementFactory factory, PsiParameter parm, PsiParameter newParam) {
|
||||
PsiModifierList modifierList = parm.getModifierList();
|
||||
PsiModifierList newMList = newParam.getModifierList();
|
||||
if (modifierList != null && newMList != null) {
|
||||
for (PsiAnnotation annotation : modifierList.getAnnotations()) {
|
||||
newMList.add(factory.createAnnotationFromText(annotation.getText(), newParam));
|
||||
}
|
||||
for (@PsiModifier.ModifierConstant String m : PsiModifier.MODIFIERS) {
|
||||
newMList.setModifierProperty(m, parm.hasModifierProperty(m));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PsiModifier.ModifierConstant
|
||||
public static String getConstructorModifier(final PsiClass aClass) {
|
||||
String modifier = PsiModifier.PUBLIC;
|
||||
|
||||
@@ -172,7 +172,7 @@ public class GenerateMembersUtil {
|
||||
editor.getSelectionModel().removeSelection();
|
||||
}
|
||||
|
||||
public static PsiElement insert(PsiClass aClass, PsiMember member, PsiElement anchor, boolean before) throws IncorrectOperationException {
|
||||
public static PsiElement insert(@NotNull PsiClass aClass, @NotNull PsiMember member, @Nullable PsiElement anchor, boolean before) throws IncorrectOperationException {
|
||||
if (member instanceof PsiMethod) {
|
||||
if (!aClass.isInterface()) {
|
||||
final PsiParameter[] parameters = ((PsiMethod)member).getParameterList().getParameters();
|
||||
@@ -228,9 +228,15 @@ public class GenerateMembersUtil {
|
||||
|
||||
public static PsiMethod substituteGenericMethod(PsiMethod method,
|
||||
final PsiSubstitutor substitutor,
|
||||
final PsiElement target) {
|
||||
@Nullable final PsiElement target) {
|
||||
Project project = method.getProject();
|
||||
final PsiElementFactory factory = JavaPsiFacade.getInstance(method.getProject()).getElementFactory();
|
||||
final JVMElementFactory factory;
|
||||
if (target != null) {
|
||||
factory = JVMElementFactories.getFactory(target.getLanguage(), method.getProject());
|
||||
}
|
||||
else {
|
||||
factory = JavaPsiFacade.getInstance(method.getProject()).getElementFactory();
|
||||
}
|
||||
|
||||
try {
|
||||
PsiType returnType = method.getReturnType();
|
||||
@@ -238,7 +244,7 @@ public class GenerateMembersUtil {
|
||||
PsiMethod newMethod;
|
||||
if (method.isConstructor()) {
|
||||
newMethod = factory.createConstructor();
|
||||
newMethod.getNameIdentifier().replace(factory.createIdentifier(method.getName()));
|
||||
newMethod.setName(method.getName());
|
||||
}
|
||||
else {
|
||||
final PsiType substitutedReturnType = substituteType(substitutor, returnType);
|
||||
@@ -292,10 +298,15 @@ public class GenerateMembersUtil {
|
||||
if (paramName == null) paramName = "p" + i;
|
||||
|
||||
PsiParameter newParameter = factory.createParameter(paramName, substituted);
|
||||
if (parameter.getLanguage() == JavaLanguage.INSTANCE) {
|
||||
if (parameter.getLanguage() == newParameter.getLanguage()) {
|
||||
PsiModifierList modifierList = newParameter.getModifierList();
|
||||
modifierList = (PsiModifierList)modifierList.replace(parameter.getModifierList());
|
||||
processAnnotations(project, modifierList, moduleScope);
|
||||
if (parameter.getLanguage() == JavaLanguage.INSTANCE) {
|
||||
processAnnotations(project, modifierList, moduleScope);
|
||||
}
|
||||
}
|
||||
else {
|
||||
GenerateConstructorHandler.copyModifierList(factory, parameter, newParameter);
|
||||
}
|
||||
newMethod.getParameterList().add(newParameter);
|
||||
}
|
||||
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.codeInsight.generation;
|
||||
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiParameter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public class JavaConstructorBodyWithSuperCallGenerator implements ConstructorBodyGenerator {
|
||||
@Override
|
||||
public void generateFieldInitialization(@NotNull StringBuilder buffer,
|
||||
@NotNull PsiField[] fields,
|
||||
@NotNull PsiParameter[] parameters) {
|
||||
for (int i = 0, length = fields.length; i < length; i++) {
|
||||
String fieldName = fields[i].getName();
|
||||
String paramName = parameters[i].getName();
|
||||
if (fieldName.equals(paramName)) {
|
||||
buffer.append("this.");
|
||||
}
|
||||
buffer.append(fieldName);
|
||||
buffer.append("=");
|
||||
buffer.append(paramName);
|
||||
buffer.append(";\n");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateSuperCallIfNeeded(@NotNull StringBuilder buffer, @NotNull PsiParameter[] parameters) {
|
||||
if (parameters.length > 0) {
|
||||
buffer.append("super(");
|
||||
for (int j = 0; j < parameters.length; j++) {
|
||||
PsiParameter param = parameters[j];
|
||||
buffer.append(param.getName());
|
||||
if (j < parameters.length - 1) buffer.append(",");
|
||||
}
|
||||
buffer.append(");\n");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringBuilder start(StringBuilder buffer, @NotNull String name, @NotNull PsiParameter[] parameters) {
|
||||
buffer.append("public ").append(name).append("(");
|
||||
for (PsiParameter parameter : parameters) {
|
||||
buffer.append(parameter.getType().getPresentableText()).append(' ').append(parameter.getName()).append(',');
|
||||
}
|
||||
if (parameters.length > 0) {
|
||||
buffer.delete(buffer.length() - 1, buffer.length());
|
||||
}
|
||||
buffer.append("){\n");
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish(StringBuilder buffer) {
|
||||
buffer.append('}');
|
||||
}
|
||||
}
|
||||
+15
-2
@@ -284,8 +284,9 @@ public class CreateFieldFromParameterAction implements IntentionAction {
|
||||
processParameter(project, ((ParameterClassMember)selectedElements.get(0)).getParameter(), isInteractive);
|
||||
} else {
|
||||
//do not ask for names in batch
|
||||
final HashSet<String> usedNames = new HashSet<String>();
|
||||
for (ClassMember selectedElement : selectedElements) {
|
||||
processParameter(project, ((ParameterClassMember)selectedElement).getParameter(), false);
|
||||
processParameter(project, ((ParameterClassMember)selectedElement).getParameter(), false, usedNames);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -300,6 +301,13 @@ public class CreateFieldFromParameterAction implements IntentionAction {
|
||||
private static void processParameter(final Project project,
|
||||
final PsiParameter myParameter,
|
||||
boolean isInteractive) {
|
||||
processParameter(project, myParameter, isInteractive, new HashSet<String>());
|
||||
}
|
||||
|
||||
private static void processParameter(final Project project,
|
||||
final PsiParameter myParameter,
|
||||
boolean isInteractive,
|
||||
final Set<String> usedNames) {
|
||||
IdeDocumentHistory.getInstance(project).includeCurrentPlaceAsChangePlace();
|
||||
final PsiType[] types = getTypes(myParameter);
|
||||
final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project);
|
||||
@@ -347,7 +355,12 @@ public class CreateFieldFromParameterAction implements IntentionAction {
|
||||
}
|
||||
else {
|
||||
isFinalToCalc = !isMethodStatic && method.isConstructor();
|
||||
fieldNameToCalc = names[0];
|
||||
if (usedNames.add(names[0])) {
|
||||
fieldNameToCalc = names[0];
|
||||
}
|
||||
else {
|
||||
fieldNameToCalc = JavaCodeStyleManager.getInstance(project).suggestUniqueVariableName(names[0], myParameter, true);
|
||||
}
|
||||
type= types[0];
|
||||
}
|
||||
|
||||
|
||||
+17
-2
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.navigation.actions;
|
||||
|
||||
import com.intellij.codeInsight.TargetElementUtilBase;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -22,9 +24,15 @@ import org.jetbrains.annotations.Nullable;
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class JavaTypeDeclarationProvider implements TypeDeclarationProvider {
|
||||
public class JavaTypeDeclarationProvider implements TypeDeclarationPlaceAwareProvider {
|
||||
@Override
|
||||
public PsiElement[] getSymbolTypeDeclarations(PsiElement symbol) {
|
||||
return getSymbolTypeDeclarations(symbol, null, -1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PsiElement[] getSymbolTypeDeclarations(final PsiElement targetElement) {
|
||||
@Override
|
||||
public PsiElement[] getSymbolTypeDeclarations(PsiElement targetElement, Editor editor, int offset) {
|
||||
PsiType type;
|
||||
if (targetElement instanceof PsiVariable){
|
||||
type = ((PsiVariable)targetElement).getType();
|
||||
@@ -36,6 +44,13 @@ public class JavaTypeDeclarationProvider implements TypeDeclarationProvider {
|
||||
return null;
|
||||
}
|
||||
if (type == null) return null;
|
||||
if (editor != null) {
|
||||
final PsiReference reference = TargetElementUtilBase.findReference(editor, offset);
|
||||
if (reference instanceof PsiJavaReference) {
|
||||
final JavaResolveResult resolveResult = ((PsiJavaReference)reference).advancedResolve(true);
|
||||
type = resolveResult.getSubstitutor().substitute(type);
|
||||
}
|
||||
}
|
||||
PsiClass psiClass = PsiUtil.resolveClassInType(type);
|
||||
return psiClass == null ? null : new PsiElement[] {psiClass};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -197,7 +197,7 @@ public final class PackageViewPane extends AbstractProjectViewPSIPane {
|
||||
}
|
||||
|
||||
protected ProjectViewTree createTree(DefaultTreeModel treeModel) {
|
||||
return new ProjectViewTree(treeModel) {
|
||||
return new ProjectViewTree(myProject, treeModel) {
|
||||
public String toString() {
|
||||
return getTitle() + " " + super.toString();
|
||||
}
|
||||
|
||||
@@ -127,4 +127,6 @@ public interface JVMElementFactory {
|
||||
|
||||
@NotNull
|
||||
PsiElement createExpressionFromText(@NotNull @NonNls String text, @Nullable PsiElement context) throws IncorrectOperationException;
|
||||
|
||||
PsiElement createReferenceElementByType(PsiClassType type);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -249,7 +249,7 @@ public abstract class BaseProjectViewTestCase extends TestSourceBasedTestCase {
|
||||
|
||||
@Override
|
||||
protected ProjectViewTree createTree(DefaultTreeModel treeModel) {
|
||||
return new ProjectViewTree(treeModel) {
|
||||
return new ProjectViewTree(myProject, treeModel) {
|
||||
@Override
|
||||
public DefaultMutableTreeNode getSelectedNode() {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user