PsiType () { final Template template = getTemplate(); String text = template.getTemplateText(); StringBuilder resultingText = new StringBuilder(text); int segmentsCount = template.getSegmentsCount(); for (int j = segmentsCount - 1; j >= 0; j--) { if (template.getSegmentName(j).equals(TemplateImpl.END)) { continue; } resultingText.insert(template.getSegmentOffset(j), "xxx"); } try { final PsiExpression templateExpression = JavaPsiFacade.getElementFactory(myContext.getProject()).createExpressionFromText(resultingText.toString(), myContext); return templateExpression.getType(); } catch (IncorrectOperationException e) { // can happen when text of the template does not form an expression return null; } }