boolean (@Nullable PsiType lType, @Nullable PsiType rType) { if (lType == null || rType == null) return false; if (rType == PsiTypes.nullType()) { return !(lType instanceof PsiPrimitiveType); } if (rType instanceof GrTraitType) { for (PsiType type : ((GrTraitType)rType).getConjuncts()) { if (isAssignableWithoutConversions(lType, type)) return true; } return false; } if (isClassType(rType, GroovyCommonClassNames.GROOVY_LANG_GSTRING) && lType.equalsToText(CommonClassNames.JAVA_LANG_STRING)) { return true; } lType = optionalUnbox(lType); rType = optionalUnbox(rType); return TypeConversionUtil.isAssignable(lType, rType); }