void (@NotNull GrSafeCastExpression typeCastExpression) { final GrExpression operand = (GrExpression)PsiUtil.skipParenthesesIfSensibly(typeCastExpression.getOperand(), false); final GrTypeElement typeElement = typeCastExpression.getCastTypeElement(); if (operand instanceof GrListOrMap && ((GrListOrMap)operand).isMap() && typeElement != null) { AnonymousFromMapGenerator.writeAnonymousMap((GrListOrMap)operand, typeElement, builder, context); return; } final PsiType type = typeElement.getType(); if (operand instanceof GrListOrMap && !((GrListOrMap)operand).isMap() && type instanceof PsiArrayType) { builder.append("new "); final GrExpression[] initializers = ((GrListOrMap)operand).getInitializers(); if (initializers.length == 0) { TypeWriter.writeTypeForNew(builder, ((PsiArrayType)type).getComponentType(), typeCastExpression); builder.append("[0]"); } else { TypeWriter.writeTypeForNew(builder, type, typeCastExpression); builder.append('{'); final PsiType newExpectedType = expectedType instanceof PsiArrayType ? ((PsiArrayType)expectedType).getComponentType() : null; final ExpressionGenerator childGenerator = new ExpressionGenerator(builder, context, newExpectedType); for (GrExpression initializer : initializers) { initializer.accept(childGenerator); builder.append(", "); } builder.delete(builder.length() - 2, builder.length()); builder.append('}'); } return; } final GroovyResolveResult resolveResult = PsiImplUtil.extractUniqueResult(typeCastExpression.getReference().multiResolve(false)); final PsiElement resolved = resolveResult.getElement(); if (resolved instanceof PsiMethod) { final GrExpression typeParam; try { typeParam = factory.createExpressionFromText(typeElement.getText(), typeCastExpression); } catch (IncorrectOperationException e) { generateCast(typeElement, operand); return; } invokeMethodOn( ((PsiMethod)resolved), operand, new GrExpression[]{typeParam}, GrNamedArgument.EMPTY_ARRAY, GrClosableBlock.EMPTY_ARRAY, resolveResult.getSubstitutor(), typeCastExpression ); } else { generateCast(typeElement, operand); } }