Added JetCallableDeclaration.getColon()

This commit is contained in:
Valentin Kipyatkov
2014-10-23 21:15:42 +04:00
parent d13fd19a63
commit 357ea7a995
8 changed files with 41 additions and 6 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.psi;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.Nullable;
public interface JetCallableDeclaration extends JetNamedDeclaration, JetTypeParameterListOwner {
@@ -30,4 +31,7 @@ public interface JetCallableDeclaration extends JetNamedDeclaration, JetTypePara
@Nullable
JetTypeReference setTypeReference(@Nullable JetTypeReference typeRef);
@Nullable
PsiElement getColon();
}
@@ -87,6 +87,12 @@ abstract public class JetFunctionNotStubbed extends JetTypeParameterListOwnerNot
return TypeRefHelpersPackage.setTypeReference(this, getValueParameterList(), typeRef);
}
@Nullable
@Override
public PsiElement getColon() {
return findChildByType(JetTokens.COLON);
}
@Override
public boolean isLocal() {
PsiElement parent = getParent();
@@ -17,6 +17,7 @@
package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -47,6 +48,12 @@ public class JetMultiDeclarationEntry extends JetNamedDeclarationNotStubbed impl
return TypeRefHelpersPackage.setTypeReference(this, getNameIdentifier(), typeRef);
}
@Nullable
@Override
public PsiElement getColon() {
return findChildByType(JetTokens.COLON);
}
@Nullable
@Override
public JetParameterList getValueParameterList() {
@@ -186,6 +186,12 @@ public class JetNamedFunction extends JetTypeParameterListOwnerStub<PsiJetFuncti
return TypeRefHelpersPackage.setTypeReference(this, getValueParameterList(), typeRef);
}
@Nullable
@Override
public PsiElement getColon() {
return findChildByType(JetTokens.COLON);
}
@Override
public boolean isLocal() {
PsiElement parent = getParent();
@@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode;
import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.stubs.PsiJetParameterStub;
@@ -56,6 +57,12 @@ public class JetParameter extends JetNamedDeclarationStub<PsiJetParameterStub> i
return TypeRefHelpersPackage.setTypeReference(this, getNameIdentifier(), typeRef);
}
@Nullable
@Override
public PsiElement getColon() {
return findChildByType(JetTokens.COLON);
}
public boolean hasDefaultValue() {
PsiJetParameterStub stub = getStub();
if (stub != null) {
@@ -144,6 +144,12 @@ public class JetProperty extends JetTypeParameterListOwnerStub<PsiJetPropertyStu
return TypeRefHelpersPackage.setTypeReference(this, getNameIdentifier(), typeRef);
}
@Nullable
@Override
public PsiElement getColon() {
return findChildByType(JetTokens.COLON);
}
@NotNull
public List<JetPropertyAccessor> getAccessors() {
return getStubOrPsiChildrenAsList(JetStubElementTypes.PROPERTY_ACCESSOR);
@@ -18,22 +18,21 @@ package org.jetbrains.jet.lang.psi.typeRefHelpers
import org.jetbrains.jet.lang.psi.JetTypeReference
import org.jetbrains.jet.lexer.JetTokens
import org.jetbrains.jet.lang.psi.JetDeclaration
import org.jetbrains.jet.lang.psi.psiUtil.siblings
import com.intellij.psi.PsiElement
import org.jetbrains.jet.lang.psi.JetPsiFactory
import com.intellij.psi.PsiWhiteSpace
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import com.intellij.psi.PsiErrorElement
import org.jetbrains.jet.lang.psi.JetCallableDeclaration
fun getTypeReference(declaration: JetDeclaration): JetTypeReference? {
fun getTypeReference(declaration: JetCallableDeclaration): JetTypeReference? {
return declaration.getFirstChild()!!.siblings(forward = true)
.dropWhile { it.getNode()!!.getElementType() != JetTokens.COLON }
.filterIsInstance(javaClass<JetTypeReference>())
.firstOrNull()
}
fun setTypeReference(declaration: JetNamedDeclaration, addAfter: PsiElement?, typeRef: JetTypeReference?): JetTypeReference? {
fun setTypeReference(declaration: JetCallableDeclaration, addAfter: PsiElement?, typeRef: JetTypeReference?): JetTypeReference? {
val oldTypeRef = getTypeReference(declaration)
if (typeRef != null) {
if (oldTypeRef != null) {
@@ -48,7 +47,7 @@ fun setTypeReference(declaration: JetNamedDeclaration, addAfter: PsiElement?, ty
}
else {
if (oldTypeRef != null) {
val colon = declaration.getNode()!!.findChildByType(JetTokens.COLON)!!.getPsi()!!
val colon = declaration.getColon()!!
val removeFrom = colon.getPrevSibling() as? PsiWhiteSpace ?: colon
declaration.deleteChildRange(removeFrom, oldTypeRef)
}
@@ -55,7 +55,7 @@ public class ConvertToExpressionBodyAction : PsiElementBaseIntentionAction() {
if (declaration.hasDeclaredReturnType() && declaration is JetCallableDeclaration && canOmitType(declaration)) {
val typeRef = declaration.getTypeReference()!!
val colon = typeRef.siblings(forward = false, withItself = false).first { it.getNode().getElementType() == JetTokens.COLON }
val colon = declaration.getColon()!!
val range = TextRange(colon.getTextRange().getStartOffset(), typeRef.getTextRange().getEndOffset())
editor.getSelectionModel().setSelection(range.getStartOffset(), range.getEndOffset())
editor.getCaretModel().moveToOffset(range.getEndOffset())