diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java index 8d7a9549acc3..2d30926dcc2c 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java @@ -244,7 +244,7 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr if (toCatchExceptions) { if (!(ref instanceof PsiReferenceExpression && - ((PsiReferenceExpression)ref).getQualifierExpression() instanceof PsiSuperExpression)) { + RefactoringUtil.isSuperOrThisCall(PsiTreeUtil.getParentOfType(ref, PsiStatement.class), true, false))) { if (needToCatchExceptions(changeInfo, caller)) { PsiClassType[] newExceptions = callee != null ? getCalleeChangedExceptionInfo(callee) : getPrimaryChangedExceptionInfo(changeInfo); diff --git a/java/java-tests/testData/refactoring/changeSignature/ConstructorException.java b/java/java-tests/testData/refactoring/changeSignature/ConstructorException.java new file mode 100644 index 000000000000..690fb38bfbdf --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/ConstructorException.java @@ -0,0 +1,10 @@ +class Base { + public Base() { + } +} + +class AAA extends Base { + public AAA() { + super(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/changeSignature/ConstructorException_after.java b/java/java-tests/testData/refactoring/changeSignature/ConstructorException_after.java new file mode 100644 index 000000000000..522403c0843a --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignature/ConstructorException_after.java @@ -0,0 +1,12 @@ +import java.io.IOException; + +class Base { + public Base() throws IOException { + } +} + +class AAA extends Base { + public AAA() { + super(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java index 43b30b61dd93..b2ae1b19db2f 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureTest.java @@ -251,6 +251,19 @@ public class ChangeSignatureTest extends LightRefactoringTestCase { false); } + public void testConstructorException() throws Exception { + doTest(null, null, null, new SimpleParameterGen(new ParameterInfoImpl[0]), + new GenExceptions() { + @Override + public ThrownExceptionInfo[] genExceptions(PsiMethod method) { + return new ThrownExceptionInfo[] { + new JavaThrownExceptionInfo(-1, JavaPsiFacade.getInstance(method.getProject()).getElementFactory().createTypeByFQClassName("java.io.IOException", method.getResolveScope())) + }; + } + }, + false); + } + public void testAddRuntimeException() throws Exception { doTest(null, null, null, new SimpleParameterGen(new ParameterInfoImpl[0]), new GenExceptions() {