Return firstChildNode for codeFragments in doParseContents as expected

This commit is contained in:
Natalia Ukhorskaya
2014-04-30 15:36:11 +04:00
parent 54cc5d1440
commit 3f95cdb7bb
4 changed files with 8 additions and 37 deletions
@@ -30,17 +30,5 @@ public class JetExpressionCodeFragment(
context: PsiElement?
) : JetCodeFragment(project, name, text, JetNodeTypes.EXPRESSION_CODE_FRAGMENT, context) {
fun getExpression(): JetExpression? {
var resultingExpression: JetExpression? = null
this.accept(object: JetTreeVisitor<Void>() {
override fun visitExpression(expression: JetExpression, data: Void?): Void? {
resultingExpression = expression
return null
}
override fun visitElement(element: PsiElement) = element.acceptChildren(this)
}, null)
return resultingExpression
}
fun getExpression() = findChildByClass(javaClass<JetExpression>())
}
@@ -44,7 +44,7 @@ public class JetExpressionCodeFragmentType extends JetFileElementType {
Project project = psi.getProject();
Language languageForParser = getLanguageForParser(psi);
PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(project, chameleon, null, languageForParser, chameleon.getChars());
return JetParser.parseExpressionCodeFragment(builder);
return JetParser.parseExpressionCodeFragment(builder).getFirstChildNode();
}
}
@@ -18,12 +18,10 @@ package org.jetbrains.jet.lang.psi;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetTokens;
public class JetTypeCodeFragment extends JetCodeFragment {
public JetTypeCodeFragment(Project project, String name, CharSequence text, PsiElement context) {
@@ -32,26 +30,11 @@ public class JetTypeCodeFragment extends JetCodeFragment {
@Nullable
public JetType getType() {
JetType type = null;
for (PsiElement child : getChildren()) {
IElementType elementType = child.getNode().getElementType();
if (elementType == JetNodeTypes.TYPE_CODE_FRAGMENT) {
for (PsiElement grChild : child.getChildren()) {
if (grChild instanceof JetTypeReference) {
if (!grChild.getText().isEmpty())
//TODO return the actual type
type = KotlinBuiltIns.getInstance().getAnyType();
}
else if (!JetTokens.WHITE_SPACE_OR_COMMENT_BIT_SET.contains(elementType))
return null;
}
}
else if (!JetTokens.WHITE_SPACE_OR_COMMENT_BIT_SET.contains(elementType))
return null;
JetTypeReference typeReference = findChildByClass(JetTypeReference.class);
if (typeReference != null) {
//TODO return the actual type
return KotlinBuiltIns.getInstance().getAnyType();
}
return type;
return null;
}
}
@@ -44,6 +44,6 @@ public class JetTypeCodeFragmentType extends JetFileElementType {
Project project = psi.getProject();
Language languageForParser = getLanguageForParser(psi);
PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(project, chameleon, null, languageForParser, chameleon.getChars());
return JetParser.parseTypeCodeFragment(builder);
return JetParser.parseTypeCodeFragment(builder).getFirstChildNode();
}
}