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 35d72e95cad..bcf5c0348d9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java @@ -17,9 +17,12 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; +import com.intellij.psi.stubs.StubElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lexer.JetToken; -public class JetDotQualifiedExpression extends JetQualifiedExpressionImpl { +public class JetDotQualifiedExpression extends JetExpressionImplStub implements JetQualifiedExpression { public JetDotQualifiedExpression(@NotNull ASTNode node) { super(node); } @@ -28,4 +31,29 @@ public class JetDotQualifiedExpression extends JetQualifiedExpressionImpl { public R accept(@NotNull JetVisitor visitor, D data) { return visitor.visitDotQualifiedExpression(this, data); } + + @NotNull + @Override + public JetExpression getReceiverExpression() { + return JetQualifiedExpressionImpl.instance$.getReceiverExpression(this); + } + + + @Nullable + @Override + public JetExpression getSelectorExpression() { + return JetQualifiedExpressionImpl.instance$.getSelectorExpression(this); + } + + @NotNull + @Override + public ASTNode getOperationTokenNode() { + return JetQualifiedExpressionImpl.instance$.getOperationTokenNode(this); + } + + @NotNull + @Override + public JetToken getOperationSign() { + return JetQualifiedExpressionImpl.instance$.getOperationSign(this); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java new file mode 100644 index 00000000000..a5915d53670 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java @@ -0,0 +1,36 @@ +/* + * 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 org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lexer.JetToken; + +public interface JetQualifiedExpression extends JetExpression { + @NotNull + JetExpression getReceiverExpression(); + + @Nullable + JetExpression getSelectorExpression(); + + @NotNull + ASTNode getOperationTokenNode(); + + @NotNull + JetToken getOperationSign(); +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpressionImpl.kt similarity index 62% rename from compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.kt rename to compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpressionImpl.kt index 4752261082e..05813ddfded 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpressionImpl.kt @@ -21,29 +21,24 @@ import com.intellij.psi.PsiElement import org.jetbrains.annotations.Nullable import org.jetbrains.jet.lexer.JetToken import org.jetbrains.jet.lexer.JetTokens +import com.intellij.psi.util.PsiTreeUtil -public trait JetQualifiedExpression : JetExpression { - public fun getReceiverExpression(): JetExpression - - public fun getSelectorExpression(): JetExpression? - - public fun getOperationTokenNode(): ASTNode { - val operationNode = getNode()!!.findChildByType(JetTokens.OPERATIONS) +object JetQualifiedExpressionImpl { + public fun JetQualifiedExpression.getOperationTokenNode(): ASTNode { + val operationNode = this.getNode()!!.findChildByType(JetTokens.OPERATIONS) return operationNode!! } - public fun getOperationSign(): JetToken { - return getOperationTokenNode().getElementType() as JetToken + public fun JetQualifiedExpression.getOperationSign(): JetToken { + return this.getOperationTokenNode().getElementType() as JetToken } -} -public abstract class JetQualifiedExpressionImpl(node: ASTNode) : JetExpressionImpl(node), JetQualifiedExpression { - public override fun getReceiverExpression(): JetExpression { - val left = findChildByClass(javaClass()) + public fun JetQualifiedExpression.getReceiverExpression(): JetExpression { + val left = PsiTreeUtil.findChildOfType(this, javaClass()) return left!! } - public override fun getSelectorExpression(): JetExpression? { + public fun JetQualifiedExpression.getSelectorExpression(): JetExpression? { var node: ASTNode? = getOperationTokenNode() while (node != null) { val psi = node!!.getPsi() @@ -54,4 +49,4 @@ public abstract class JetQualifiedExpressionImpl(node: ASTNode) : JetExpressionI } return null } -} +} \ No newline at end of file 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 71f1114af3a..ac08eff774e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSafeQualifiedExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSafeQualifiedExpression.java @@ -18,8 +18,10 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lexer.JetToken; -public class JetSafeQualifiedExpression extends JetQualifiedExpressionImpl { +public class JetSafeQualifiedExpression extends JetExpressionImpl implements JetQualifiedExpression { public JetSafeQualifiedExpression(@NotNull ASTNode node) { super(node); } @@ -28,4 +30,28 @@ public class JetSafeQualifiedExpression extends JetQualifiedExpressionImpl { public R accept(@NotNull JetVisitor visitor, D data) { return visitor.visitSafeQualifiedExpression(this, data); } + + @NotNull + @Override + public JetExpression getReceiverExpression() { + return JetQualifiedExpressionImpl.instance$.getReceiverExpression(this); + } + + @Nullable + @Override + public JetExpression getSelectorExpression() { + return JetQualifiedExpressionImpl.instance$.getSelectorExpression(this); + } + + @NotNull + @Override + public ASTNode getOperationTokenNode() { + return JetQualifiedExpressionImpl.instance$.getOperationTokenNode(this); + } + + @NotNull + @Override + public JetToken getOperationSign() { + return JetQualifiedExpressionImpl.instance$.getOperationSign(this); + } }