Java parser facade extended

This commit is contained in:
Roman Shevchenko
2010-12-20 13:40:36 +03:00
parent 61d0668161
commit f5cf5983f3
2 changed files with 51 additions and 6 deletions
@@ -71,6 +71,13 @@ 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);
}
};
private static final JavaParserUtil.ParserWrapper TYPE_PARAMETER = new JavaParserUtil.ParserWrapper() {
@Override
public void parse(final PsiBuilder builder) {
@@ -224,21 +231,35 @@ public class PsiJavaParserFacadeImpl extends PsiParserFacadeImpl implements PsiJ
return createTypeInner(text, context, false);
}
protected PsiType createTypeInner(final String text, final PsiElement context, final boolean markAsCopy) throws IncorrectOperationException {
final PsiPrimitiveType primitiveType = PRIMITIVE_TYPES.get(text);
if (primitiveType != null) return primitiveType;
@NotNull
public PsiTypeElement createTypeElementFromText(@NotNull final String text, final PsiElement context) throws IncorrectOperationException {
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 + "\".");
}
return (PsiTypeElement)element;
}
protected PsiType createTypeInner(final String text, final PsiElement context, final boolean markAsCopy) throws IncorrectOperationException {
final PsiPrimitiveType primitiveType = PRIMITIVE_TYPES.get(text);
if (primitiveType != null) return primitiveType;
final PsiTypeElement element = createTypeElementFromText(text, context);
if (markAsCopy) {
holder.getTreeElement().acceptTree(new GeneratedMarkerVisitor());
((TreeElement)element.getNode()).acceptTree(new GeneratedMarkerVisitor());
}
return element.getType();
}
return ((PsiTypeElement)element).getType();
@NotNull
public PsiJavaCodeReferenceElement createReferenceFromText(@NotNull final String text, final PsiElement context) throws IncorrectOperationException {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, REFERENCE, false), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiJavaCodeReferenceElement)) {
throw new IncorrectOperationException("Incorrect reference \"" + text + "\".");
}
return (PsiJavaCodeReferenceElement)element;
}
@NotNull
@@ -128,6 +128,30 @@ public interface PsiJavaParserFacade extends PsiParserFacade {
@NotNull
PsiType createTypeFromText(@NotNull @NonNls String text, PsiElement context) throws IncorrectOperationException;
/**
* Creates a Java type element from the specified text.
*
* @param text the text of the type to create (for example, a primitive type keyword, an array
* declaration or the name of a class).
* @param context the PSI element used as context for resolving the reference.
* @return the created type element.
* @throws com.intellij.util.IncorrectOperationException if the text does not specify a valid type.
*/
@NotNull
PsiTypeElement createTypeElementFromText(@NotNull @NonNls String text, PsiElement context) throws IncorrectOperationException;
/**
* Creates a Java code reference from the specified text.
*
* @param text the text of the type to create (for example, a primitive type keyword, an array
* declaration or the name of a class).
* @param context the PSI element used as context for resolving the reference.
* @return the created reference element.
* @throws com.intellij.util.IncorrectOperationException if the text does not specify a valid type.
*/
@NotNull
PsiJavaCodeReferenceElement createReferenceFromText(@NotNull @NonNls String text, PsiElement context) throws IncorrectOperationException;
/**
* Creates a Java code block from the specified text.
*