IDEA-66668 (use higher level language feature in parser facade)

This commit is contained in:
Roman Shevchenko
2011-03-17 19:34:33 +01:00
parent b5515a58b3
commit 89160cb8f1
@@ -34,7 +34,6 @@ import com.intellij.psi.impl.source.SourceTreeToPsiMap;
import com.intellij.psi.impl.source.tree.TreeElement;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.NotNull;
@@ -72,13 +71,6 @@ public class PsiJavaParserFacadeImpl extends PsiParserFacadeImpl implements PsiJ
};
private static final JavaParserUtil.ParserWrapper TYPE = new JavaParserUtil.ParserWrapper() {
@Override
public void parse(final PsiBuilder builder) {
ReferenceParser.parseType(builder, ReferenceParser.EAT_LAST_DOT | ReferenceParser.ELLIPSIS | ReferenceParser.WILDCARD);
}
};
private static final JavaParserUtil.ParserWrapper DISJUNCTIVE_TYPE = new JavaParserUtil.ParserWrapper() {
@Override
public void parse(final PsiBuilder builder) {
ReferenceParser.parseType(builder, ReferenceParser.EAT_LAST_DOT | ReferenceParser.ELLIPSIS |
@@ -89,7 +81,7 @@ public class PsiJavaParserFacadeImpl extends PsiParserFacadeImpl implements PsiJ
public static final JavaParserUtil.ParserWrapper REFERENCE = new JavaParserUtil.ParserWrapper() {
@Override
public void parse(final PsiBuilder builder) {
ReferenceParser.parseJavaCodeReference(builder, false, true, false, false, false);
ReferenceParser.parseJavaCodeReference(builder, false, true, false, false, true);
}
};
@@ -277,11 +269,7 @@ public class PsiJavaParserFacadeImpl extends PsiParserFacadeImpl implements PsiJ
@NotNull
@Override
public PsiTypeElement createTypeElementFromText(@NotNull final String text, final PsiElement context) throws IncorrectOperationException {
final boolean multiCatch = context instanceof PsiParameter &&
context.getParent() instanceof PsiCatchSection &&
PsiUtil.isLanguageLevel7OrHigher(context);
final JavaParserUtil.ParserWrapper wrapper = multiCatch ? DISJUNCTIVE_TYPE : TYPE;
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, wrapper, false), context);
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, TYPE, false), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiTypeElement)) {
throw new IncorrectOperationException("Incorrect type \"" + text + "\".");