From 894f2fbf48fc89cd1215418e2eeb2930f32f96ab Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 3 May 2011 20:00:16 +0200 Subject: [PATCH] avoid incorrect signatures to apply (EA-27139 - IOE: PsiJavaParserFacadeImpl.createTypeElementFromText) --- .../JavaChangeSignatureDetector.java | 5 ++++ .../refactoring/util/CanonicalTypes.java | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java index 46cdc9d86a89..ef910af186cf 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java @@ -60,6 +60,11 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec try { newReturnType = returnType != null ? CanonicalTypes.createTypeWrapper(returnType) : null; parameterInfos = ParameterInfoImpl.fromMethod(method); + for (ParameterInfoImpl parameterInfo : parameterInfos) { + if (!parameterInfo.getTypeWrapper().isValid()) { + return null; + } + } } catch (IncorrectOperationException e) { return null; diff --git a/java/java-impl/src/com/intellij/refactoring/util/CanonicalTypes.java b/java/java-impl/src/com/intellij/refactoring/util/CanonicalTypes.java index b86d99362340..cef76e7779bb 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/CanonicalTypes.java +++ b/java/java-impl/src/com/intellij/refactoring/util/CanonicalTypes.java @@ -46,6 +46,10 @@ public class CanonicalTypes { public abstract String getTypeText(); public abstract void addImportsTo(final JavaCodeFragment codeFragment); + + public boolean isValid() { + return true; + } } private static class Primitive extends Type { @@ -86,6 +90,11 @@ public class CanonicalTypes { public void addImportsTo(final JavaCodeFragment codeFragment) { myComponentType.addImportsTo(codeFragment); } + + @Override + public boolean isValid() { + return myComponentType.isValid(); + } } private static class Ellipsis extends Type { @@ -107,6 +116,11 @@ public class CanonicalTypes { public void addImportsTo(final JavaCodeFragment codeFragment) { myComponentType.addImportsTo(codeFragment); } + + @Override + public boolean isValid() { + return myComponentType.isValid(); + } } private static class WildcardType extends Type { @@ -137,6 +151,11 @@ public class CanonicalTypes { public void addImportsTo(final JavaCodeFragment codeFragment) { if (myBound != null) myBound.addImportsTo(codeFragment); } + + @Override + public boolean isValid() { + return myBound == null || myBound.isValid(); + } } private static class WrongType extends Type { @@ -156,6 +175,11 @@ public class CanonicalTypes { } public void addImportsTo(final JavaCodeFragment codeFragment) {} + + @Override + public boolean isValid() { + return false; + } } private static class ClassType extends Type {