private String generateSignatureText() { String name = getNewName(); String type = myReturnTypeField.getText().trim(); StringBuilder builder = new StringBuilder(); if (myPublicRadioButton.isSelected() && type.length() == 0) { builder.append(GrModifier.DEF); } if (myPrivateRadioButton.isSelected()) { builder.append(GrModifier.PRIVATE).append(' '); } else if (myProtectedRadioButton.isSelected()) { builder.append(GrModifier.PROTECTED).append(' '); } builder.append(type).append(' '); builder.append(name).append('('); final List<GrTableParameterInfo> infos = myParameterModel.getParameterInfos(); if (infos.size() > 0) { final List<String> paramsText = ContainerUtil.map( infos, new Function<GrTableParameterInfo, String>() { public String fun(GrTableParameterInfo grParameterInfo) { return generateParameterText(grParameterInfo); } }); builder.append("\n").append(INDENT); builder.append(StringUtil.join(paramsText, ",\n" + INDENT)); builder.append('\n'); } builder.append(')'); final PsiTypeCodeFragment[] exceptions = myExceptionTableModel.getTypeCodeFragments(); if (exceptions.length > 0) { builder.append("\nthrows\n"); final List<String> exceptionNames = ContainerUtil.map( exceptions, new Function<PsiTypeCodeFragment, String>() { public String fun(PsiTypeCodeFragment fragment) { return fragment.getText(); } }); builder.append(INDENT).append(StringUtil.join(exceptionNames, ",\n" + INDENT)); } return builder.toString(); }
@Override protected void doAction() { if (!validateInputData()) { return; } stopEditing(); String modifier = ""; if (myPublicRadioButton.isSelected()) { modifier = GrModifier.PUBLIC; } else if (myPrivateRadioButton.isSelected()) { modifier = GrModifier.PRIVATE; } else if (myProtectedRadioButton.isSelected()) { modifier = GrModifier.PROTECTED; } PsiType returnType = null; try { returnType = myReturnTypeCodeFragment.getType(); } catch (PsiTypeCodeFragment.TypeSyntaxException ignored) { } catch (PsiTypeCodeFragment.NoTypeException ignored) { } String newName = getNewName(); final List<GrTableParameterInfo> tableParameterInfos = myParameterModel.getParameterInfos(); final List<GrParameterInfo> parameterInfos = ContainerUtil.map( tableParameterInfos, new Function<GrTableParameterInfo, GrParameterInfo>() { public GrParameterInfo fun(GrTableParameterInfo info) { return info.generateParameterInfo(); } }); final ThrownExceptionInfo[] exceptionInfos = myExceptionTableModel.getThrownExceptions(); invokeRefactoring( new GrChangeSignatureProcessor( myProject, new GrChangeInfoImpl( myMethod, modifier, returnType == null ? null : CanonicalTypes.createTypeWrapper(returnType), newName, parameterInfos, exceptionInfos, myDelegateRadioButton.isSelected()))); }
private boolean validateInputData() { if (!isGroovyMethodName(getNewName())) { showErrorHint(message("name.is.wrong", getNewName())); return false; } if (!checkType(myReturnTypeCodeFragment, true)) { showErrorHint(message("return.type.is.wrong")); return false; } List<GrTableParameterInfo> parameterInfos = myParameterModel.getParameterInfos(); for (int i = 0; i < parameterInfos.size(); i++) { GrTableParameterInfo info = parameterInfos.get(i); if (!StringUtil.isJavaIdentifier(info.getName())) { showErrorHint(message("name.is.wrong", info.getName())); return false; } if (!checkType(info.getTypeFragment(), i == parameterInfos.size() - 1)) { showErrorHint(message("type.for.parameter.is.incorrect", info.getName())); return false; } String defaultValue = info.getDefaultValue(); final String initializer = info.getDefaultInitializerFragment().getText(); if (info.getOldIndex() < 0 && defaultValue.trim().length() == 0 && initializer.trim().length() == 0) { showErrorHint(message("specify.default.value", info.getName())); return false; } } ThrownExceptionInfo[] exceptionInfos = myExceptionTableModel.getThrownExceptions(); PsiTypeCodeFragment[] typeCodeFragments = myExceptionTableModel.getTypeCodeFragments(); for (int i = 0; i < exceptionInfos.length; i++) { ThrownExceptionInfo exceptionInfo = exceptionInfos[i]; PsiTypeCodeFragment typeCodeFragment = typeCodeFragments[i]; try { PsiType type = typeCodeFragment.getType(); if (!(type instanceof PsiClassType)) { showErrorHint( GroovyRefactoringBundle.message( "changeSignature.wrong.type.for.exception", typeCodeFragment.getText())); return false; } PsiClassType throwable = JavaPsiFacade.getInstance(myMethod.getProject()) .getElementFactory() .createTypeByFQClassName("java.lang.Throwable", myMethod.getResolveScope()); if (!throwable.isAssignableFrom(type)) { showErrorHint( GroovyRefactoringBundle.message( "changeSignature.not.throwable.type", typeCodeFragment.getText())); return false; } exceptionInfo.setType((PsiClassType) type); } catch (PsiTypeCodeFragment.TypeSyntaxException e) { showErrorHint( GroovyRefactoringBundle.message( "changeSignature.wrong.type.for.exception", typeCodeFragment.getText())); return false; } catch (PsiTypeCodeFragment.NoTypeException e) { showErrorHint(GroovyRefactoringBundle.message("changeSignature.no.type.for.exception")); return false; } } return true; }