From f53a0b0536555c6cb90caa6dc245970a56d4d1b9 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 10 Jul 2015 14:48:40 +0300 Subject: [PATCH] Converted JetNameReferenceExpression to Kotlin --- .../psi/JetNameReferenceExpression.java | 86 ------------------- .../kotlin/psi/JetNameReferenceExpression.kt | 69 +++++++++++++++ .../kotlin/psi/JetSimpleNameExpression.kt | 27 +++--- 3 files changed, 82 insertions(+), 100 deletions(-) delete mode 100644 compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.java create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.java deleted file mode 100644 index 9f7cdf5ac33..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.psi; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.tree.IElementType; -import com.intellij.psi.tree.TokenSet; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.psi.stubs.KotlinNameReferenceExpressionStub; -import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes; -import org.jetbrains.kotlin.name.Name; -import org.jetbrains.kotlin.lexer.JetTokens; - -import static org.jetbrains.kotlin.lexer.JetTokens.*; - -public class JetNameReferenceExpression extends JetExpressionImplStub implements JetSimpleNameExpression { - - private static final TokenSet NAME_REFERENCE_EXPRESSIONS = TokenSet.create(IDENTIFIER, FIELD_IDENTIFIER, THIS_KEYWORD, SUPER_KEYWORD); - - public JetNameReferenceExpression(@NotNull ASTNode node) { - super(node); - } - - public JetNameReferenceExpression(@NotNull KotlinNameReferenceExpressionStub stub) { - super(stub, JetStubElementTypes.REFERENCE_EXPRESSION); - } - - @Override - @NotNull - public String getReferencedName() { - KotlinNameReferenceExpressionStub stub = getStub(); - if (stub != null) { - return stub.getReferencedName(); - } - return JetSimpleNameExpressionImpl.Helper.getReferencedNameImpl(this); - } - - @Override - @NotNull - public Name getReferencedNameAsName() { - return JetSimpleNameExpressionImpl.Helper.getReferencedNameAsNameImpl(this); - } - - @Override - @NotNull - public PsiElement getReferencedNameElement() { - PsiElement element = findChildByType(NAME_REFERENCE_EXPRESSIONS); - if (element == null) { - return this; - } - return element; - } - - @Override - @Nullable - public PsiElement getIdentifier() { - return findChildByType(JetTokens.IDENTIFIER); - } - - @NotNull - @Override - public IElementType getReferencedNameElementType() { - return JetSimpleNameExpressionImpl.Helper.getReferencedNameElementTypeImpl(this); - } - - @Override - public R accept(@NotNull JetVisitor visitor, D data) { - return visitor.visitSimpleNameExpression(this, data); - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.kt new file mode 100644 index 00000000000..e2132dc5732 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetNameReferenceExpression.kt @@ -0,0 +1,69 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.psi + +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import com.intellij.psi.tree.IElementType +import com.intellij.psi.tree.TokenSet +import org.jetbrains.kotlin.psi.stubs.KotlinNameReferenceExpressionStub +import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.lexer.JetTokens + +import org.jetbrains.kotlin.lexer.JetTokens.* + +public class JetNameReferenceExpression : JetExpressionImplStub, JetSimpleNameExpression { + public constructor(node: ASTNode) : super(node) { + } + + public constructor(stub: KotlinNameReferenceExpressionStub) : super(stub, JetStubElementTypes.REFERENCE_EXPRESSION) { + } + + override fun getReferencedName(): String { + val stub = getStub() + if (stub != null) { + return stub.getReferencedName() + } + return JetSimpleNameExpressionImpl.getReferencedNameImpl(this) + } + + override fun getReferencedNameAsName(): Name { + return JetSimpleNameExpressionImpl.getReferencedNameAsNameImpl(this) + } + + override fun getReferencedNameElement(): PsiElement { + val element = findChildByType(NAME_REFERENCE_EXPRESSIONS) ?: return this + return element + } + + override fun getIdentifier(): PsiElement? { + return findChildByType(JetTokens.IDENTIFIER) + } + + override fun getReferencedNameElementType(): IElementType { + return JetSimpleNameExpressionImpl.getReferencedNameElementTypeImpl(this) + } + + override fun accept(visitor: JetVisitor, data: D): R { + return visitor.visitSimpleNameExpression(this, data) + } + + companion object { + private val NAME_REFERENCE_EXPRESSIONS = TokenSet.create(IDENTIFIER, FIELD_IDENTIFIER, THIS_KEYWORD, SUPER_KEYWORD) + } +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetSimpleNameExpression.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetSimpleNameExpression.kt index ea8976929c3..3223f76655e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetSimpleNameExpression.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetSimpleNameExpression.kt @@ -18,11 +18,12 @@ package org.jetbrains.kotlin.psi import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement +import com.intellij.psi.PsiReference import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.lexer.JetTokens +import org.jetbrains.kotlin.name.Name -public trait JetSimpleNameExpression : JetReferenceExpression { +public interface JetSimpleNameExpression : JetReferenceExpression { public fun getReferencedName(): String @@ -36,33 +37,31 @@ public trait JetSimpleNameExpression : JetReferenceExpression { } abstract class JetSimpleNameExpressionImpl(node: ASTNode) : JetExpressionImpl(node), JetSimpleNameExpression { - override fun getIdentifier(): PsiElement? = findChildByType(JetTokens.IDENTIFIER) - override fun getReferencedNameElementType() = getReferencedNameElementTypeImpl() + override fun getReferencedNameElementType() = getReferencedNameElementTypeImpl(this) override fun accept(visitor: JetVisitor, data: D): R { return visitor.visitSimpleNameExpression(this, data) } - override fun getReferencedNameAsName() = getReferencedNameAsNameImpl() + override fun getReferencedNameAsName() = getReferencedNameAsNameImpl(this) - override fun getReferencedName() = getReferencedNameImpl() + override fun getReferencedName() = getReferencedNameImpl(this) //NOTE: an unfortunate way to share an implementation between stubbed and not stubbed tree - companion object Helper { - - fun JetSimpleNameExpression.getReferencedNameElementTypeImpl(): IElementType { - return this.getReferencedNameElement().getNode()!!.getElementType()!! + companion object { + fun getReferencedNameElementTypeImpl(expression: JetSimpleNameExpression): IElementType { + return expression.getReferencedNameElement().getNode()!!.getElementType() } - fun JetSimpleNameExpression.getReferencedNameAsNameImpl(): Name { - val name = this.getReferencedName() + fun getReferencedNameAsNameImpl(expresssion: JetSimpleNameExpression): Name { + val name = expresssion.getReferencedName() return Name.identifierNoValidate(name) } - fun JetSimpleNameExpression.getReferencedNameImpl(): String { - val text = this.getReferencedNameElement().getNode()!!.getText() + fun getReferencedNameImpl(expression: JetSimpleNameExpression): String { + val text = expression.getReferencedNameElement().getNode()!!.getText() return JetPsiUtil.unquoteIdentifierOrFieldReference(text) } }