diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java b/idea/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java index 566df104b0d..299e16ab61b 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java @@ -2,6 +2,9 @@ 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.JetNodeTypes; +import org.jetbrains.jet.lexer.JetTokens; /** * @author max @@ -15,4 +18,19 @@ public class JetTypeParameter extends JetNamedDeclaration { public void accept(JetVisitor visitor) { visitor.visitTypeParameter(this); } + + @NotNull + public Variance getVariance() { + JetModifierList modifierList = getModifierList(); + if (modifierList == null) return Variance.INVARIANT; + + if (modifierList.hasModifier(JetTokens.OUT_KEYWORD)) return Variance.OUT_VARIANCE; + if (modifierList.hasModifier(JetTokens.IN_KEYWORD)) return Variance.IN_VARIANCE; + return Variance.INVARIANT; + } + + @Nullable + public JetTypeReference getExtendsBound() { + return (JetTypeReference) findChildByType(JetNodeTypes.TYPE_REFERENCE); + } } diff --git a/idea/src/org/jetbrains/jet/lang/psi/Variance.java b/idea/src/org/jetbrains/jet/lang/psi/Variance.java new file mode 100644 index 00000000000..db46df2e33c --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/Variance.java @@ -0,0 +1,10 @@ +package org.jetbrains.jet.lang.psi; + +/** + * @author max + */ +public enum Variance { + INVARIANT, + IN_VARIANCE, + OUT_VARIANCE +}