Skip to content

Commit

Permalink
feat: annotation highlight and annotator
Browse files Browse the repository at this point in the history
  • Loading branch information
yjl9903 committed Apr 24, 2024
1 parent c1525f0 commit 0bbd46d
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class TirSyntaxHighlighter : SyntaxHighlighterBase() {
companion object {
val KEY = createTextAttributesKey("TIR_KEY", DefaultLanguageHighlighterColors.KEYWORD)

val ANNOTATION = createTextAttributesKey("TIR_ANNOTATION", DefaultLanguageHighlighterColors.METADATA)

val TYPE = createTextAttributesKey("TIR_TYPE", DefaultLanguageHighlighterColors.CLASS_NAME)

val INVOKE_KEY = createTextAttributesKey("TIR_INVOKE_KEY", DefaultLanguageHighlighterColors.FUNCTION_CALL)
Expand All @@ -40,6 +42,8 @@ class TirSyntaxHighlighter : SyntaxHighlighterBase() {

private val KEY_KEYS = arrayOf(KEY)

private val ANNOTATION_KEYS = arrayOf(ANNOTATION)

private val TYPE_KEYS = arrayOf(TYPE)

private val FIELD_KEYS = arrayOf(STATIC_FIELD, INSTANCE_FIELD)
Expand Down Expand Up @@ -91,6 +95,10 @@ class TirSyntaxHighlighter : SyntaxHighlighterBase() {
KEY_KEYS
}

TirTypes.ANNOTATION_DEF_NAME -> {
ANNOTATION_KEYS
}

TirTypes.INVOKE_VIRTUAL,
TirTypes.INVOKE_SPECIAL,
TirTypes.INVOKE_INTERFACE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ import pascal.taie.intellij.tir.syntax.psi.*
class TirAnnotator : Annotator {
override fun annotate(element: PsiElement, holder: AnnotationHolder) {
when (element) {
is TirAnnotationDefName -> {
holder.newSilentAnnotation(HighlightSeverity.INFORMATION)
.range(element.textRange)
.textAttributes(TirSyntaxHighlighter.ANNOTATION)
.create()
}

is TirIdentifierType -> {
if (element.parent !is TirIdentifierField) {
holder.newSilentAnnotation(HighlightSeverity.INFORMATION)
Expand Down
4 changes: 3 additions & 1 deletion src/main/syntax/tir.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ class_body ::= LBRACE class_member* RBRACE
class_member ::= field_def | method_def | COMMENT

// Annotation
annotation_def ::= AT identifier_class (LPAREN (annotation_key_element_list | annotation_element)? RPAREN)?
annotation_def ::= annotation_def_name (LPAREN (annotation_key_element_list | annotation_element)? RPAREN)?

annotation_def_name ::= AT identifier_class

annotation_key_element_list ::= annotation_key_element (COMMA annotation_key_element)*

Expand Down
77 changes: 44 additions & 33 deletions src/test/testData/AnnotatedJava.txt
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
Tir File: FILE(0,1633)
TirClassDefImpl(TirElementType.CLASS_DEF)(0,1633)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(0,11)
PsiElement(TirTokenType.AT)('@')(0,1)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(1,5)
PsiElement(TirTokenType.IDENTIFIER)('Year')(1,5)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(0,5)
PsiElement(TirTokenType.AT)('@')(0,1)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(1,5)
PsiElement(TirTokenType.IDENTIFIER)('Year')(1,5)
PsiElement(TirTokenType.LPAREN)('(')(5,6)
TirAnnotationElementImpl(TirElementType.ANNOTATION_ELEMENT)(6,10)
TirIntegerAnnotationElementImpl(TirElementType.INTEGER_ANNOTATION_ELEMENT)(6,10)
PsiElement(TirTokenType.INTEGER)('2022')(6,10)
PsiElement(TirTokenType.RPAREN)(')')(10,11)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(12,53)
PsiElement(TirTokenType.AT)('@')(12,13)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(13,19)
PsiElement(TirTokenType.IDENTIFIER)('Author')(13,19)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(12,19)
PsiElement(TirTokenType.AT)('@')(12,13)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(13,19)
PsiElement(TirTokenType.IDENTIFIER)('Author')(13,19)
PsiElement(TirTokenType.LPAREN)('(')(19,20)
TirAnnotationElementImpl(TirElementType.ANNOTATION_ELEMENT)(20,52)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(20,52)
PsiElement(TirTokenType.AT)('@')(20,21)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(21,25)
PsiElement(TirTokenType.IDENTIFIER)('Name')(21,25)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(20,25)
PsiElement(TirTokenType.AT)('@')(20,21)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(21,25)
PsiElement(TirTokenType.IDENTIFIER)('Name')(21,25)
PsiElement(TirTokenType.LPAREN)('(')(25,26)
TirAnnotationKeyElementListImpl(TirElementType.ANNOTATION_KEY_ELEMENT_LIST)(26,51)
TirAnnotationKeyElementImpl(TirElementType.ANNOTATION_KEY_ELEMENT)(26,38)
Expand Down Expand Up @@ -48,13 +51,15 @@ Tir File: FILE(0,1633)
TirClassMemberImpl(TirElementType.CLASS_MEMBER)(106,153)
TirFieldDefImpl(TirElementType.FIELD_DEF)(106,153)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(106,111)
PsiElement(TirTokenType.AT)('@')(106,107)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(107,111)
PsiElement(TirTokenType.IDENTIFIER)('Anno')(107,111)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(106,111)
PsiElement(TirTokenType.AT)('@')(106,107)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(107,111)
PsiElement(TirTokenType.IDENTIFIER)('Anno')(107,111)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(116,121)
PsiElement(TirTokenType.AT)('@')(116,117)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(117,121)
PsiElement(TirTokenType.IDENTIFIER)('Year')(117,121)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(116,121)
PsiElement(TirTokenType.AT)('@')(116,117)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(117,121)
PsiElement(TirTokenType.IDENTIFIER)('Year')(117,121)
TirModifierFieldImpl(TirElementType.MODIFIER_FIELD)(126,133)
PsiElement(TirTokenType.PRIVATE)('private')(126,133)
TirIdentifierTypeImpl(TirElementType.IDENTIFIER_TYPE)(134,150)
Expand All @@ -67,9 +72,10 @@ Tir File: FILE(0,1633)
TirClassMemberImpl(TirElementType.CLASS_MEMBER)(159,189)
TirFieldDefImpl(TirElementType.FIELD_DEF)(159,189)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(159,170)
PsiElement(TirTokenType.AT)('@')(159,160)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(160,164)
PsiElement(TirTokenType.IDENTIFIER)('Year')(160,164)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(159,164)
PsiElement(TirTokenType.AT)('@')(159,160)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(160,164)
PsiElement(TirTokenType.IDENTIFIER)('Year')(160,164)
PsiElement(TirTokenType.LPAREN)('(')(164,165)
TirAnnotationElementImpl(TirElementType.ANNOTATION_ELEMENT)(165,169)
TirIntegerAnnotationElementImpl(TirElementType.INTEGER_ANNOTATION_ELEMENT)(165,169)
Expand All @@ -87,9 +93,10 @@ Tir File: FILE(0,1633)
TirClassMemberImpl(TirElementType.CLASS_MEMBER)(195,262)
TirFieldDefImpl(TirElementType.FIELD_DEF)(195,262)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(195,230)
PsiElement(TirTokenType.AT)('@')(195,196)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(196,201)
PsiElement(TirTokenType.IDENTIFIER)('Cards')(196,201)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(195,201)
PsiElement(TirTokenType.AT)('@')(195,196)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(196,201)
PsiElement(TirTokenType.IDENTIFIER)('Cards')(196,201)
PsiElement(TirTokenType.LPAREN)('(')(201,202)
TirAnnotationElementImpl(TirElementType.ANNOTATION_ELEMENT)(202,229)
TirArrayAnnotationElementImpl(TirElementType.ARRAY_ANNOTATION_ELEMENT)(202,229)
Expand Down Expand Up @@ -137,9 +144,10 @@ Tir File: FILE(0,1633)
PsiElement(TirTokenType.LPAREN)('(')(347,348)
TirMethodSigParamsImpl(TirElementType.METHOD_SIG_PARAMS)(348,421)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(348,353)
PsiElement(TirTokenType.AT)('@')(348,349)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(349,353)
PsiElement(TirTokenType.IDENTIFIER)('Anno')(349,353)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(348,353)
PsiElement(TirTokenType.AT)('@')(348,349)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(349,353)
PsiElement(TirTokenType.IDENTIFIER)('Anno')(349,353)
TirIdentifierTypeImpl(TirElementType.IDENTIFIER_TYPE)(354,370)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(354,370)
PsiElement(TirTokenType.IDENTIFIER)('java.lang.Object')(354,370)
Expand All @@ -151,9 +159,10 @@ Tir File: FILE(0,1633)
PsiElement(TirTokenType.IDENTIFIER)('p2')(379,381)
PsiElement(TirTokenType.COMMA)(',')(381,382)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(383,401)
PsiElement(TirTokenType.AT)('@')(383,384)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(384,393)
PsiElement(TirTokenType.IDENTIFIER)('Copyright')(384,393)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(383,393)
PsiElement(TirTokenType.AT)('@')(383,384)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(384,393)
PsiElement(TirTokenType.IDENTIFIER)('Copyright')(384,393)
PsiElement(TirTokenType.LPAREN)('(')(393,394)
TirAnnotationElementImpl(TirElementType.ANNOTATION_ELEMENT)(394,400)
TirStringAnnotationElementImpl(TirElementType.STRING_ANNOTATION_ELEMENT)(394,400)
Expand Down Expand Up @@ -195,18 +204,20 @@ Tir File: FILE(0,1633)
TirClassMemberImpl(TirElementType.CLASS_MEMBER)(514,631)
TirMethodDefImpl(TirElementType.METHOD_DEF)(514,631)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(514,548)
PsiElement(TirTokenType.AT)('@')(514,515)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(515,524)
PsiElement(TirTokenType.IDENTIFIER)('ClassAnno')(515,524)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(514,524)
PsiElement(TirTokenType.AT)('@')(514,515)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(515,524)
PsiElement(TirTokenType.IDENTIFIER)('ClassAnno')(515,524)
PsiElement(TirTokenType.LPAREN)('(')(524,525)
TirAnnotationElementImpl(TirElementType.ANNOTATION_ELEMENT)(525,547)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(525,547)
PsiElement(TirTokenType.IDENTIFIER)('java.lang.String.class')(525,547)
PsiElement(TirTokenType.RPAREN)(')')(547,548)
TirAnnotationDefImpl(TirElementType.ANNOTATION_DEF)(553,584)
PsiElement(TirTokenType.AT)('@')(553,554)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(554,563)
PsiElement(TirTokenType.IDENTIFIER)('Copyright')(554,563)
TirAnnotationDefNameImpl(TirElementType.ANNOTATION_DEF_NAME)(553,563)
PsiElement(TirTokenType.AT)('@')(553,554)
TirIdentifierClassImpl(TirElementType.IDENTIFIER_CLASS)(554,563)
PsiElement(TirTokenType.IDENTIFIER)('Copyright')(554,563)
PsiElement(TirTokenType.LPAREN)('(')(563,564)
TirAnnotationElementImpl(TirElementType.ANNOTATION_ELEMENT)(564,583)
TirStringAnnotationElementImpl(TirElementType.STRING_ANNOTATION_ELEMENT)(564,583)
Expand Down

0 comments on commit 0bbd46d

Please sign in to comment.