From fed01eb00359dc7cd16c59c25a48e86ed6ab19ff Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 28 Mar 2014 18:37:56 +0400 Subject: [PATCH] Rewrite JetQualifiedExpression to kotlin and make it a trait Move implementation to JetQualifiedExpressionImpl class --- .../lang/psi/JetDotQualifiedExpression.java | 2 +- .../jet/lang/psi/JetQualifiedExpression.java | 62 ------------------- .../jet/lang/psi/JetQualifiedExpression.kt | 57 +++++++++++++++++ .../lang/psi/JetSafeQualifiedExpression.java | 2 +- 4 files changed, 59 insertions(+), 64 deletions(-) delete mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java index ce20935f714..35d72e95cad 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java @@ -19,7 +19,7 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; import org.jetbrains.annotations.NotNull; -public class JetDotQualifiedExpression extends JetQualifiedExpression { +public class JetDotQualifiedExpression extends JetQualifiedExpressionImpl { public JetDotQualifiedExpression(@NotNull ASTNode node) { super(node); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java deleted file mode 100644 index 4169e0499f4..00000000000 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2010-2013 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.jet.lang.psi; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lexer.JetToken; -import org.jetbrains.jet.lexer.JetTokens; - -public abstract class JetQualifiedExpression extends JetExpressionImpl { - public JetQualifiedExpression(@NotNull ASTNode node) { - super(node); - } - - @NotNull - public JetExpression getReceiverExpression() { - JetExpression left = findChildByClass(JetExpression.class); - assert left != null; - return left; - } - - @Nullable @IfNotParsed - public JetExpression getSelectorExpression() { - ASTNode node = getOperationTokenNode(); - while (node != null) { - PsiElement psi = node.getPsi(); - if (psi instanceof JetExpression) { - return (JetExpression) psi; - } - node = node.getTreeNext(); - } - - return null; - } - @NotNull - public ASTNode getOperationTokenNode() { - ASTNode operationNode = getNode().findChildByType(JetTokens.OPERATIONS); - assert operationNode != null; - return operationNode; - } - - @NotNull - public JetToken getOperationSign() { - return (JetToken) getOperationTokenNode().getElementType(); - } -} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.kt new file mode 100644 index 00000000000..4752261082e --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2010-2014 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.jet.lang.psi + +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import org.jetbrains.annotations.Nullable +import org.jetbrains.jet.lexer.JetToken +import org.jetbrains.jet.lexer.JetTokens + +public trait JetQualifiedExpression : JetExpression { + public fun getReceiverExpression(): JetExpression + + public fun getSelectorExpression(): JetExpression? + + public fun getOperationTokenNode(): ASTNode { + val operationNode = getNode()!!.findChildByType(JetTokens.OPERATIONS) + return operationNode!! + } + + public fun getOperationSign(): JetToken { + return getOperationTokenNode().getElementType() as JetToken + } +} + +public abstract class JetQualifiedExpressionImpl(node: ASTNode) : JetExpressionImpl(node), JetQualifiedExpression { + public override fun getReceiverExpression(): JetExpression { + val left = findChildByClass(javaClass()) + return left!! + } + + public override fun getSelectorExpression(): JetExpression? { + var node: ASTNode? = getOperationTokenNode() + while (node != null) { + val psi = node!!.getPsi() + if (psi is JetExpression) { + return (psi as JetExpression) + } + node = node!!.getTreeNext() + } + return null + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSafeQualifiedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSafeQualifiedExpression.java index 760a2d95682..71f1114af3a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSafeQualifiedExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSafeQualifiedExpression.java @@ -19,7 +19,7 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; import org.jetbrains.annotations.NotNull; -public class JetSafeQualifiedExpression extends JetQualifiedExpression { +public class JetSafeQualifiedExpression extends JetQualifiedExpressionImpl { public JetSafeQualifiedExpression(@NotNull ASTNode node) { super(node); }