mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
IDEA-90882 (do not pre-select extension methods for implementation)
This commit is contained in:
@@ -533,7 +533,19 @@ public class OverrideImplementUtil {
|
||||
ApplicationManager.getApplication().assertReadAccessAllowed();
|
||||
|
||||
Collection<CandidateInfo> candidates = getMethodsToOverrideImplement(aClass, toImplement);
|
||||
Collection<CandidateInfo> secondary = toImplement || aClass.isInterface() ? Collections.<CandidateInfo>emptyList() : getMethodsToOverrideImplement(aClass, true);
|
||||
Collection<CandidateInfo> secondary = toImplement || aClass.isInterface() ?
|
||||
ContainerUtil.<CandidateInfo>newArrayList() : getMethodsToOverrideImplement(aClass, true);
|
||||
|
||||
if (toImplement && PsiUtil.isLanguageLevel8OrHigher(aClass)) {
|
||||
for (Iterator<CandidateInfo> iterator = candidates.iterator(); iterator.hasNext(); ) {
|
||||
CandidateInfo candidate = iterator.next();
|
||||
PsiElement element = candidate.getElement();
|
||||
if (element instanceof PsiMethod && PsiUtil.isExtensionMethod((PsiMethod)element)) {
|
||||
iterator.remove();
|
||||
secondary.add(candidate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final MemberChooser<PsiMethodMember> chooser = showOverrideImplementChooser(editor, aClass, toImplement, candidates, secondary);
|
||||
if (chooser == null) return;
|
||||
@@ -563,7 +575,7 @@ public class OverrideImplementUtil {
|
||||
|
||||
final Ref<Boolean> merge = Ref.create(PropertiesComponent.getInstance(project).isTrueValue(PROP_COMBINED_OVERRIDE_IMPLEMENT));
|
||||
final MemberChooser<PsiMethodMember> chooser =
|
||||
new MemberChooser<PsiMethodMember>(merge.get() ? all : onlyPrimary, false, true, project, PsiUtil.isLanguageLevel5OrHigher(aClass)) {
|
||||
new MemberChooser<PsiMethodMember>(toImplement || merge.get() ? all : onlyPrimary, false, true, project, PsiUtil.isLanguageLevel5OrHigher(aClass)) {
|
||||
@Override
|
||||
protected void fillToolbarActions(DefaultActionGroup group) {
|
||||
super.fillToolbarActions(group);
|
||||
@@ -597,11 +609,13 @@ public class OverrideImplementUtil {
|
||||
chooser.setCopyJavadocVisible(true);
|
||||
|
||||
if (toImplement) {
|
||||
chooser.selectElements((boolean)merge.get() ? all : onlyPrimary);
|
||||
chooser.selectElements(onlyPrimary);
|
||||
}
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
chooser.selectElements(all);
|
||||
if (!toImplement) {
|
||||
chooser.selectElements(all);
|
||||
}
|
||||
chooser.close(DialogWrapper.OK_EXIT_CODE);
|
||||
return chooser;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
class Test {
|
||||
interface A<T> {
|
||||
void m1(T t);
|
||||
void m2();
|
||||
}
|
||||
|
||||
interface B<T> extends A<T> {
|
||||
void m1(T t) default { }
|
||||
}
|
||||
|
||||
class MyClass<T> implements B<T> {
|
||||
@Override
|
||||
public void m2() {
|
||||
<selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
class Test {
|
||||
interface A<T> {
|
||||
void m1(T t);
|
||||
void m2();
|
||||
}
|
||||
|
||||
interface B<T> extends A<T> {
|
||||
void m1(T t) default { }
|
||||
}
|
||||
|
||||
class MyClass<T> implements B<T> {
|
||||
<caret>
|
||||
}
|
||||
}
|
||||
@@ -120,6 +120,18 @@ public class OverrideImplementTest extends LightCodeInsightTestCase {
|
||||
checkResultByFile(BASE_DIR + "after" + name + ".java");
|
||||
}
|
||||
|
||||
public void testImplementExtensionMethods() {
|
||||
setLanguageLevel(LanguageLevel.JDK_1_8);
|
||||
String name = getTestName(false);
|
||||
configureByFile(BASE_DIR + "before" + name + ".java");
|
||||
int offset = getEditor().getCaretModel().getOffset();
|
||||
PsiElement context = getFile().findElementAt(offset);
|
||||
PsiClass psiClass = PsiTreeUtil.getParentOfType(context, PsiClass.class);
|
||||
assert psiClass != null;
|
||||
OverrideImplementUtil.chooseAndOverrideOrImplementMethods(getProject(), getEditor(), psiClass, true);
|
||||
checkResultByFile(BASE_DIR + "after" + name + ".java");
|
||||
}
|
||||
|
||||
private void doTest(boolean copyJavadoc) {
|
||||
String name = getTestName(false);
|
||||
configureByFile(BASE_DIR + "before" + name + ".java");
|
||||
|
||||
Reference in New Issue
Block a user