diff --git a/build.gradle.kts b/build.gradle.kts index c283684988ec4219febbbc8c4667dea0f0d535a7..a3635732989a196f93e7cf9de53dfec463fe5da3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -86,44 +86,44 @@ grammarKit { tasks { - val generateRelAstGrammarLexer = task<GenerateLexer>("generateRelAstGrammarLexer") { - source = "src/main/grammar/RelAstGrammar.flex" - targetDir = "src/gen/java/org/jastadd/tooling/lexer/" - targetClass = "RelAstGrammarLexer" + val generateGrammarLexer = task<GenerateLexer>("generateGrammarLexer") { + source = "src/main/grammar/Grammar.flex" + targetDir = "src/gen/java/org/jastadd/tooling/grammar/lexer/" + targetClass = "GrammarLexer" purgeOldFiles = true } // not fully working because of https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/3 - val generateRelAstGrammarParser = task<GenerateParser>("generateRelAstGrammarParser") { - source = "src/main/grammar/RelAstGrammar.bnf" + val generateGrammarParser = task<GenerateParser>("generateGrammarParser") { + source = "src/main/grammar/Grammar.bnf" targetRoot = "src/gen/java" - pathToParser = "/org/jastadd/tooling/RelAstGrammarParser.java" - pathToPsiRoot = "/org/jastadd/tooling/psi" + pathToParser = "/org/jastadd/tooling/grammar/GrammarParser.java" + pathToPsiRoot = "/org/jastadd/tooling/grammar/psi" purgeOldFiles = true } - val generateJastAddAspectLexer = task<GenerateLexer>("generateJastAddAspectLexer") { - source = "src/main/grammar/JastAddAspect.flex" + val generateAspectLexer = task<GenerateLexer>("generateAspectLexer") { + source = "src/main/grammar/Aspect.flex" targetDir = "src/gen/java/org/jastadd/tooling/aspect/lexer/" - targetClass = "JastAddAspectLexer" + targetClass = "AspectLexer" purgeOldFiles = true } // not fully working because of https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/3 - val generateJastAddAspectParser = task<GenerateParser>("generateJastAddAspectParser") { - source = "src/main/grammar/JastAddAspect.bnf" + val generateAspectParser = task<GenerateParser>("generateAspectParser") { + source = "src/main/grammar/Aspect.bnf" targetRoot = "src/gen/java" - pathToParser = "/org/jastadd/tooling/aspect/JastAddAspectParser.java" + pathToParser = "/org/jastadd/tooling/aspect/AspectParser.java" pathToPsiRoot = "/org/jastadd/tooling/aspect/psi" purgeOldFiles = true } compileJava { - dependsOn(generateRelAstGrammarLexer) - dependsOn(generateRelAstGrammarParser) - dependsOn(generateJastAddAspectLexer) - dependsOn(generateJastAddAspectParser) + dependsOn(generateGrammarLexer) + dependsOn(generateGrammarParser) + dependsOn(generateAspectLexer) + dependsOn(generateAspectParser) } withType<JavaCompile> { diff --git a/src/main/grammar/JastAddAspect.bnf b/src/main/grammar/Aspect.bnf similarity index 98% rename from src/main/grammar/JastAddAspect.bnf rename to src/main/grammar/Aspect.bnf index 4fa13c65044f060688e8f338c8a259415ed8871c..de5d7962f16b7b1908d453908e075e55e24f717a 100644 --- a/src/main/grammar/JastAddAspect.bnf +++ b/src/main/grammar/Aspect.bnf @@ -8,9 +8,9 @@ psiPackage="org.jastadd.tooling.aspect.psi" psiImplPackage="org.jastadd.tooling.aspect.psi.impl" - elementTypeHolderClass="org.jastadd.tooling.aspect.psi.JastAddAspectTypes" - elementTypeClass="org.jastadd.tooling.aspect.JastAddAspectElementType" - tokenTypeClass="org.jastadd.tooling.aspect.JastAddAspectTokenType" + elementTypeHolderClass="org.jastadd.tooling.aspect.psi.AspectTypes" + elementTypeClass="org.jastadd.tooling.aspect.psi.AspectElementType" + tokenTypeClass="org.jastadd.tooling.aspect.psi.AspectTokenType" tokens = [ WhiteSpace = 'regexp:[ \t\n\r\f]' diff --git a/src/main/grammar/Aspect.flex b/src/main/grammar/Aspect.flex new file mode 100644 index 0000000000000000000000000000000000000000..62522e2e366cb5b0f54b6697df6f6f67470ca994 --- /dev/null +++ b/src/main/grammar/Aspect.flex @@ -0,0 +1,258 @@ +package org.jastadd.tooling.aspect.lexer; + +import com.intellij.lexer.FlexLexer; +import com.intellij.psi.tree.IElementType; +import org.jastadd.tooling.aspect.psi.AspectTypes; +import com.intellij.psi.TokenType; + +%% + +%class AspectLexer +%implements FlexLexer +%unicode +%function advance +%type IElementType +%eof{ return; +%eof} + +%{ + private int counter = 0; +%} + +WhiteSpace = [ \t\n\r\f] + +// TODO what is /**/ in Java? Is this caputered here? +SingleLineComment = "//" [^\n\r]* (\n | \r | \r\n) +FormalComment = "/**" [^*]* [*]+([^*/][^*]*[*]+)*[/] +MultiLineComment = "/*" [^*]+ [*]+([^*/][^*]*[*]+)*[/] + + +NotBrace = ( [^{}/]+ | [/][^{}/*] )* + +// from jjt +DecimalLiteral = [1-9] [0-9]* +HexLiteral = 0 [xX] [0-9a-fA-F]+ +OctalLiteral = 0 [0-7]* +IntegerLiteral = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]? + +Exponent = [eE] [+-]? [0-9]+ +FloatingPointLiteral = [0-9]+ "." [0-9]* {Exponent}? [fFdD]? + | "." [0-9]+ {Exponent}? [fFdD]? + | [0-9]+ {Exponent} [fFdD]? + | [0-9]+ {Exponent}? [fFdD] + +CharacterLiteral = ' ( [^'\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) ) ' +StringLiteral = \" ( [^\"\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) )* \" + +Identifier = [:jletter:] [:jletterdigit:]* + +%state JASTADD +%state EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE +%state CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE +%state LBRACE_ANYTHING_RBRACE +%state JAVA_IN_PAREN +%state COLLECTION_DECL +%state ATTRIBUTE_DEFINITION +%state LPAREN_ANYTHING_RPAREN + +%% + +<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> { + {WhiteSpace}+ { return TokenType.WHITE_SPACE; } + {SingleLineComment} { return AspectTypes.SINGLE_LINE_COMMENT; } + {FormalComment} { return AspectTypes.FORMAL_COMMENT; } + {MultiLineComment} { return AspectTypes.MULTI_LINE_COMMENT; } +// "EQ" { yybegin(YYINITIAL); return AspectTypes.EQ; } +// "{" { yybegin(JAVA); counter = 1; } + "class" { yybegin(EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); } +} + +<EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> { + "{" { yybegin(CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); counter = 1; } + {NotBrace} {} // skip over everything +} + +<CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> { + {SingleLineComment} {} + {FormalComment} {} + {MultiLineComment} {} + {CharacterLiteral} {} + {StringLiteral} {} + "{" { counter++; } + "}" { counter--; if (counter==0) { yybegin(YYINITIAL); return AspectTypes.CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE; } } + {NotBrace} {} +} + +<LBRACE_ANYTHING_RBRACE> { + {SingleLineComment} {} + {FormalComment} {} + {MultiLineComment} {} + {CharacterLiteral} {} + {StringLiteral} {} + "{" { counter++; } + "}" { counter--; if (counter==0) { yybegin(YYINITIAL); return AspectTypes.LBRACE_ANYTHING_RBRACE; } } + {NotBrace} {} +} + +<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> { + "abstract" { return AspectTypes.ABSTRACT; } +//"assert" { return AspectTypes.ASSERT; } + "boolean" { return AspectTypes.BOOLEAN; } +//"break" { return AspectTypes.BREAK; } + "byte" { return AspectTypes.BYTE; } +//"case" { return AspectTypes.CASE; } +//"catch" { return AspectTypes.CATCH; } + "char" { return AspectTypes.CHAR; } +//"class" { return AspectTypes.CLASS; } +//"const" { return AspectTypes.CONST; } +//"continue" { return AspectTypes.CONTINUE; } +//"default" { return AspectTypes._DEFAULT; } +//"do" { return AspectTypes.DO; } + "double" { return AspectTypes.DOUBLE; } +//"else" { return AspectTypes.ELSE; } +//"enum" { return AspectTypes.ENUM; } + "extends" { return AspectTypes.EXTENDS; } + "false" { return AspectTypes.FALSE; } + "final" { return AspectTypes.FINAL; } +//"finally" { return AspectTypes.FINALLY; } + "float" { return AspectTypes.FLOAT; } + "for" { return AspectTypes.FOR; } +//"goto" { return AspectTypes.GOTO; } +//"if" { return AspectTypes.IF; } + "implements" { return AspectTypes.IMPLEMENTS; } + "import" { return AspectTypes.IMPORT; } + "instanceof" { return AspectTypes.INSTANCEOF; } + "int" { return AspectTypes.INT; } + "interface" { return AspectTypes.INTERFACE; } + "long" { return AspectTypes.LONG; } + "native" { return AspectTypes.NATIVE; } +//"new" { return AspectTypes.NEW; } + "null" { return AspectTypes.NULL; } +//"package" { return AspectTypes.PACKAGE; } + "private" { return AspectTypes.PRIVATE; } + "protected" { return AspectTypes.PROTECTED; } + "public" { return AspectTypes.PUBLIC; } +//"return" { return AspectTypes.RETURN; } + "short" { return AspectTypes.SHORT; } + "static" { return AspectTypes.STATIC; } + "strictfp" { return AspectTypes.STRICTFP; } + "super" { return AspectTypes.SUPER; } +//"switch" { return AspectTypes.SWITCH; } + "synchronized" { return AspectTypes.SYNCHRONIZED; } +//"this" { return AspectTypes.THIS; } +//"throw" { return AspectTypes.THROW; } + "throws" { return AspectTypes.THROWS; } + "transient" { return AspectTypes.TRANSIENT; } + "true" { return AspectTypes.TRUE; } +//"try" { return AspectTypes.TRY; } + "void" { return AspectTypes.VOID; } + "volatile" { return AspectTypes.VOLATILE; } +//"while" { return AspectTypes.WHILE; } + + // JastAdd + "inh" { yybegin(ATTRIBUTE_DEFINITION); return AspectTypes.INH; } + "syn" { yybegin(ATTRIBUTE_DEFINITION); return AspectTypes.SYN; } + "lazy" { return AspectTypes.LAZY; } + "rewrite" { return AspectTypes.REWRITE; } + "to" { return AspectTypes.TO; } + "when" { return AspectTypes.WHEN; } + "aspect" { return AspectTypes.ASPECT; } + "eq" { yybegin(ATTRIBUTE_DEFINITION); return AspectTypes.EQUATION; } + "circular" { return AspectTypes.CIRCULAR; } + "refine" { return AspectTypes.REFINE; } + "contributes" { return AspectTypes.CONTRIBUTES; } + "each" { return AspectTypes.EACH; } + "nta" { return AspectTypes.NTA; } + "cache" { return AspectTypes.CACHE; } + "uncache" { return AspectTypes.UNCACHE; } + + // TODO this is strangely split in another Token block, check semantics of JJTree file! + "coll" { yybegin(COLLECTION_DECL); return AspectTypes.COLL; } + +} + +<COLLECTION_DECL> { + "with" { return AspectTypes.WITH; } + "root" { return AspectTypes.ROOT; } +} + +<ATTRIBUTE_DEFINITION> { + "{" { yybegin(LBRACE_ANYTHING_RBRACE); counter = 1; } +} + +// a semicolon exits the COLLECTION_DECL (because we ignore semicolons in expressions) +<COLLECTION_DECL, ATTRIBUTE_DEFINITION> { + ";" { yybegin(YYINITIAL); return AspectTypes.SEMICOLON; } +} + +<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> { + // LITERALS + {IntegerLiteral} { return AspectTypes.INTEGER_LITERAL; } + {FloatingPointLiteral} { return AspectTypes.FLOATING_POINT_LITERAL; } + {CharacterLiteral} { return AspectTypes.CHARACTER_LITERAL; } + {StringLiteral} { return AspectTypes.STRING_LITERAL; } + + // IDENTIFIERS + {Identifier} { return AspectTypes.IDENTIFIER; } + + // COMBINED TOKENS + ".class" { return AspectTypes.DOT_CLASS; } + + // SEPARATORS + + "(" { return AspectTypes.LPAREN; } + ")" { return AspectTypes.RPAREN; } + "{" { return AspectTypes.LBRACE; } + "}" { return AspectTypes.RBRACE; } + "[" { return AspectTypes.LBRACKET; } + "]" { return AspectTypes.RBRACKET; } + + ";" { return AspectTypes.SEMICOLON; } + "," { return AspectTypes.COMMA; } + "." { return AspectTypes.DOT; } +//"@" { return AspectTypes.AT; } + + // OPERATORS + "=" { return AspectTypes.ASSIGN; } + "<" { return AspectTypes.LT; } + "!" { return AspectTypes.BANG; } + "~" { return AspectTypes.TILDE; } + "?" { return AspectTypes.HOOK; } + ":" { return AspectTypes.COLON; } + "==" { return AspectTypes.EQ; } + "<=" { return AspectTypes.LE; } + ">=" { return AspectTypes.GE; } + "!=" { return AspectTypes.NE; } + "||" { return AspectTypes.SC_OR; } + "&&" { return AspectTypes.SC_AND; } + "++" { return AspectTypes.INCR; } + "--" { return AspectTypes.DECR; } + "+" { return AspectTypes.PLUS; } + "-" { return AspectTypes.MINUS; } + "*" { return AspectTypes.STAR; } + "/" { return AspectTypes.SLASH; } + "&" { return AspectTypes.BIT_AND; } + "|" { return AspectTypes.BIT_OR; } + "^" { return AspectTypes.XOR; } + "%" { return AspectTypes.REM; } + "<<" { return AspectTypes.LSHIFT; } + "+=" { return AspectTypes.PLUSASSIGN; } + "-=" { return AspectTypes.MINUSASSIGN; } + "*=" { return AspectTypes.STARASSIGN; } + "/=" { return AspectTypes.SLASHASSIGN; } + "&=" { return AspectTypes.ANDASSIGN; } + "|=" { return AspectTypes.ORASSIGN; } + "^=" { return AspectTypes.XORASSIGN; } + "%=" { return AspectTypes.REMASSIGN; } + "<<=" { return AspectTypes.LSHIFTASSIGN; } + ">>=" { return AspectTypes.RSIGNEDSHIFTASSIGN; } + ">>>=" { return AspectTypes.RUNSIGNEDSHIFTASSIGN; } +//"..." { return AspectTypes.ELLIPSIS; } + "->" { return AspectTypes.ARROW; } + "::" { return AspectTypes.DOUBLECOLON; } + + // TODO RUNSIGNEDSHIFT >>> and RSIGNEDSHIFT >> are not parsed + + ">" { return AspectTypes.GT; } +} + diff --git a/src/main/grammar/RelAstGrammar.bnf b/src/main/grammar/Grammar.bnf similarity index 62% rename from src/main/grammar/RelAstGrammar.bnf rename to src/main/grammar/Grammar.bnf index 081d3f4ba93d185634a64fed29706bdb69bd429d..d3a722a46ea0aa0227ac494321fca8425a40150e 100644 --- a/src/main/grammar/RelAstGrammar.bnf +++ b/src/main/grammar/Grammar.bnf @@ -1,18 +1,18 @@ { - parserClass="org.jastadd.tooling.parser.RelAstGrammarParser" + parserClass="org.jastadd.tooling.grammar.parser.GrammarParser" extends="com.intellij.extapi.psi.ASTWrapperPsiElement" psiClassPrefix="RelAstGrammar" psiImplClassSuffix="Impl" - psiPackage="org.jastadd.tooling.psi" - psiImplPackage="org.jastadd.tooling.psi.impl" + psiPackage="org.jastadd.tooling.grammar.psi" + psiImplPackage="org.jastadd.tooling.grammar.psi.impl" - elementTypeHolderClass="org.jastadd.tooling.parser.RelAstGrammarTypes" - elementTypeClass="org.jastadd.tooling.parser.RelAstGrammarElementType" - tokenTypeClass="org.jastadd.tooling.parser.RelAstGrammarTokenType" + elementTypeHolderClass="org.jastadd.tooling.grammar.parser.GrammarTypes" + elementTypeClass="org.jastadd.tooling.grammar.psi.GrammarElementType" + tokenTypeClass="org.jastadd.tooling.grammar.psi.GrammarTokenType" - psiImplUtilClass="org.jastadd.tooling.psi.impl.RelAstGrammarPsiImplUtil" + psiImplUtilClass="org.jastadd.tooling.grammar.psi.impl.RelAstGrammarPsiImplUtil" } relAstGrammarFile ::= comment* ((type_decl | relation) comment*)* @@ -21,8 +21,8 @@ comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT) type_decl ::= ABSTRACT? declared_name (COL type_reference)? (ASSIGN (component | nta_component)*)? SCOL { - extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeDeclImplExtension" - implements="org.jastadd.tooling.psi.RelAstGrammarTypeDeclExtension" + extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeDeclImplExtension" + implements="org.jastadd.tooling.grammar.psi.GrammarTypeDeclExtension" } nta_component ::= SLASH component SLASH @@ -45,8 +45,8 @@ navigable_role ::= type_reference DOT declared_name (STAR | QUESTION_MARK)? declared_name ::= ID type_reference ::= ID { - extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeReferenceImplExtension" - implements="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceExtension" + extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeReferenceImplExtension" + implements="org.jastadd.tooling.grammar.psi.GrammarTypeReferenceExtension" } java_name ::= ID diff --git a/src/main/grammar/Grammar.flex b/src/main/grammar/Grammar.flex new file mode 100644 index 0000000000000000000000000000000000000000..3f8006a0e296c7f371112ed2bac6cdf849b294db --- /dev/null +++ b/src/main/grammar/Grammar.flex @@ -0,0 +1,66 @@ +// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jastadd.tooling.grammar.lexer; + +import com.intellij.lexer.FlexLexer; +import com.intellij.psi.tree.IElementType; +import org.jastadd.tooling.grammar.parser.GrammarTypes; +import com.intellij.psi.TokenType; + +%% + +%class GrammarLexer +%implements FlexLexer +%unicode +%function advance +%type IElementType +%eof{ return; +%eof} + + +WhiteSpace = [ ] | \t | \f | \n | \r | \r\n +ID = [a-zA-Z$_][a-zA-Z0-9$_]* +MultiLineComment = [/][*][^*]+[*]+([^*/][^*]*[*]+)*[/] +DocComment = [/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/] +SingleLineComment = [/][/] [^\n\r]* (\n | \r | \r\n) + + +%xstate COMMENT +%state DECLARATION + +%% + +<DECLARATION> { + {WhiteSpace} { return TokenType.WHITE_SPACE; } // maybe ignore this + {MultiLineComment} { return GrammarTypes.MULTILINECOMMENT; } // maybe ignore this + {DocComment} { return GrammarTypes.DOCCOMMENT; } // maybe ignore this + {SingleLineComment} { return GrammarTypes.SINGLELINECOMMENT; } // maybe ignore this +} + +<YYINITIAL,COMMENT> { + {WhiteSpace}+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; } + {MultiLineComment} { yybegin(YYINITIAL); return GrammarTypes.MULTILINECOMMENT; } + {DocComment} { yybegin(YYINITIAL); return GrammarTypes.DOCCOMMENT; } + {SingleLineComment} { yybegin(YYINITIAL); return GrammarTypes.SINGLELINECOMMENT; } +} + +<YYINITIAL,DECLARATION> { + "abstract" { yybegin(DECLARATION); return GrammarTypes.ABSTRACT; } + "rel" { yybegin(DECLARATION); return GrammarTypes.REL; } + ";" { yybegin(COMMENT); return GrammarTypes.SCOL; } + ":" { yybegin(DECLARATION); return GrammarTypes.COL; } + "::=" { yybegin(DECLARATION); return GrammarTypes.ASSIGN; } + "*" { yybegin(DECLARATION); return GrammarTypes.STAR; } + "." { yybegin(DECLARATION); return GrammarTypes.DOT; } + "," { yybegin(DECLARATION); return GrammarTypes.COMMA; } + "<" { yybegin(DECLARATION); return GrammarTypes.LT; } + ">" { yybegin(DECLARATION); return GrammarTypes.GT; } + "[" { yybegin(DECLARATION); return GrammarTypes.LBRACKET; } + "]" { yybegin(DECLARATION); return GrammarTypes.RBRACKET; } + "/" { yybegin(DECLARATION); return GrammarTypes.SLASH; } + "?" { yybegin(DECLARATION); return GrammarTypes.QUESTION_MARK; } + "->" { yybegin(DECLARATION); return GrammarTypes.RIGHT; } + "<-" { yybegin(DECLARATION); return GrammarTypes.LEFT; } + "<->" { yybegin(DECLARATION); return GrammarTypes.BIDIRECTIONAL; } + {ID} { yybegin(DECLARATION); return GrammarTypes.ID; } + [^] { return TokenType.BAD_CHARACTER; } +} diff --git a/src/main/grammar/JastAddAspect.flex b/src/main/grammar/JastAddAspect.flex deleted file mode 100644 index a8b0b39c46ff8a828f81d8f7eee3b4d53130fc35..0000000000000000000000000000000000000000 --- a/src/main/grammar/JastAddAspect.flex +++ /dev/null @@ -1,258 +0,0 @@ -package org.jastadd.tooling.aspect.lexer; - -import com.intellij.lexer.FlexLexer; -import com.intellij.psi.tree.IElementType; -import org.jastadd.tooling.aspect.psi.JastAddAspectTypes; -import com.intellij.psi.TokenType; - -%% - -%class JastAddAspectLexer -%implements FlexLexer -%unicode -%function advance -%type IElementType -%eof{ return; -%eof} - -%{ - private int counter = 0; -%} - -WhiteSpace = [ \t\n\r\f] - -// TODO what is /**/ in Java? Is this caputered here? -SingleLineComment = "//" [^\n\r]* (\n | \r | \r\n) -FormalComment = "/**" [^*]* [*]+([^*/][^*]*[*]+)*[/] -MultiLineComment = "/*" [^*]+ [*]+([^*/][^*]*[*]+)*[/] - - -NotBrace = ( [^{}/]+ | [/][^{}/*] )* - -// from jjt -DecimalLiteral = [1-9] [0-9]* -HexLiteral = 0 [xX] [0-9a-fA-F]+ -OctalLiteral = 0 [0-7]* -IntegerLiteral = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]? - -Exponent = [eE] [+-]? [0-9]+ -FloatingPointLiteral = [0-9]+ "." [0-9]* {Exponent}? [fFdD]? - | "." [0-9]+ {Exponent}? [fFdD]? - | [0-9]+ {Exponent} [fFdD]? - | [0-9]+ {Exponent}? [fFdD] - -CharacterLiteral = ' ( [^'\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) ) ' -StringLiteral = \" ( [^\"\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) )* \" - -Identifier = [:jletter:] [:jletterdigit:]* - -%state JASTADD -%state EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE -%state CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE -%state LBRACE_ANYTHING_RBRACE -%state JAVA_IN_PAREN -%state COLLECTION_DECL -%state ATTRIBUTE_DEFINITION -%state LPAREN_ANYTHING_RPAREN - -%% - -<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> { - {WhiteSpace}+ { return TokenType.WHITE_SPACE; } - {SingleLineComment} { return JastAddAspectTypes.SINGLE_LINE_COMMENT; } - {FormalComment} { return JastAddAspectTypes.FORMAL_COMMENT; } - {MultiLineComment} { return JastAddAspectTypes.MULTI_LINE_COMMENT; } -// "EQ" { yybegin(YYINITIAL); return JastAddAspectTypes.EQ; } -// "{" { yybegin(JAVA); counter = 1; } - "class" { yybegin(EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); } -} - -<EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> { - "{" { yybegin(CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); counter = 1; } - {NotBrace} {} // skip over everything -} - -<CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> { - {SingleLineComment} {} - {FormalComment} {} - {MultiLineComment} {} - {CharacterLiteral} {} - {StringLiteral} {} - "{" { counter++; } - "}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE; } } - {NotBrace} {} -} - -<LBRACE_ANYTHING_RBRACE> { - {SingleLineComment} {} - {FormalComment} {} - {MultiLineComment} {} - {CharacterLiteral} {} - {StringLiteral} {} - "{" { counter++; } - "}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.LBRACE_ANYTHING_RBRACE; } } - {NotBrace} {} -} - -<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> { - "abstract" { return JastAddAspectTypes.ABSTRACT; } -//"assert" { return JastAddAspectTypes.ASSERT; } - "boolean" { return JastAddAspectTypes.BOOLEAN; } -//"break" { return JastAddAspectTypes.BREAK; } - "byte" { return JastAddAspectTypes.BYTE; } -//"case" { return JastAddAspectTypes.CASE; } -//"catch" { return JastAddAspectTypes.CATCH; } - "char" { return JastAddAspectTypes.CHAR; } -//"class" { return JastAddAspectTypes.CLASS; } -//"const" { return JastAddAspectTypes.CONST; } -//"continue" { return JastAddAspectTypes.CONTINUE; } -//"default" { return JastAddAspectTypes._DEFAULT; } -//"do" { return JastAddAspectTypes.DO; } - "double" { return JastAddAspectTypes.DOUBLE; } -//"else" { return JastAddAspectTypes.ELSE; } -//"enum" { return JastAddAspectTypes.ENUM; } - "extends" { return JastAddAspectTypes.EXTENDS; } - "false" { return JastAddAspectTypes.FALSE; } - "final" { return JastAddAspectTypes.FINAL; } -//"finally" { return JastAddAspectTypes.FINALLY; } - "float" { return JastAddAspectTypes.FLOAT; } - "for" { return JastAddAspectTypes.FOR; } -//"goto" { return JastAddAspectTypes.GOTO; } -//"if" { return JastAddAspectTypes.IF; } - "implements" { return JastAddAspectTypes.IMPLEMENTS; } - "import" { return JastAddAspectTypes.IMPORT; } - "instanceof" { return JastAddAspectTypes.INSTANCEOF; } - "int" { return JastAddAspectTypes.INT; } - "interface" { return JastAddAspectTypes.INTERFACE; } - "long" { return JastAddAspectTypes.LONG; } - "native" { return JastAddAspectTypes.NATIVE; } -//"new" { return JastAddAspectTypes.NEW; } - "null" { return JastAddAspectTypes.NULL; } -//"package" { return JastAddAspectTypes.PACKAGE; } - "private" { return JastAddAspectTypes.PRIVATE; } - "protected" { return JastAddAspectTypes.PROTECTED; } - "public" { return JastAddAspectTypes.PUBLIC; } -//"return" { return JastAddAspectTypes.RETURN; } - "short" { return JastAddAspectTypes.SHORT; } - "static" { return JastAddAspectTypes.STATIC; } - "strictfp" { return JastAddAspectTypes.STRICTFP; } - "super" { return JastAddAspectTypes.SUPER; } -//"switch" { return JastAddAspectTypes.SWITCH; } - "synchronized" { return JastAddAspectTypes.SYNCHRONIZED; } -//"this" { return JastAddAspectTypes.THIS; } -//"throw" { return JastAddAspectTypes.THROW; } - "throws" { return JastAddAspectTypes.THROWS; } - "transient" { return JastAddAspectTypes.TRANSIENT; } - "true" { return JastAddAspectTypes.TRUE; } -//"try" { return JastAddAspectTypes.TRY; } - "void" { return JastAddAspectTypes.VOID; } - "volatile" { return JastAddAspectTypes.VOLATILE; } -//"while" { return JastAddAspectTypes.WHILE; } - - // JastAdd - "inh" { yybegin(ATTRIBUTE_DEFINITION); return JastAddAspectTypes.INH; } - "syn" { yybegin(ATTRIBUTE_DEFINITION); return JastAddAspectTypes.SYN; } - "lazy" { return JastAddAspectTypes.LAZY; } - "rewrite" { return JastAddAspectTypes.REWRITE; } - "to" { return JastAddAspectTypes.TO; } - "when" { return JastAddAspectTypes.WHEN; } - "aspect" { return JastAddAspectTypes.ASPECT; } - "eq" { yybegin(ATTRIBUTE_DEFINITION); return JastAddAspectTypes.EQUATION; } - "circular" { return JastAddAspectTypes.CIRCULAR; } - "refine" { return JastAddAspectTypes.REFINE; } - "contributes" { return JastAddAspectTypes.CONTRIBUTES; } - "each" { return JastAddAspectTypes.EACH; } - "nta" { return JastAddAspectTypes.NTA; } - "cache" { return JastAddAspectTypes.CACHE; } - "uncache" { return JastAddAspectTypes.UNCACHE; } - - // TODO this is strangely split in another Token block, check semantics of JJTree file! - "coll" { yybegin(COLLECTION_DECL); return JastAddAspectTypes.COLL; } - -} - -<COLLECTION_DECL> { - "with" { return JastAddAspectTypes.WITH; } - "root" { return JastAddAspectTypes.ROOT; } -} - -<ATTRIBUTE_DEFINITION> { - "{" { yybegin(LBRACE_ANYTHING_RBRACE); counter = 1; } -} - -// a semicolon exits the COLLECTION_DECL (because we ignore semicolons in expressions) -<COLLECTION_DECL, ATTRIBUTE_DEFINITION> { - ";" { yybegin(YYINITIAL); return JastAddAspectTypes.SEMICOLON; } -} - -<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> { - // LITERALS - {IntegerLiteral} { return JastAddAspectTypes.INTEGER_LITERAL; } - {FloatingPointLiteral} { return JastAddAspectTypes.FLOATING_POINT_LITERAL; } - {CharacterLiteral} { return JastAddAspectTypes.CHARACTER_LITERAL; } - {StringLiteral} { return JastAddAspectTypes.STRING_LITERAL; } - - // IDENTIFIERS - {Identifier} { return JastAddAspectTypes.IDENTIFIER; } - - // COMBINED TOKENS - ".class" { return JastAddAspectTypes.DOT_CLASS; } - - // SEPARATORS - - "(" { return JastAddAspectTypes.LPAREN; } - ")" { return JastAddAspectTypes.RPAREN; } - "{" { return JastAddAspectTypes.LBRACE; } - "}" { return JastAddAspectTypes.RBRACE; } - "[" { return JastAddAspectTypes.LBRACKET; } - "]" { return JastAddAspectTypes.RBRACKET; } - - ";" { return JastAddAspectTypes.SEMICOLON; } - "," { return JastAddAspectTypes.COMMA; } - "." { return JastAddAspectTypes.DOT; } -//"@" { return JastAddAspectTypes.AT; } - - // OPERATORS - "=" { return JastAddAspectTypes.ASSIGN; } - "<" { return JastAddAspectTypes.LT; } - "!" { return JastAddAspectTypes.BANG; } - "~" { return JastAddAspectTypes.TILDE; } - "?" { return JastAddAspectTypes.HOOK; } - ":" { return JastAddAspectTypes.COLON; } - "==" { return JastAddAspectTypes.EQ; } - "<=" { return JastAddAspectTypes.LE; } - ">=" { return JastAddAspectTypes.GE; } - "!=" { return JastAddAspectTypes.NE; } - "||" { return JastAddAspectTypes.SC_OR; } - "&&" { return JastAddAspectTypes.SC_AND; } - "++" { return JastAddAspectTypes.INCR; } - "--" { return JastAddAspectTypes.DECR; } - "+" { return JastAddAspectTypes.PLUS; } - "-" { return JastAddAspectTypes.MINUS; } - "*" { return JastAddAspectTypes.STAR; } - "/" { return JastAddAspectTypes.SLASH; } - "&" { return JastAddAspectTypes.BIT_AND; } - "|" { return JastAddAspectTypes.BIT_OR; } - "^" { return JastAddAspectTypes.XOR; } - "%" { return JastAddAspectTypes.REM; } - "<<" { return JastAddAspectTypes.LSHIFT; } - "+=" { return JastAddAspectTypes.PLUSASSIGN; } - "-=" { return JastAddAspectTypes.MINUSASSIGN; } - "*=" { return JastAddAspectTypes.STARASSIGN; } - "/=" { return JastAddAspectTypes.SLASHASSIGN; } - "&=" { return JastAddAspectTypes.ANDASSIGN; } - "|=" { return JastAddAspectTypes.ORASSIGN; } - "^=" { return JastAddAspectTypes.XORASSIGN; } - "%=" { return JastAddAspectTypes.REMASSIGN; } - "<<=" { return JastAddAspectTypes.LSHIFTASSIGN; } - ">>=" { return JastAddAspectTypes.RSIGNEDSHIFTASSIGN; } - ">>>=" { return JastAddAspectTypes.RUNSIGNEDSHIFTASSIGN; } -//"..." { return JastAddAspectTypes.ELLIPSIS; } - "->" { return JastAddAspectTypes.ARROW; } - "::" { return JastAddAspectTypes.DOUBLECOLON; } - - // TODO RUNSIGNEDSHIFT >>> and RSIGNEDSHIFT >> are not parsed - - ">" { return JastAddAspectTypes.GT; } -} - diff --git a/src/main/grammar/RelAstGrammar.flex b/src/main/grammar/RelAstGrammar.flex deleted file mode 100644 index 27f0f9403ce13616436fe42caa257f3d0f39b5ff..0000000000000000000000000000000000000000 --- a/src/main/grammar/RelAstGrammar.flex +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package org.jastadd.tooling.lexer; - -import com.intellij.lexer.FlexLexer; -import com.intellij.psi.tree.IElementType; -import org.jastadd.tooling.parser.RelAstGrammarTypes; -import com.intellij.psi.TokenType; - -%% - -%class RelAstGrammarLexer -%implements FlexLexer -%unicode -%function advance -%type IElementType -%eof{ return; -%eof} - - -WhiteSpace = [ ] | \t | \f | \n | \r | \r\n -ID = [a-zA-Z$_][a-zA-Z0-9$_]* -MultiLineComment = [/][*][^*]+[*]+([^*/][^*]*[*]+)*[/] -DocComment = [/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/] -SingleLineComment = [/][/] [^\n\r]* (\n | \r | \r\n) - - -%xstate COMMENT -%state DECLARATION - -%% - -<DECLARATION> { - {WhiteSpace} { return TokenType.WHITE_SPACE; } // maybe ignore this - {MultiLineComment} { return RelAstGrammarTypes.MULTILINECOMMENT; } // maybe ignore this - {DocComment} { return RelAstGrammarTypes.DOCCOMMENT; } // maybe ignore this - {SingleLineComment} { return RelAstGrammarTypes.SINGLELINECOMMENT; } // maybe ignore this -} - -<YYINITIAL,COMMENT> { - {WhiteSpace}+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; } - {MultiLineComment} { yybegin(YYINITIAL); return RelAstGrammarTypes.MULTILINECOMMENT; } - {DocComment} { yybegin(YYINITIAL); return RelAstGrammarTypes.DOCCOMMENT; } - {SingleLineComment} { yybegin(YYINITIAL); return RelAstGrammarTypes.SINGLELINECOMMENT; } -} - -<YYINITIAL,DECLARATION> { - "abstract" { yybegin(DECLARATION); return RelAstGrammarTypes.ABSTRACT; } - "rel" { yybegin(DECLARATION); return RelAstGrammarTypes.REL; } - ";" { yybegin(COMMENT); return RelAstGrammarTypes.SCOL; } - ":" { yybegin(DECLARATION); return RelAstGrammarTypes.COL; } - "::=" { yybegin(DECLARATION); return RelAstGrammarTypes.ASSIGN; } - "*" { yybegin(DECLARATION); return RelAstGrammarTypes.STAR; } - "." { yybegin(DECLARATION); return RelAstGrammarTypes.DOT; } - "," { yybegin(DECLARATION); return RelAstGrammarTypes.COMMA; } - "<" { yybegin(DECLARATION); return RelAstGrammarTypes.LT; } - ">" { yybegin(DECLARATION); return RelAstGrammarTypes.GT; } - "[" { yybegin(DECLARATION); return RelAstGrammarTypes.LBRACKET; } - "]" { yybegin(DECLARATION); return RelAstGrammarTypes.RBRACKET; } - "/" { yybegin(DECLARATION); return RelAstGrammarTypes.SLASH; } - "?" { yybegin(DECLARATION); return RelAstGrammarTypes.QUESTION_MARK; } - "->" { yybegin(DECLARATION); return RelAstGrammarTypes.RIGHT; } - "<-" { yybegin(DECLARATION); return RelAstGrammarTypes.LEFT; } - "<->" { yybegin(DECLARATION); return RelAstGrammarTypes.BIDIRECTIONAL; } - {ID} { yybegin(DECLARATION); return RelAstGrammarTypes.ID; } - [^] { return TokenType.BAD_CHARACTER; } -} diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammar.java b/src/main/java/org/jastadd/tooling/RelAstGrammar.java deleted file mode 100644 index 2b6f58f75be1d4eeb5e6c50133dc59b66b1686e7..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/RelAstGrammar.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.jastadd.tooling; - -import com.intellij.lang.Language; - -public class RelAstGrammar extends Language { - - public static final RelAstGrammar INSTANCE = new RelAstGrammar(); - - private RelAstGrammar() { - super("JastAddGrammar"); - } - -} diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java b/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java deleted file mode 100644 index 4424b6000fd05825c5b34416d50c0ce714087111..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.jastadd.tooling; - -import com.intellij.formatting.*; -import com.intellij.lang.ASTNode; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.CodeStyleSettings; -import com.intellij.psi.codeStyle.CommonCodeStyleSettings; -import com.intellij.psi.tree.TokenSet; -import org.jastadd.tooling.parser.RelAstGrammarTypes; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class RelAstGrammarFormattingModelBuilder implements FormattingModelBuilder { - - private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) { - final CommonCodeStyleSettings commonSettings = settings.getCommonSettings(RelAstGrammar.INSTANCE.getID()); - - final TokenSet roleMultiplicityTokens = TokenSet.create(RelAstGrammarTypes.STAR, RelAstGrammarTypes.QUESTION_MARK); - final TokenSet relationDirectionTokens = TokenSet.create(RelAstGrammarTypes.LEFT, RelAstGrammarTypes.RIGHT, RelAstGrammarTypes.BIDIRECTIONAL); - final TokenSet declarationTokens = TokenSet.create(RelAstGrammarTypes.TYPE_DECL, RelAstGrammarTypes.RELATION); - - return new SpacingBuilder(settings, RelAstGrammar.INSTANCE) - .around(RelAstGrammarTypes.ASSIGN).spaceIf(commonSettings.SPACE_AROUND_ASSIGNMENT_OPERATORS) - .before(declarationTokens).none() - .before(RelAstGrammarTypes.SCOL).spaceIf(commonSettings.SPACE_BEFORE_SEMICOLON) - .around(relationDirectionTokens).spaceIf(commonSettings.SPACE_AROUND_RELATIONAL_OPERATORS) - .between(RelAstGrammarTypes.COMPONENT, RelAstGrammarTypes.COMPONENT).spaces(1) - .around(RelAstGrammarTypes.DOT).none() - .before(roleMultiplicityTokens).spaceIf(commonSettings.SPACE_AROUND_UNARY_OPERATOR) - .aroundInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.TYPE_DECL).spaceIf(commonSettings.SPACE_AROUND_ADDITIVE_OPERATORS) - .aroundInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.COMPONENT).none() - .withinPair(RelAstGrammarTypes.LT, RelAstGrammarTypes.GT).spaceIf(commonSettings.SPACE_WITHIN_CAST_PARENTHESES) - .withinPair(RelAstGrammarTypes.LBRACKET, RelAstGrammarTypes.RBRACKET).spaceIf(commonSettings.SPACE_WITHIN_BRACKETS) - .between(declarationTokens, RelAstGrammarTypes.COMMENT).spaces(1) - .afterInside(RelAstGrammarTypes.SLASH, RelAstGrammarTypes.NTA_COMPONENT).none() - .beforeInside(RelAstGrammarTypes.SLASH, RelAstGrammarTypes.NTA_COMPONENT).none(); - } - - @NotNull - @Override - public FormattingModel createModel(FormattingContext context) { - return FormattingModelProvider - .createFormattingModelForPsiFile(context.getPsiElement().getContainingFile(), - new RelAstGrammarBlock(context.getPsiElement().getNode(), - Wrap.createWrap(WrapType.NONE, false), - Alignment.createAlignment(), - createSpaceBuilder(context.getCodeStyleSettings())), - context.getCodeStyleSettings()); - } - - @Nullable - @Override - public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) { - return null; - } - -} diff --git a/src/main/java/org/jastadd/tooling/aspect/Aspect.java b/src/main/java/org/jastadd/tooling/aspect/Aspect.java new file mode 100644 index 0000000000000000000000000000000000000000..b91b86adce23a5f74c379e93fcad4940520153e2 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/aspect/Aspect.java @@ -0,0 +1,11 @@ +package org.jastadd.tooling.aspect; + +public class Aspect extends com.intellij.lang.Language { + + public static final Aspect INSTANCE = new Aspect(); + + private Aspect() { + super("JastAddAspect"); + } + +} diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectFileType.java b/src/main/java/org/jastadd/tooling/aspect/AspectFileType.java similarity index 68% rename from src/main/java/org/jastadd/tooling/aspect/JastAddAspectFileType.java rename to src/main/java/org/jastadd/tooling/aspect/AspectFileType.java index ede88303f5adfc9ad4efaf279756af547fb96cc1..cdfd30057acece4fdb07ee4aa50a6860451a5d75 100644 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectFileType.java +++ b/src/main/java/org/jastadd/tooling/aspect/AspectFileType.java @@ -1,18 +1,18 @@ package org.jastadd.tooling.aspect; import com.intellij.openapi.fileTypes.LanguageFileType; -import org.jastadd.tooling.JastAddIcons; +import org.jastadd.tooling.util.JastAddIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class JastAddAspectFileType extends LanguageFileType { +public class AspectFileType extends LanguageFileType { - public static final JastAddAspectFileType INSTANCE = new JastAddAspectFileType(); + public static final AspectFileType INSTANCE = new AspectFileType(); - private JastAddAspectFileType() { - super(JastAddAspectLanguage.INSTANCE); + private AspectFileType() { + super(Aspect.INSTANCE); } @NotNull @@ -33,7 +33,6 @@ public class JastAddAspectFileType extends LanguageFileType { return "jadd"; } - @Nullable @Override public Icon getIcon() { diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAttributeFileType.java b/src/main/java/org/jastadd/tooling/aspect/AttributeFileType.java similarity index 67% rename from src/main/java/org/jastadd/tooling/aspect/JastAddAttributeFileType.java rename to src/main/java/org/jastadd/tooling/aspect/AttributeFileType.java index dd9569ef54a3332cfa9f203ec724b9966c3af964..a1f0720468f90b304f8b2c2e102442b4ca31b0cc 100644 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAttributeFileType.java +++ b/src/main/java/org/jastadd/tooling/aspect/AttributeFileType.java @@ -1,18 +1,18 @@ package org.jastadd.tooling.aspect; import com.intellij.openapi.fileTypes.LanguageFileType; -import org.jastadd.tooling.JastAddIcons; +import org.jastadd.tooling.util.JastAddIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class JastAddAttributeFileType extends LanguageFileType { +public class AttributeFileType extends LanguageFileType { - public static final JastAddAttributeFileType INSTANCE = new JastAddAttributeFileType(); + public static final AttributeFileType INSTANCE = new AttributeFileType(); - private JastAddAttributeFileType() { - super(JastAddAspectLanguage.INSTANCE); + private AttributeFileType() { + super(Aspect.INSTANCE); } @NotNull diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectElementType.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectElementType.java deleted file mode 100644 index 4c15673a1bc53924ea6d497db6dab32381c17372..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectElementType.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.jastadd.tooling.aspect; - -import com.intellij.psi.tree.IElementType; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -public class JastAddAspectElementType extends IElementType { - - public JastAddAspectElementType(@NotNull @NonNls String debugName) { - super(debugName, JastAddAspectLanguage.INSTANCE); - } - -} diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectFile.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectFile.java deleted file mode 100644 index 1d67846a899164b0ac2cc65ffba532c9785baaa0..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectFile.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.jastadd.tooling.aspect; - -import com.intellij.extapi.psi.PsiFileBase; - import com.intellij.openapi.fileTypes.FileType; - import com.intellij.psi.FileViewProvider; - import org.jetbrains.annotations.NotNull; - -public class JastAddAspectFile extends PsiFileBase { - - public JastAddAspectFile(@NotNull FileViewProvider viewProvider) { - super(viewProvider, JastAddAspectLanguage.INSTANCE); - } - - @NotNull - @Override - public FileType getFileType() { - return JastAddAttributeFileType.INSTANCE; - } - - @Override - public String toString() { - return "JastAdd Attribute Aspect File"; - } - -} diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectLanguage.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectLanguage.java deleted file mode 100644 index 400caa1ad201c832052d134a4b027219130a248e..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectLanguage.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.jastadd.tooling.aspect; - -import com.intellij.lang.Language; - -public class JastAddAspectLanguage extends Language { - - public static final JastAddAspectLanguage INSTANCE = new JastAddAspectLanguage(); - - private JastAddAspectLanguage() { - super("JastAddAspect"); - } - -} diff --git a/src/main/java/org/jastadd/tooling/aspect/lexer/AspectLexerAdapter.java b/src/main/java/org/jastadd/tooling/aspect/lexer/AspectLexerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..19590233648617c224cea2e91b32bd2bf0635f0b --- /dev/null +++ b/src/main/java/org/jastadd/tooling/aspect/lexer/AspectLexerAdapter.java @@ -0,0 +1,11 @@ +package org.jastadd.tooling.aspect.lexer; + +import com.intellij.lexer.FlexAdapter; + +public class AspectLexerAdapter extends FlexAdapter { + + public AspectLexerAdapter() { + super(new AspectLexer(null)); + } + +} diff --git a/src/main/java/org/jastadd/tooling/aspect/lexer/JastAddAspectLexerAdapter.java b/src/main/java/org/jastadd/tooling/aspect/lexer/JastAddAspectLexerAdapter.java deleted file mode 100644 index d87f6a89665a4c361ed7143f574f6729132ca700..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/aspect/lexer/JastAddAspectLexerAdapter.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.jastadd.tooling.aspect.lexer; - -import com.intellij.lexer.FlexAdapter; - -public class JastAddAspectLexerAdapter extends FlexAdapter { - - public JastAddAspectLexerAdapter() { - super(new JastAddAspectLexer(null)); - } - -} diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java b/src/main/java/org/jastadd/tooling/aspect/parser/AspectParserDefinition.java similarity index 69% rename from src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java rename to src/main/java/org/jastadd/tooling/aspect/parser/AspectParserDefinition.java index 8e9ce5c8b187dc668deca297009558e10789506d..55c9f55c72f05518bbe6b82ea84f161d091ce1f0 100644 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java +++ b/src/main/java/org/jastadd/tooling/aspect/parser/AspectParserDefinition.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling.aspect; +package org.jastadd.tooling.aspect.parser; import com.intellij.lang.ASTNode; import com.intellij.lang.ParserDefinition; @@ -11,23 +11,24 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IFileElementType; import com.intellij.psi.tree.TokenSet; -import org.jastadd.tooling.aspect.lexer.JastAddAspectLexerAdapter; -import org.jastadd.tooling.aspect.parser.JastAddAspectParser; -import org.jastadd.tooling.aspect.psi.JastAddAspectTypes; +import org.jastadd.tooling.aspect.Aspect; +import org.jastadd.tooling.aspect.psi.AspectFile; +import org.jastadd.tooling.aspect.lexer.AspectLexerAdapter; +import org.jastadd.tooling.aspect.psi.AspectTypes; import org.jetbrains.annotations.NotNull; -public class JastAddAspectParserDefinition implements ParserDefinition { +public class AspectParserDefinition implements ParserDefinition { public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE); - public static final TokenSet COMMENTS = TokenSet.create(JastAddAspectTypes.SINGLE_LINE_COMMENT, JastAddAspectTypes.MULTI_LINE_COMMENT, JastAddAspectTypes.FORMAL_COMMENT); - public static final TokenSet STRING_LITERALS = TokenSet.create(JastAddAspectTypes.STRING_LITERAL); + public static final TokenSet COMMENTS = TokenSet.create(AspectTypes.SINGLE_LINE_COMMENT, AspectTypes.MULTI_LINE_COMMENT, AspectTypes.FORMAL_COMMENT); + public static final TokenSet STRING_LITERALS = TokenSet.create(AspectTypes.STRING_LITERAL); - public static final IFileElementType FILE = new IFileElementType(JastAddAspectLanguage.INSTANCE); + public static final IFileElementType FILE = new IFileElementType(Aspect.INSTANCE); @NotNull @Override public Lexer createLexer(Project project) { - return new JastAddAspectLexerAdapter(); + return new AspectLexerAdapter(); } @NotNull @@ -61,7 +62,7 @@ public class JastAddAspectParserDefinition implements ParserDefinition { @Override public PsiFile createFile(FileViewProvider viewProvider) { - return new JastAddAspectFile(viewProvider); + return new AspectFile(viewProvider); } @Override @@ -72,7 +73,7 @@ public class JastAddAspectParserDefinition implements ParserDefinition { @NotNull @Override public PsiElement createElement(ASTNode node) { - return JastAddAspectTypes.Factory.createElement(node); + return AspectTypes.Factory.createElement(node); } } diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/AspectElementType.java b/src/main/java/org/jastadd/tooling/aspect/psi/AspectElementType.java new file mode 100644 index 0000000000000000000000000000000000000000..35f355de33528986fe40e6b0e0428dd3d16f73b5 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/aspect/psi/AspectElementType.java @@ -0,0 +1,14 @@ +package org.jastadd.tooling.aspect.psi; + +import com.intellij.psi.tree.IElementType; +import org.jastadd.tooling.aspect.Aspect; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +public class AspectElementType extends IElementType { + + public AspectElementType(@NotNull @NonNls String debugName) { + super(debugName, Aspect.INSTANCE); + } + +} diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/AspectFile.java b/src/main/java/org/jastadd/tooling/aspect/psi/AspectFile.java new file mode 100644 index 0000000000000000000000000000000000000000..79158f2435b9b5c7b382945f78cfe1778c8e99cb --- /dev/null +++ b/src/main/java/org/jastadd/tooling/aspect/psi/AspectFile.java @@ -0,0 +1,27 @@ +package org.jastadd.tooling.aspect.psi; + +import com.intellij.extapi.psi.PsiFileBase; + import com.intellij.openapi.fileTypes.FileType; + import com.intellij.psi.FileViewProvider; +import org.jastadd.tooling.aspect.Aspect; +import org.jastadd.tooling.aspect.AttributeFileType; +import org.jetbrains.annotations.NotNull; + +public class AspectFile extends PsiFileBase { + + public AspectFile(@NotNull FileViewProvider viewProvider) { + super(viewProvider, Aspect.INSTANCE); + } + + @NotNull + @Override + public FileType getFileType() { + return AttributeFileType.INSTANCE; + } + + @Override + public String toString() { + return "JastAdd Attribute Aspect File"; + } + +} diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectTokenType.java b/src/main/java/org/jastadd/tooling/aspect/psi/AspectTokenType.java similarity index 50% rename from src/main/java/org/jastadd/tooling/aspect/JastAddAspectTokenType.java rename to src/main/java/org/jastadd/tooling/aspect/psi/AspectTokenType.java index 54d2601f7a6bb0e21368b9761d7ca3947d353382..5bd739cc8f1a3a8dd05d19f19af7defedf2e4406 100644 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectTokenType.java +++ b/src/main/java/org/jastadd/tooling/aspect/psi/AspectTokenType.java @@ -1,13 +1,14 @@ -package org.jastadd.tooling.aspect; +package org.jastadd.tooling.aspect.psi; import com.intellij.psi.tree.IElementType; +import org.jastadd.tooling.aspect.Aspect; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -public class JastAddAspectTokenType extends IElementType { +public class AspectTokenType extends IElementType { - public JastAddAspectTokenType(@NotNull @NonNls String debugName) { - super(debugName, JastAddAspectLanguage.INSTANCE); + public AspectTokenType(@NotNull @NonNls String debugName) { + super(debugName, Aspect.INSTANCE); } @Override diff --git a/src/main/java/org/jastadd/tooling/grammar/Grammar.java b/src/main/java/org/jastadd/tooling/grammar/Grammar.java new file mode 100644 index 0000000000000000000000000000000000000000..c6865ecb5aa221dcb536e8fc5be71f5268e7a827 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/Grammar.java @@ -0,0 +1,11 @@ +package org.jastadd.tooling.grammar; + +public class Grammar extends com.intellij.lang.Language { + + public static final Grammar INSTANCE = new Grammar(); + + private Grammar() { + super("JastAddGrammar"); + } + +} diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java b/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java similarity index 79% rename from src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java index 91f4e0c4dde3bfd351bda7a7afaa8f604907f95f..a64502800b7373ca891c1fed67443f82d87de52a 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java @@ -1,17 +1,16 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.lang.annotation.AnnotationHolder; -import com.intellij.lang.annotation.Annotator; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.editor.DefaultLanguageHighlighterColors; import com.intellij.psi.PsiElement; -import org.jastadd.tooling.psi.RelAstGrammarComponent; -import org.jastadd.tooling.psi.RelAstGrammarTypeReference; +import org.jastadd.tooling.grammar.psi.RelAstGrammarComponent; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeReference; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarAnnotator implements Annotator { +public class GrammarAnnotator implements com.intellij.lang.annotation.Annotator { @Override public void annotate(@NotNull final PsiElement element, @NotNull AnnotationHolder holder) { @@ -26,13 +25,13 @@ public class RelAstGrammarAnnotator implements Annotator { .highlightType(ProblemHighlightType.WEAK_WARNING) .textAttributes(DefaultLanguageHighlighterColors.HIGHLIGHTED_REFERENCE) .tooltip("When the name of a component is the same as its type, it can be omitted.") - .withFix(new RelAstGrammarRemoveRedundantComponentNameFix(component)) + .withFix(new GrammarRemoveRedundantComponentNameFix(component)) .create(); } } } else if (element instanceof RelAstGrammarTypeReference) { RelAstGrammarTypeReference reference = (RelAstGrammarTypeReference) element; - if (RelAstGrammarUtil.findTypeDecl(element.getProject(), reference.getName()).isEmpty()) { + if (GrammarUtil.findTypeDecl(element.getProject(), reference.getName()).isEmpty()) { holder.newAnnotation(HighlightSeverity.ERROR, "Undefined reference") .range(element.getTextRange()) .highlightType(ProblemHighlightType.ERROR) diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarBlock.java b/src/main/java/org/jastadd/tooling/grammar/GrammarBlock.java similarity index 60% rename from src/main/java/org/jastadd/tooling/RelAstGrammarBlock.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarBlock.java index 7aca9c69078cb3d4426a34cb79a3f0bb9294bd76..825a9e6d4610a05960ed3365266e98d466bf668b 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarBlock.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarBlock.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.formatting.*; @@ -11,23 +11,23 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; -public class RelAstGrammarBlock extends AbstractBlock { +public class GrammarBlock extends AbstractBlock { private final SpacingBuilder spacingBuilder; - protected RelAstGrammarBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment, - SpacingBuilder spacingBuilder) { + protected GrammarBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment, + SpacingBuilder spacingBuilder) { super(node, wrap, alignment); this.spacingBuilder = spacingBuilder; } @Override - protected List<Block> buildChildren() { - List<Block> blocks = new ArrayList<>(); + protected List<com.intellij.formatting.Block> buildChildren() { + List<com.intellij.formatting.Block> blocks = new ArrayList<>(); ASTNode child = myNode.getFirstChildNode(); while (child != null) { if (child.getElementType() != TokenType.WHITE_SPACE) { - Block block = new RelAstGrammarBlock(child, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(), + com.intellij.formatting.Block block = new GrammarBlock(child, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(), spacingBuilder); blocks.add(block); } @@ -43,7 +43,7 @@ public class RelAstGrammarBlock extends AbstractBlock { @Nullable @Override - public Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) { + public Spacing getSpacing(@Nullable com.intellij.formatting.Block child1, @NotNull com.intellij.formatting.Block child2) { return spacingBuilder.getSpacing(this, child1, child2); } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarChooseByNameContributor.java similarity index 67% rename from src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarChooseByNameContributor.java index 51ad305b136d8b42198ff2993a318f10ebafeeb7..61f5d1a6fdecc4c0edfd3fd7690c218e4092538f 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarChooseByNameContributor.java @@ -1,20 +1,19 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; -import com.intellij.navigation.ChooseByNameContributor; import com.intellij.navigation.NavigationItem; import com.intellij.openapi.project.Project; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeDecl; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -public class RelAstGrammarChooseByNameContributor implements ChooseByNameContributor { +public class GrammarChooseByNameContributor implements com.intellij.navigation.ChooseByNameContributor { @NotNull @Override public String @NotNull [] getNames(Project project, boolean includeNonProjectItems) { - List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project); + List<RelAstGrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project); List<String> names = new ArrayList<>(typeDecls.size()); for (RelAstGrammarTypeDecl typeDecl : typeDecls) { if (typeDecl.getName() != null && typeDecl.getName().length() > 0) { @@ -28,7 +27,7 @@ public class RelAstGrammarChooseByNameContributor implements ChooseByNameContrib @Override public NavigationItem @NotNull [] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) { // TODO: include non project items - List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, name); + List<RelAstGrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project, name); return typeDecls.toArray(new NavigationItem[0]); } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettings.java similarity index 50% rename from src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettings.java index c531ee6ff2af2ed2ed92661dc02d699e24464320..730401c71cf0dde4081192f755bf330eca46c01b 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettings.java @@ -1,11 +1,11 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CustomCodeStyleSettings; -public class RelAstGrammarCodeStyleSettings extends CustomCodeStyleSettings { +public class GrammarCodeStyleSettings extends CustomCodeStyleSettings { - public RelAstGrammarCodeStyleSettings(CodeStyleSettings settings) { + public GrammarCodeStyleSettings(CodeStyleSettings settings) { super("RelAstGrammarCodeStyleSettings", settings); } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettingsProvider.java similarity index 85% rename from src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettingsProvider.java index ed57139d1595a5e95f09b8ecc25a0d465d29cbb1..1f5150ade7e64e6a74b1d4e05f5a188c12dc9e5c 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettingsProvider.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.application.options.CodeStyleAbstractConfigurable; import com.intellij.application.options.CodeStyleAbstractPanel; @@ -10,11 +10,11 @@ import com.intellij.application.options.CodeStyleAbstractConfigurable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class RelAstGrammarCodeStyleSettingsProvider extends CodeStyleSettingsProvider { +public class GrammarCodeStyleSettingsProvider extends CodeStyleSettingsProvider { @Override public CustomCodeStyleSettings createCustomSettings(CodeStyleSettings settings) { - return new RelAstGrammarCodeStyleSettings(settings); + return new GrammarCodeStyleSettings(settings); } @Nullable @@ -36,7 +36,7 @@ public class RelAstGrammarCodeStyleSettingsProvider extends CodeStyleSettingsPro private static class SimpleCodeStyleMainPanel extends TabbedLanguageCodeStylePanel { public SimpleCodeStyleMainPanel(CodeStyleSettings currentSettings, CodeStyleSettings settings) { - super(RelAstGrammar.INSTANCE, currentSettings, settings); + super(Grammar.INSTANCE, currentSettings, settings); } } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarColorSettingsPage.java b/src/main/java/org/jastadd/tooling/grammar/GrammarColorSettingsPage.java similarity index 50% rename from src/main/java/org/jastadd/tooling/RelAstGrammarColorSettingsPage.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarColorSettingsPage.java index 3300b1e2eec8a37f3118321d945ffb65c93a020b..dd5ee32d608935199ff563f6d51b997c1a8069cf 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarColorSettingsPage.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarColorSettingsPage.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.openapi.editor.colors.TextAttributesKey; @@ -6,33 +6,34 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter; import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; +import org.jastadd.tooling.util.JastAddIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.Map; -public class RelAstGrammarColorSettingsPage implements ColorSettingsPage { +public class GrammarColorSettingsPage implements ColorSettingsPage { private static final AttributesDescriptor[] DESCRIPTORS = new AttributesDescriptor[]{ - new AttributesDescriptor("Keyword", RelAstGrammarSyntaxHighlighter.KEYWORD), - new AttributesDescriptor("Production Rule Symbol", RelAstGrammarSyntaxHighlighter.ASSIGN), - new AttributesDescriptor("Relation Direction", RelAstGrammarSyntaxHighlighter.RELATON_DIR), - new AttributesDescriptor("Superclass/Component Name", RelAstGrammarSyntaxHighlighter.COL), - new AttributesDescriptor("Comma", RelAstGrammarSyntaxHighlighter.COMMA), - new AttributesDescriptor("Documentation Comment", RelAstGrammarSyntaxHighlighter.DOCCOMMENT), - new AttributesDescriptor("Namespace Qualifier Dot", RelAstGrammarSyntaxHighlighter.DOT), - new AttributesDescriptor("Identifier", RelAstGrammarSyntaxHighlighter.ID), - new AttributesDescriptor("Terminal Symbol Bracket", RelAstGrammarSyntaxHighlighter.ANGLE_BRACKET), - new AttributesDescriptor("Block Comment", RelAstGrammarSyntaxHighlighter.MULTILINECOMMENT), - new AttributesDescriptor("0..1 Multiplicity", RelAstGrammarSyntaxHighlighter.QUESTION_MARK), - new AttributesDescriptor("Optional Bracket", RelAstGrammarSyntaxHighlighter.BRACKET), - new AttributesDescriptor("Semicolon", RelAstGrammarSyntaxHighlighter.SCOL), - new AttributesDescriptor("Line Comment", RelAstGrammarSyntaxHighlighter.SINGLELINECOMMENT), - new AttributesDescriptor("NTA Bracket", RelAstGrammarSyntaxHighlighter.SLASH), - new AttributesDescriptor("Star Multiplicity", RelAstGrammarSyntaxHighlighter.STAR), - new AttributesDescriptor("Bad Value", RelAstGrammarSyntaxHighlighter.BAD_CHARACTER) + new AttributesDescriptor("Keyword", GrammarSyntaxHighlighter.KEYWORD), + new AttributesDescriptor("Production Rule Symbol", GrammarSyntaxHighlighter.ASSIGN), + new AttributesDescriptor("Relation Direction", GrammarSyntaxHighlighter.RELATON_DIR), + new AttributesDescriptor("Superclass/Component Name", GrammarSyntaxHighlighter.COL), + new AttributesDescriptor("Comma", GrammarSyntaxHighlighter.COMMA), + new AttributesDescriptor("Documentation Comment", GrammarSyntaxHighlighter.DOCCOMMENT), + new AttributesDescriptor("Namespace Qualifier Dot", GrammarSyntaxHighlighter.DOT), + new AttributesDescriptor("Identifier", GrammarSyntaxHighlighter.ID), + new AttributesDescriptor("Terminal Symbol Bracket", GrammarSyntaxHighlighter.ANGLE_BRACKET), + new AttributesDescriptor("Block Comment", GrammarSyntaxHighlighter.MULTILINECOMMENT), + new AttributesDescriptor("0..1 Multiplicity", GrammarSyntaxHighlighter.QUESTION_MARK), + new AttributesDescriptor("Optional Bracket", GrammarSyntaxHighlighter.BRACKET), + new AttributesDescriptor("Semicolon", GrammarSyntaxHighlighter.SCOL), + new AttributesDescriptor("Line Comment", GrammarSyntaxHighlighter.SINGLELINECOMMENT), + new AttributesDescriptor("NTA Bracket", GrammarSyntaxHighlighter.SLASH), + new AttributesDescriptor("Star Multiplicity", GrammarSyntaxHighlighter.STAR), + new AttributesDescriptor("Bad Value", GrammarSyntaxHighlighter.BAD_CHARACTER) }; @Nullable @@ -44,7 +45,7 @@ public class RelAstGrammarColorSettingsPage implements ColorSettingsPage { @NotNull @Override public SyntaxHighlighter getHighlighter() { - return new RelAstGrammarSyntaxHighlighter(); + return new GrammarSyntaxHighlighter(); } @NotNull diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCommenter.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCommenter.java similarity index 85% rename from src/main/java/org/jastadd/tooling/RelAstGrammarCommenter.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarCommenter.java index 7196de88c2554631cc7bdb7961aca871142d5bd2..641e230a25666067ff16e3a5af765098ff2e1be0 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarCommenter.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCommenter.java @@ -1,10 +1,10 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.lang.Commenter; import org.jetbrains.annotations.Nullable; -public class RelAstGrammarCommenter implements Commenter { +public class GrammarCommenter implements Commenter { @Nullable @Override diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java similarity index 77% rename from src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java index e871cccf11540cb21c3808b1413e6e78dcb4bece..86de3833f8575b8671122acd4cec7032db2adf42 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java @@ -1,29 +1,30 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.patterns.PlatformPatterns; import com.intellij.util.ProcessingContext; -import org.jastadd.tooling.parser.RelAstGrammarTypes; -import org.jastadd.tooling.psi.RelAstGrammarElementFactory; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; -import org.jastadd.tooling.psi.RelAstGrammarTypeReference; +import org.jastadd.tooling.util.JastAddIcons; +import org.jastadd.tooling.grammar.parser.GrammarTypes; +import org.jastadd.tooling.grammar.psi.GrammarElementFactory; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeReference; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarCompletionContributor extends CompletionContributor { +public class GrammarCompletionContributor extends CompletionContributor { public static final String COMPLETION_ELEMENT_SUFFIX = "IntellijIdeaRulezzz"; - public RelAstGrammarCompletionContributor() { + public GrammarCompletionContributor() { // add completion in definition of relations - extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID).afterLeaf("rel", "<->", "->", "<-"), + extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID).afterLeaf("rel", "<->", "->", "<-"), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet resultSet) { - for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) { - RelAstGrammarTypeReference ref = RelAstGrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName()); + for (RelAstGrammarTypeDecl decl : GrammarUtil.findTypeDecl(parameters.getPosition().getProject())) { + RelAstGrammarTypeReference ref = GrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName()); resultSet.addElement(LookupElementBuilder.create(ref).withIcon(JastAddIcons.FILE).withTypeText(decl.getContainingFile().getName())); } } @@ -31,10 +32,10 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { ); // add "* ", "? " after REL ID DOT ID - extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) + extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID) .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string .afterLeaf(".") - .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))) + .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, @@ -48,10 +49,10 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { ); // add "*", "?" after <- ID DOT ID // add "*", "?" after <-> ID DOT ID - extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) + extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID) .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string .afterLeaf(".") - .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))) + .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("<-", "<->"))), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, @@ -64,10 +65,10 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { } ); // add " -> ", " <-> " after REL ID DOT ID <SPACE> - extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) - .afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)) + extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID) + .afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID)) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(".")) - .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))) + .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID)))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel")))), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, @@ -80,11 +81,11 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { ); // add " -> ", " <-> " after REL ID DOT ID * <SPACE> // add " -> ", " <-> " after REL ID DOT ID ? <SPACE> - extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) + extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID) .afterLeaf("?", "*") - .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))) + .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("."))) - .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))))) + .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID))))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))))), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, @@ -98,7 +99,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { // add "." after REL ID // add "." after <-> ID // add "." after <- ID - extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) + extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID) .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string .afterLeaf("rel", "<->", "<-"), new CompletionProvider<>() { @@ -111,8 +112,8 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { } ); // add " <- " after REL ID <SPACE> - extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) - .afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)) + extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID) + .afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID)) .afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel")), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFileType.java b/src/main/java/org/jastadd/tooling/grammar/GrammarFileType.java similarity index 66% rename from src/main/java/org/jastadd/tooling/RelAstGrammarFileType.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarFileType.java index 0b3421103291558982981e730849333720de8d66..f73d87b0c6962a3680f8ba96b2315505b2ce5b8b 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarFileType.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarFileType.java @@ -1,17 +1,18 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.openapi.fileTypes.LanguageFileType; +import org.jastadd.tooling.util.JastAddIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class RelAstGrammarFileType extends LanguageFileType { +public class GrammarFileType extends LanguageFileType { - public static final RelAstGrammarFileType INSTANCE = new RelAstGrammarFileType(); + public static final GrammarFileType INSTANCE = new GrammarFileType(); - private RelAstGrammarFileType() { - super(RelAstGrammar.INSTANCE); + private GrammarFileType() { + super(Grammar.INSTANCE); } @NotNull @@ -32,7 +33,6 @@ public class RelAstGrammarFileType extends LanguageFileType { return "relast"; } - @Nullable @Override public Icon getIcon() { diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarFindUsageProvider.java similarity index 74% rename from src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarFindUsageProvider.java index 4133679bf7727239aa2a36d69a0d4ed09d678e8d..0cad9c8561c15f80cb11b57c0054394a1293d00c 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarFindUsageProvider.java @@ -1,25 +1,25 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.lang.cacheBuilder.DefaultWordsScanner; import com.intellij.lang.cacheBuilder.WordsScanner; import com.intellij.lang.findUsages.FindUsagesProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.TokenSet; -import org.jastadd.tooling.lexer.RelAstGrammarFlexAdapter; -import org.jastadd.tooling.parser.RelAstGrammarTypes; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.grammar.lexer.GrammarLexerAdapter; +import org.jastadd.tooling.grammar.parser.GrammarTypes; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeDecl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class RelAstGrammarFindUsageProvider implements FindUsagesProvider { +public class GrammarFindUsageProvider implements FindUsagesProvider { @Nullable @Override public WordsScanner getWordsScanner() { // TODO comments are not working - return new DefaultWordsScanner(new RelAstGrammarFlexAdapter(), - TokenSet.create(RelAstGrammarTypes.ID), - TokenSet.create(RelAstGrammarTypes.MULTILINECOMMENT, RelAstGrammarTypes.DOCCOMMENT, RelAstGrammarTypes.SINGLELINECOMMENT), + return new DefaultWordsScanner(new GrammarLexerAdapter(), + TokenSet.create(GrammarTypes.ID), + TokenSet.create(GrammarTypes.MULTILINECOMMENT, GrammarTypes.DOCCOMMENT, GrammarTypes.SINGLELINECOMMENT), TokenSet.EMPTY); } diff --git a/src/main/java/org/jastadd/tooling/grammar/GrammarFormattingModelBuilder.java b/src/main/java/org/jastadd/tooling/grammar/GrammarFormattingModelBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..e945b6fc3f35edab6b53be3de5806fb18ef02a05 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarFormattingModelBuilder.java @@ -0,0 +1,58 @@ +package org.jastadd.tooling.grammar; + +import com.intellij.formatting.*; +import com.intellij.lang.ASTNode; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; +import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.codeStyle.CommonCodeStyleSettings; +import com.intellij.psi.tree.TokenSet; +import org.jastadd.tooling.grammar.parser.GrammarTypes; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class GrammarFormattingModelBuilder implements FormattingModelBuilder { + + private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) { + final CommonCodeStyleSettings commonSettings = settings.getCommonSettings(Grammar.INSTANCE.getID()); + + final TokenSet roleMultiplicityTokens = TokenSet.create(GrammarTypes.STAR, GrammarTypes.QUESTION_MARK); + final TokenSet relationDirectionTokens = TokenSet.create(GrammarTypes.LEFT, GrammarTypes.RIGHT, GrammarTypes.BIDIRECTIONAL); + final TokenSet declarationTokens = TokenSet.create(GrammarTypes.TYPE_DECL, GrammarTypes.RELATION); + + return new SpacingBuilder(settings, Grammar.INSTANCE) + .around(GrammarTypes.ASSIGN).spaceIf(commonSettings.SPACE_AROUND_ASSIGNMENT_OPERATORS) + .before(declarationTokens).none() + .before(GrammarTypes.SCOL).spaceIf(commonSettings.SPACE_BEFORE_SEMICOLON) + .around(relationDirectionTokens).spaceIf(commonSettings.SPACE_AROUND_RELATIONAL_OPERATORS) + .between(GrammarTypes.COMPONENT, GrammarTypes.COMPONENT).spaces(1) + .around(GrammarTypes.DOT).none() + .before(roleMultiplicityTokens).spaceIf(commonSettings.SPACE_AROUND_UNARY_OPERATOR) + .aroundInside(GrammarTypes.COL, GrammarTypes.TYPE_DECL).spaceIf(commonSettings.SPACE_AROUND_ADDITIVE_OPERATORS) + .aroundInside(GrammarTypes.COL, GrammarTypes.COMPONENT).none() + .withinPair(GrammarTypes.LT, GrammarTypes.GT).spaceIf(commonSettings.SPACE_WITHIN_CAST_PARENTHESES) + .withinPair(GrammarTypes.LBRACKET, GrammarTypes.RBRACKET).spaceIf(commonSettings.SPACE_WITHIN_BRACKETS) + .between(declarationTokens, GrammarTypes.COMMENT).spaces(1) + .afterInside(GrammarTypes.SLASH, GrammarTypes.NTA_COMPONENT).none() + .beforeInside(GrammarTypes.SLASH, GrammarTypes.NTA_COMPONENT).none(); + } + + @NotNull + @Override + public FormattingModel createModel(FormattingContext context) { + return FormattingModelProvider + .createFormattingModelForPsiFile(context.getPsiElement().getContainingFile(), + new GrammarBlock(context.getPsiElement().getNode(), + Wrap.createWrap(WrapType.NONE, false), + Alignment.createAlignment(), + createSpaceBuilder(context.getCodeStyleSettings())), + context.getCodeStyleSettings()); + } + + @Nullable + @Override + public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) { + return null; + } + +} diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarJavaAnnotator.java b/src/main/java/org/jastadd/tooling/grammar/GrammarJavaAnnotator.java similarity index 89% rename from src/main/java/org/jastadd/tooling/RelAstGrammarJavaAnnotator.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarJavaAnnotator.java index 5beaeff927d825c7577c940e5c12e87982db8fda..3b409aa6321bb4b4955d7835a7682d335c5bf5a9 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarJavaAnnotator.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarJavaAnnotator.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.codeInspection.ProblemHighlightType; @@ -10,16 +10,15 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.javadoc.PsiDocTag; -import org.jastadd.tooling.psi.RelAstGrammarComponent; import org.jetbrains.annotations.NotNull; import java.util.Arrays; import java.util.Optional; import java.util.stream.Collectors; -import static org.jastadd.tooling.RelAstGrammarUtil.asReferenceToTypeDecl; +import static org.jastadd.tooling.grammar.GrammarUtil.asReferenceToTypeDecl; -public class RelAstGrammarJavaAnnotator implements Annotator { +public class GrammarJavaAnnotator implements Annotator { @Override public void annotate(@NotNull final PsiElement element, @NotNull AnnotationHolder holder) { diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarLanguageCodeStyleSettingsProvider.java similarity index 90% rename from src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarLanguageCodeStyleSettingsProvider.java index 51e717ef3df6c37af8c2787031e6d4d48a484c97..49212b1eb271f9992e2554bfbf43997e6f5f85f6 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarLanguageCodeStyleSettingsProvider.java @@ -1,16 +1,15 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; -import com.intellij.lang.Language; import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable; import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider { +public class GrammarLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider { @NotNull @Override - public Language getLanguage() { - return RelAstGrammar.INSTANCE; + public com.intellij.lang.Language getLanguage() { + return Grammar.INSTANCE; } @Override diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarLineMarkerProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarLineMarkerProvider.java similarity index 74% rename from src/main/java/org/jastadd/tooling/RelAstGrammarLineMarkerProvider.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarLineMarkerProvider.java index 1e8700833a57def53b05c01b1e6b3e19dddec361..47b14ea988e752a37daf072021548c005a0aefb2 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarLineMarkerProvider.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarLineMarkerProvider.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo; import com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider; @@ -6,16 +6,17 @@ import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiIdentifier; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.util.JastAddIcons; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeDecl; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.List; import java.util.Optional; -import static org.jastadd.tooling.RelAstGrammarUtil.asReferenceToTypeDecl; +import static org.jastadd.tooling.grammar.GrammarUtil.asReferenceToTypeDecl; -public class RelAstGrammarLineMarkerProvider extends RelatedItemLineMarkerProvider { +public class GrammarLineMarkerProvider extends RelatedItemLineMarkerProvider { @Override protected void collectNavigationMarkers(@NotNull PsiElement element, @@ -32,7 +33,7 @@ public class RelAstGrammarLineMarkerProvider extends RelatedItemLineMarkerProvid } // Get the list of typeDecls for given key - List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(element.getProject(), classOptional.get().getName()); + List<RelAstGrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(element.getProject(), classOptional.get().getName()); if (!typeDecls.isEmpty()) { NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder.create(JastAddIcons.FILE) diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarRefactoringSupportProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java similarity index 72% rename from src/main/java/org/jastadd/tooling/RelAstGrammarRefactoringSupportProvider.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java index ae38c46ab88aa557667818ef7d6bc689249813e8..dfff3bf8dad02d91548b449268a4a323a2cb5159 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarRefactoringSupportProvider.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java @@ -1,14 +1,14 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.lang.refactoring.RefactoringSupportProvider; import com.intellij.psi.PsiElement; -import org.jastadd.tooling.psi.RelAstGrammarDeclaredName; -import org.jastadd.tooling.psi.RelAstGrammarTypeReference; +import org.jastadd.tooling.grammar.psi.RelAstGrammarDeclaredName; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeReference; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class RelAstGrammarRefactoringSupportProvider extends RefactoringSupportProvider { +public class GrammarRefactoringSupportProvider extends RefactoringSupportProvider { @Override public boolean isMemberInplaceRenameAvailable(@NotNull PsiElement elementToRename, @Nullable PsiElement context) { diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java b/src/main/java/org/jastadd/tooling/grammar/GrammarReference.java similarity index 77% rename from src/main/java/org/jastadd/tooling/RelAstGrammarReference.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarReference.java index ae8f8733bd756ee80d9a0038a75dc5c04a49cb8c..2cfaafa7abc8a0f072d8018c0aefb08db78ce3c2 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarReference.java @@ -1,22 +1,23 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.util.JastAddIcons; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeDecl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; -public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference { +public class GrammarReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference { private final String key; - public RelAstGrammarReference(@NotNull PsiElement element, TextRange textRange) { + public GrammarReference(@NotNull PsiElement element, TextRange textRange) { super(element, textRange); key = element.getText().substring(textRange.getStartOffset(), textRange.getEndOffset()); } @@ -25,7 +26,7 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme @Override public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) { Project project = myElement.getProject(); - final List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, key); + final List<RelAstGrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project, key); List<ResolveResult> results = new ArrayList<>(); for (RelAstGrammarTypeDecl typeDecl : typeDecls) { results.add(new PsiElementResolveResult(typeDecl)); @@ -44,7 +45,7 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme @Override public Object @NotNull [] getVariants() { Project project = myElement.getProject(); - List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project); + List<RelAstGrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project); List<LookupElement> variants = new ArrayList<>(); for (final RelAstGrammarTypeDecl typeDecl : typeDecls) { if (typeDecl.getName() != null && typeDecl.getName().length() > 0) { diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarReferenceContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java similarity index 79% rename from src/main/java/org/jastadd/tooling/RelAstGrammarReferenceContributor.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java index 326b07524fa33af52382a98d2764d9fea1ba60fa..99ec1b2f55a8bee80f1cba535f8616671cdaf98c 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarReferenceContributor.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java @@ -1,13 +1,13 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.openapi.util.TextRange; import com.intellij.patterns.PlatformPatterns; import com.intellij.psi.*; import com.intellij.util.ProcessingContext; -import org.jastadd.tooling.psi.RelAstGrammarTypeReference; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeReference; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarReferenceContributor extends PsiReferenceContributor { +public class GrammarReferenceContributor extends PsiReferenceContributor { @Override public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) { @@ -22,7 +22,7 @@ public class RelAstGrammarReferenceContributor extends PsiReferenceContributor { String value = typeReference.getText(); if (value != null) { TextRange range = new TextRange(0, value.length()); - return new PsiReference[]{new RelAstGrammarReference(element, range)}; + return new PsiReference[]{new GrammarReference(element, range)}; } return PsiReference.EMPTY_ARRAY; } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarRemoveRedundantComponentNameFix.java b/src/main/java/org/jastadd/tooling/grammar/GrammarRemoveRedundantComponentNameFix.java similarity index 75% rename from src/main/java/org/jastadd/tooling/RelAstGrammarRemoveRedundantComponentNameFix.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarRemoveRedundantComponentNameFix.java index 01a095de0802074bd1561b684c2102a574d89add..25bf8d1346a36eac5613f3fb7df4f6e632a4cf4b 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarRemoveRedundantComponentNameFix.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarRemoveRedundantComponentNameFix.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; import com.intellij.openapi.editor.Editor; @@ -6,15 +6,15 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.IncorrectOperationException; -import org.jastadd.tooling.parser.RelAstGrammarTypes; -import org.jastadd.tooling.psi.RelAstGrammarComponent; +import org.jastadd.tooling.grammar.parser.GrammarTypes; +import org.jastadd.tooling.grammar.psi.RelAstGrammarComponent; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarRemoveRedundantComponentNameFix extends BaseIntentionAction { +public class GrammarRemoveRedundantComponentNameFix extends BaseIntentionAction { private final RelAstGrammarComponent component; - public RelAstGrammarRemoveRedundantComponentNameFix(RelAstGrammarComponent component) { + public GrammarRemoveRedundantComponentNameFix(RelAstGrammarComponent component) { this.component = component; } @@ -40,7 +40,7 @@ public class RelAstGrammarRemoveRedundantComponentNameFix extends BaseIntentionA IncorrectOperationException { PsiElement first = component.getDeclaredName(); PsiElement last = component.getDeclaredName(); - while (last != null && last.getNode().getElementType() != RelAstGrammarTypes.COL) { + while (last != null && last.getNode().getElementType() != GrammarTypes.COL) { last = last.getNextSibling(); } if (last == null) { diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewElement.java similarity index 76% rename from src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewElement.java index dd6e74dc9112e7671f2b20d98b23418432c63701..e0bf0348ceb82a311e22d481b5688608964865a3 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewElement.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.ide.projectView.PresentationData; import com.intellij.ide.structureView.StructureViewTreeElement; @@ -7,19 +7,19 @@ import com.intellij.ide.util.treeView.smartTree.TreeElement; import com.intellij.navigation.ItemPresentation; import com.intellij.psi.NavigatablePsiElement; import com.intellij.psi.util.PsiTreeUtil; -import org.jastadd.tooling.psi.RelAstGrammarFile; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; -import org.jastadd.tooling.psi.impl.RelAstGrammarTypeDeclImpl; +import org.jastadd.tooling.grammar.psi.GrammarFile; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.grammar.psi.impl.RelAstGrammarTypeDeclImpl; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -public class RelAstGrammarStructureViewElement implements StructureViewTreeElement, SortableTreeElement { +public class GrammarStructureViewElement implements StructureViewTreeElement, SortableTreeElement { private final NavigatablePsiElement myElement; - public RelAstGrammarStructureViewElement(NavigatablePsiElement element) { + public GrammarStructureViewElement(NavigatablePsiElement element) { this.myElement = element; } @@ -60,11 +60,11 @@ public class RelAstGrammarStructureViewElement implements StructureViewTreeEleme @NotNull @Override public TreeElement @NotNull [] getChildren() { - if (myElement instanceof RelAstGrammarFile) { + if (myElement instanceof GrammarFile) { List<RelAstGrammarTypeDecl> properties = PsiTreeUtil.getChildrenOfTypeAsList(myElement, RelAstGrammarTypeDecl.class); List<TreeElement> treeElements = new ArrayList<>(properties.size()); for (RelAstGrammarTypeDecl property : properties) { - treeElements.add(new RelAstGrammarStructureViewElement((RelAstGrammarTypeDeclImpl) property)); + treeElements.add(new GrammarStructureViewElement((RelAstGrammarTypeDeclImpl) property)); } return treeElements.toArray(new TreeElement[0]); } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewFactory.java similarity index 80% rename from src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewFactory.java index 23b14e4281f2816557667501fab17a594ce7485c..1262848366283eec0cfa992335108939c27f29b9 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewFactory.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.ide.structureView.StructureViewModel; @@ -9,7 +9,7 @@ import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class RelAstGrammarStructureViewFactory implements PsiStructureViewFactory { +public class GrammarStructureViewFactory implements PsiStructureViewFactory { @Nullable @Override @@ -18,7 +18,7 @@ public class RelAstGrammarStructureViewFactory implements PsiStructureViewFactor @NotNull @Override public StructureViewModel createStructureViewModel(@Nullable Editor editor) { - return new RelAstGrammarStructureViewModel(psiFile); + return new GrammarStructureViewModel(psiFile); } }; } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewModel.java similarity index 65% rename from src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewModel.java index 9f164f06b9c71570d7578c83452f1ad49dcaad1e..98994e47225077bdee1313c0afd24171ba54e220 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewModel.java @@ -1,18 +1,18 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.ide.structureView.StructureViewModel; import com.intellij.ide.structureView.StructureViewModelBase; import com.intellij.ide.structureView.StructureViewTreeElement; import com.intellij.ide.util.treeView.smartTree.Sorter; import com.intellij.psi.PsiFile; -import org.jastadd.tooling.psi.RelAstGrammarFile; +import org.jastadd.tooling.grammar.psi.GrammarFile; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarStructureViewModel extends StructureViewModelBase implements +public class GrammarStructureViewModel extends StructureViewModelBase implements StructureViewModel.ElementInfoProvider { - public RelAstGrammarStructureViewModel(PsiFile psiFile) { - super(psiFile, new RelAstGrammarStructureViewElement(psiFile)); + public GrammarStructureViewModel(PsiFile psiFile) { + super(psiFile, new GrammarStructureViewElement(psiFile)); } @NotNull @@ -28,7 +28,7 @@ public class RelAstGrammarStructureViewModel extends StructureViewModelBase impl @Override public boolean isAlwaysLeaf(StructureViewTreeElement element) { - return element instanceof RelAstGrammarFile; + return element instanceof GrammarFile; } } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighter.java b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighter.java similarity index 77% rename from src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighter.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighter.java index 23bc610ade194ee4c891a330d97c37c2e3edc1f0..31dda53dfab9aa4a68ac5a8c213d416a5784bc54 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighter.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighter.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.lexer.Lexer; @@ -8,13 +8,13 @@ import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.fileTypes.SyntaxHighlighterBase; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; -import org.jastadd.tooling.lexer.RelAstGrammarFlexAdapter; -import org.jastadd.tooling.parser.RelAstGrammarTypes; +import org.jastadd.tooling.grammar.lexer.GrammarLexerAdapter; +import org.jastadd.tooling.grammar.parser.GrammarTypes; import org.jetbrains.annotations.NotNull; import static com.intellij.openapi.editor.colors.TextAttributesKey.createTextAttributesKey; -public class RelAstGrammarSyntaxHighlighter extends SyntaxHighlighterBase { +public class GrammarSyntaxHighlighter extends SyntaxHighlighterBase { public static final TextAttributesKey KEYWORD = createTextAttributesKey("RELAST_KEYWORD", DefaultLanguageHighlighterColors.KEYWORD); public static final TextAttributesKey ASSIGN = createTextAttributesKey("RELAST_ASSIGN", DefaultLanguageHighlighterColors.OPERATION_SIGN); @@ -57,54 +57,54 @@ public class RelAstGrammarSyntaxHighlighter extends SyntaxHighlighterBase { @NotNull @Override public Lexer getHighlightingLexer() { - return new RelAstGrammarFlexAdapter(); + return new GrammarLexerAdapter(); } @NotNull @Override public TextAttributesKey @NotNull [] getTokenHighlights(IElementType tokenType) { - if (tokenType.equals(RelAstGrammarTypes.ABSTRACT)) { + if (tokenType.equals(GrammarTypes.ABSTRACT)) { return KEYWORD_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.ASSIGN)) { + } else if (tokenType.equals(GrammarTypes.ASSIGN)) { return ASSIGN_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.BIDIRECTIONAL)) { + } else if (tokenType.equals(GrammarTypes.BIDIRECTIONAL)) { return RELATION_DIR_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.COL)) { + } else if (tokenType.equals(GrammarTypes.COL)) { return COL_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.COMMA)) { + } else if (tokenType.equals(GrammarTypes.COMMA)) { return COMMA_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.DOCCOMMENT)) { + } else if (tokenType.equals(GrammarTypes.DOCCOMMENT)) { return DOCCOMMENT_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.DOT)) { + } else if (tokenType.equals(GrammarTypes.DOT)) { return DOT_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.GT)) { + } else if (tokenType.equals(GrammarTypes.GT)) { return ANGLE_BRACKET_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.ID)) { + } else if (tokenType.equals(GrammarTypes.ID)) { return ID_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.LBRACKET)) { + } else if (tokenType.equals(GrammarTypes.LBRACKET)) { return BRACKET_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.LEFT)) { + } else if (tokenType.equals(GrammarTypes.LEFT)) { return RELATION_DIR_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.LT)) { + } else if (tokenType.equals(GrammarTypes.LT)) { return ANGLE_BRACKET_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.MULTILINECOMMENT)) { + } else if (tokenType.equals(GrammarTypes.MULTILINECOMMENT)) { return MULTILINECOMMENT_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.QUESTION_MARK)) { + } else if (tokenType.equals(GrammarTypes.QUESTION_MARK)) { return QUESTION_MARK_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.RBRACKET)) { + } else if (tokenType.equals(GrammarTypes.RBRACKET)) { return BRACKET_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.REL)) { + } else if (tokenType.equals(GrammarTypes.REL)) { return KEYWORD_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.RIGHT)) { + } else if (tokenType.equals(GrammarTypes.RIGHT)) { return RELATION_DIR_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.SCOL)) { + } else if (tokenType.equals(GrammarTypes.SCOL)) { return SCOL_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.SINGLELINECOMMENT)) { + } else if (tokenType.equals(GrammarTypes.SINGLELINECOMMENT)) { return SINGLELINECOMMENT_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.SLASH)) { + } else if (tokenType.equals(GrammarTypes.SLASH)) { return SLASH_KEYS; - } else if (tokenType.equals(RelAstGrammarTypes.STAR)) { + } else if (tokenType.equals(GrammarTypes.STAR)) { return STAR_KEYS; } else if (tokenType.equals(TokenType.BAD_CHARACTER)) { return BAD_CHAR_KEYS; diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighterFactory.java b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighterFactory.java similarity index 69% rename from src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighterFactory.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighterFactory.java index 2860248c7929f051c586a822696ee67a50901f23..0fb350fee3b9d03c58ed3b5ccdab5b82a382ec28 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighterFactory.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighterFactory.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.openapi.fileTypes.SyntaxHighlighter; import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; @@ -6,12 +6,12 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarSyntaxHighlighterFactory extends SyntaxHighlighterFactory { +public class GrammarSyntaxHighlighterFactory extends SyntaxHighlighterFactory { @NotNull @Override public SyntaxHighlighter getSyntaxHighlighter(Project project, VirtualFile virtualFile) { - return new RelAstGrammarSyntaxHighlighter(); + return new GrammarSyntaxHighlighter(); } } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java b/src/main/java/org/jastadd/tooling/grammar/GrammarUtil.java similarity index 85% rename from src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java rename to src/main/java/org/jastadd/tooling/grammar/GrammarUtil.java index 8a480a0330cf26425481e92f2a957056b2b6899e..7f32eba9acf7d9be0d9c82045df9670ec33db571 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java +++ b/src/main/java/org/jastadd/tooling/grammar/GrammarUtil.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.grammar; import com.intellij.openapi.project.Project; @@ -9,16 +9,16 @@ import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.search.FileTypeIndex; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; -import org.jastadd.tooling.psi.RelAstGrammarFile; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.grammar.psi.GrammarFile; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeDecl; import org.jetbrains.annotations.NotNull; import java.util.*; -public class RelAstGrammarUtil { +public class GrammarUtil { - private RelAstGrammarUtil() { + private GrammarUtil() { // appease SonarLint java:S1118 throw new IllegalStateException("Utility class"); } @@ -33,9 +33,9 @@ public class RelAstGrammarUtil { public static List<RelAstGrammarTypeDecl> findTypeDecl(Project project, String name) { List<RelAstGrammarTypeDecl> result = new ArrayList<>(); Collection<VirtualFile> virtualFiles = - FileTypeIndex.getFiles(RelAstGrammarFileType.INSTANCE, GlobalSearchScope.allScope(project)); + FileTypeIndex.getFiles(GrammarFileType.INSTANCE, GlobalSearchScope.allScope(project)); for (VirtualFile virtualFile : virtualFiles) { - RelAstGrammarFile simpleFile = (RelAstGrammarFile) PsiManager.getInstance(project).findFile(virtualFile); + GrammarFile simpleFile = (GrammarFile) PsiManager.getInstance(project).findFile(virtualFile); if (simpleFile != null) { // TODO check if file is ignored or generated! RelAstGrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, RelAstGrammarTypeDecl.class); @@ -60,9 +60,9 @@ public class RelAstGrammarUtil { public static List<RelAstGrammarTypeDecl> findTypeDecl(Project project) { List<RelAstGrammarTypeDecl> result = new ArrayList<>(); Collection<VirtualFile> virtualFiles = - FileTypeIndex.getFiles(RelAstGrammarFileType.INSTANCE, GlobalSearchScope.allScope(project)); + FileTypeIndex.getFiles(GrammarFileType.INSTANCE, GlobalSearchScope.allScope(project)); for (VirtualFile virtualFile : virtualFiles) { - RelAstGrammarFile simpleFile = (RelAstGrammarFile) PsiManager.getInstance(project).findFile(virtualFile); + GrammarFile simpleFile = (GrammarFile) PsiManager.getInstance(project).findFile(virtualFile); if (simpleFile != null) { // TODO check if file is ignored or generated! RelAstGrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, RelAstGrammarTypeDecl.class); diff --git a/src/main/java/org/jastadd/tooling/grammar/lexer/GrammarLexerAdapter.java b/src/main/java/org/jastadd/tooling/grammar/lexer/GrammarLexerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..1087854e68e44d1bdcf431bd5c3f31b5c7fa2bc3 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/lexer/GrammarLexerAdapter.java @@ -0,0 +1,11 @@ +package org.jastadd.tooling.grammar.lexer; + +import com.intellij.lexer.FlexAdapter; + +public class GrammarLexerAdapter extends FlexAdapter { + + public GrammarLexerAdapter() { + super(new GrammarLexer(null)); + } + +} diff --git a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarParserDefinition.java b/src/main/java/org/jastadd/tooling/grammar/parser/GrammarParserDefinition.java similarity index 69% rename from src/main/java/org/jastadd/tooling/parser/RelAstGrammarParserDefinition.java rename to src/main/java/org/jastadd/tooling/grammar/parser/GrammarParserDefinition.java index 2f47290d6344b7809cbe2df364a4b6545b208308..03533b56174029b329ddc3dece081bfc7f2abf1b 100644 --- a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarParserDefinition.java +++ b/src/main/java/org/jastadd/tooling/grammar/parser/GrammarParserDefinition.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling.parser; +package org.jastadd.tooling.grammar.parser; import com.intellij.lang.ASTNode; import com.intellij.lang.ParserDefinition; @@ -11,23 +11,22 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IFileElementType; import com.intellij.psi.tree.TokenSet; -import org.jastadd.tooling.RelAstGrammar; -import org.jastadd.tooling.lexer.RelAstGrammarFlexAdapter; -import org.jastadd.tooling.psi.RelAstGrammarFile; +import org.jastadd.tooling.grammar.Grammar; +import org.jastadd.tooling.grammar.lexer.GrammarLexerAdapter; +import org.jastadd.tooling.grammar.psi.GrammarFile; import org.jetbrains.annotations.NotNull; - -public class RelAstGrammarParserDefinition implements ParserDefinition { +public class GrammarParserDefinition implements ParserDefinition { public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE); - public static final TokenSet COMMENTS = TokenSet.create(RelAstGrammarTypes.SINGLELINECOMMENT, RelAstGrammarTypes.DOCCOMMENT, RelAstGrammarTypes.MULTILINECOMMENT); + public static final TokenSet COMMENTS = TokenSet.create(GrammarTypes.SINGLELINECOMMENT, GrammarTypes.DOCCOMMENT, GrammarTypes.MULTILINECOMMENT); - public static final IFileElementType FILE = new IFileElementType(RelAstGrammar.INSTANCE); + public static final IFileElementType FILE = new IFileElementType(Grammar.INSTANCE); @NotNull @Override public Lexer createLexer(Project project) { - return new RelAstGrammarFlexAdapter(); + return new GrammarLexerAdapter(); } @NotNull @@ -51,7 +50,7 @@ public class RelAstGrammarParserDefinition implements ParserDefinition { @NotNull @Override public PsiParser createParser(final Project project) { - return new RelAstGrammarParser(); + return new GrammarParser(); } @Override @@ -61,7 +60,7 @@ public class RelAstGrammarParserDefinition implements ParserDefinition { @Override public PsiFile createFile(FileViewProvider viewProvider) { - return new RelAstGrammarFile(viewProvider); + return new GrammarFile(viewProvider); } @Override @@ -72,7 +71,7 @@ public class RelAstGrammarParserDefinition implements ParserDefinition { @NotNull @Override public PsiElement createElement(ASTNode node) { - return RelAstGrammarTypes.Factory.createElement(node); + return GrammarTypes.Factory.createElement(node); } } diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..3d080708d233e8d6ded5bb5c326de2c96b4b310c --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java @@ -0,0 +1,31 @@ +package org.jastadd.tooling.grammar.psi; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFileFactory; +import org.jastadd.tooling.grammar.GrammarFileType; +import org.jastadd.tooling.grammar.parser.GrammarTypes; + +import java.util.Objects; + +public class GrammarElementFactory { + + private GrammarElementFactory() { + throw new IllegalStateException("Utility class"); + } + + public static RelAstGrammarDeclaredName createDeclaredName(Project project, String name) { + final GrammarFile file = createFile(project, name + ";"); + return (RelAstGrammarDeclaredName) file.getFirstChild().getFirstChild(); + } + + public static RelAstGrammarTypeReference createTypeReference(Project project, String name) { + final GrammarFile file = createFile(project, "X : " + name + ";"); + return (RelAstGrammarTypeReference) (Objects.requireNonNull(file.getFirstChild().getNode().findChildByType(GrammarTypes.TYPE_REFERENCE)).getPsi()); + } + + public static GrammarFile createFile(Project project, String text) { + String name = "dummy.relast"; + return (GrammarFile) PsiFileFactory.getInstance(project). + createFileFromText(name, GrammarFileType.INSTANCE, text); + } +} diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementType.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementType.java new file mode 100644 index 0000000000000000000000000000000000000000..098154fcb739415ad73e16d1534a889394a7cffa --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementType.java @@ -0,0 +1,14 @@ +package org.jastadd.tooling.grammar.psi; + +import com.intellij.psi.tree.IElementType; +import org.jastadd.tooling.grammar.Grammar; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +public class GrammarElementType extends IElementType { + + public GrammarElementType(@NotNull @NonNls String debugName) { + super(debugName, Grammar.INSTANCE); + } + +} diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarFile.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarFile.java new file mode 100644 index 0000000000000000000000000000000000000000..c2a13eb1d1ee0826f4fa51c53593a5b571ad42a5 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarFile.java @@ -0,0 +1,26 @@ +package org.jastadd.tooling.grammar.psi; + +import com.intellij.extapi.psi.PsiFileBase; +import com.intellij.psi.FileViewProvider; +import org.jastadd.tooling.grammar.Grammar; +import org.jastadd.tooling.grammar.GrammarFileType; +import org.jetbrains.annotations.NotNull; + +public class GrammarFile extends PsiFileBase { + + public GrammarFile(@NotNull FileViewProvider viewProvider) { + super(viewProvider, Grammar.INSTANCE); + } + + @NotNull + @Override + public com.intellij.openapi.fileTypes.FileType getFileType() { + return GrammarFileType.INSTANCE; + } + + @Override + public String toString() { + return "RelAst Grammar File"; + } + +} diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java new file mode 100644 index 0000000000000000000000000000000000000000..69b6fe7cbf9737f3d18e9ba6e2830c7d9cd78910 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java @@ -0,0 +1,7 @@ +package org.jastadd.tooling.grammar.psi; + +import com.intellij.psi.PsiNameIdentifierOwner; + +public interface GrammarNamedElement extends PsiNameIdentifierOwner { + +} diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTokenType.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTokenType.java new file mode 100644 index 0000000000000000000000000000000000000000..19c91f42e019714e82755a8164b31e8be41cfea9 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTokenType.java @@ -0,0 +1,19 @@ +package org.jastadd.tooling.grammar.psi; + +import com.intellij.psi.tree.IElementType; +import org.jastadd.tooling.grammar.Grammar; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +public class GrammarTokenType extends IElementType { + + public GrammarTokenType(@NotNull @NonNls String debugName) { + super(debugName, Grammar.INSTANCE); + } + + @Override + public String toString() { + return "RelAstGrammarTokenType." + super.toString(); + } + +} diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeDeclExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeDeclExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..3459b1aca8435d9392d54556a96365d08491e3f1 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeDeclExtension.java @@ -0,0 +1,4 @@ +package org.jastadd.tooling.grammar.psi; + +public interface GrammarTypeDeclExtension extends GrammarNamedElement { +} diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..c9cbb3c9089193483e7a999be66b1b9400a03a0f --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceExtension.java @@ -0,0 +1,4 @@ +package org.jastadd.tooling.grammar.psi; + +public interface GrammarTypeReferenceExtension extends GrammarNamedElement { +} diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceManipulator.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java similarity index 82% rename from src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceManipulator.java rename to src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java index 38112626dddc2521650a3af32c2e7490ad20fee0..4825b7d4bf6df99558c4116b98053307adf0ebf5 100644 --- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceManipulator.java +++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling.psi; +package org.jastadd.tooling.grammar.psi; import com.intellij.openapi.util.TextRange; import com.intellij.psi.AbstractElementManipulator; @@ -7,7 +7,7 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class RelAstGrammarTypeReferenceManipulator extends AbstractElementManipulator<RelAstGrammarTypeReference> implements ElementManipulator<RelAstGrammarTypeReference> { +public class GrammarTypeReferenceManipulator extends AbstractElementManipulator<RelAstGrammarTypeReference> implements ElementManipulator<RelAstGrammarTypeReference> { /** * Changes the element's text to the given new text. * diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java similarity index 77% rename from src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java rename to src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java index f684e427eb0700feae1b799a9e28828efd9c8181..8b96481da17abea2668844bb1a834a4dba79687b 100644 --- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java +++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java @@ -1,20 +1,20 @@ -package org.jastadd.tooling.psi.impl; +package org.jastadd.tooling.grammar.psi.impl; import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.lang.ASTNode; import com.intellij.navigation.ItemPresentation; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry; -import org.jastadd.tooling.JastAddIcons; -import org.jastadd.tooling.psi.RelAstGrammarNamedElement; +import org.jastadd.tooling.util.JastAddIcons; +import org.jastadd.tooling.grammar.psi.GrammarNamedElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -public abstract class RelAstGrammarNamedElementImpl extends ASTWrapperPsiElement implements RelAstGrammarNamedElement { +public abstract class GrammarNamedElementImpl extends ASTWrapperPsiElement implements GrammarNamedElement { - protected RelAstGrammarNamedElementImpl(@NotNull ASTNode node) { + protected GrammarNamedElementImpl(@NotNull ASTNode node) { super(node); } diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..9bc6712fa99c2bbc1bb044ece2c95244c1bbe327 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java @@ -0,0 +1,47 @@ +package org.jastadd.tooling.grammar.psi.impl; + +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import org.jastadd.tooling.grammar.parser.GrammarTypes; +import org.jastadd.tooling.grammar.psi.GrammarTypeDeclExtension; +import org.jastadd.tooling.grammar.psi.RelAstGrammarDeclaredName; +import org.jastadd.tooling.grammar.psi.GrammarElementFactory; +import org.jetbrains.annotations.NotNull; + +public class GrammarTypeDeclImplExtension extends GrammarNamedElementImpl implements GrammarTypeDeclExtension { + + public GrammarTypeDeclImplExtension(@NotNull ASTNode node) { + super(node); + } + + public String getName() { + // this finds the *first* ID, which is what we want + ASTNode keyNode = getNode().findChildByType(GrammarTypes.DECLARED_NAME); + if (keyNode != null) { + return keyNode.getText(); + } else { + return null; + } + } + + public PsiElement setName(@NotNull String newName) { + ASTNode keyNode = getNode().findChildByType(GrammarTypes.DECLARED_NAME); + if (keyNode != null) { + RelAstGrammarDeclaredName name = GrammarElementFactory.createDeclaredName(getProject(), newName); + ASTNode newKeyNode = name.getNode(); + getNode().replaceChild(keyNode, newKeyNode); + } + return this; + } + + public PsiElement getNameIdentifier() { + ASTNode keyNode = getNode().findChildByType(GrammarTypes.DECLARED_NAME); + if (keyNode != null) { + return keyNode.getPsi(); + } else { + return null; + } + } + + +} diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java similarity index 57% rename from src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java rename to src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java index 3b44b50ecc4e58eb33673bc27a9b6211baed5011..380fbc1d7804b94f97ba727de3647107287b45c5 100644 --- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java +++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java @@ -1,15 +1,15 @@ -package org.jastadd.tooling.psi.impl; +package org.jastadd.tooling.grammar.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; -import org.jastadd.tooling.psi.RelAstGrammarElementFactory; -import org.jastadd.tooling.psi.RelAstGrammarTypeReference; -import org.jastadd.tooling.psi.RelAstGrammarTypeReferenceExtension; +import org.jastadd.tooling.grammar.psi.GrammarElementFactory; +import org.jastadd.tooling.grammar.psi.GrammarTypeReferenceExtension; +import org.jastadd.tooling.grammar.psi.RelAstGrammarTypeReference; import org.jetbrains.annotations.NotNull; -public class RelAstGrammarTypeReferenceImplExtension extends RelAstGrammarNamedElementImpl implements RelAstGrammarTypeReferenceExtension { +public class GrammarTypeReferenceImplExtension extends GrammarNamedElementImpl implements GrammarTypeReferenceExtension { - public RelAstGrammarTypeReferenceImplExtension(@NotNull ASTNode node) { + public GrammarTypeReferenceImplExtension(@NotNull ASTNode node) { super(node); } @@ -22,7 +22,7 @@ public class RelAstGrammarTypeReferenceImplExtension extends RelAstGrammarNamedE // FIXME this can break the grammar when the type is used in an unnamed component (and in many other cases probably) ASTNode keyNode = getNode().getFirstChildNode(); if (keyNode != null) { - RelAstGrammarTypeReference name = RelAstGrammarElementFactory.createTypeReference(getProject(), newName); + RelAstGrammarTypeReference name = GrammarElementFactory.createTypeReference(getProject(), newName); ASTNode newKeyNode = name.getNode().getFirstChildNode(); getNode().replaceChild(keyNode, newKeyNode); } diff --git a/src/main/java/org/jastadd/tooling/lexer/RelAstGrammarFlexAdapter.java b/src/main/java/org/jastadd/tooling/lexer/RelAstGrammarFlexAdapter.java deleted file mode 100644 index 305dd614526bd7d8a213541457144a5579291685..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/lexer/RelAstGrammarFlexAdapter.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.jastadd.tooling.lexer; - -import com.intellij.lexer.FlexAdapter; - -public class RelAstGrammarFlexAdapter extends FlexAdapter { - - public RelAstGrammarFlexAdapter() { - super(new RelAstGrammarLexer(null)); - } - -} diff --git a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarElementType.java b/src/main/java/org/jastadd/tooling/parser/RelAstGrammarElementType.java deleted file mode 100644 index f50d18deca1639fbfafdd44d736787e5318e685b..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarElementType.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.jastadd.tooling.parser; - -import com.intellij.psi.tree.IElementType; -import org.jastadd.tooling.RelAstGrammar; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -public class RelAstGrammarElementType extends IElementType { - - public RelAstGrammarElementType(@NotNull @NonNls String debugName) { - super(debugName, RelAstGrammar.INSTANCE); - } - -} diff --git a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarTokenType.java b/src/main/java/org/jastadd/tooling/parser/RelAstGrammarTokenType.java deleted file mode 100644 index dd705f529788cef109b764d82d61c3049e425081..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarTokenType.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.jastadd.tooling.parser; - -import com.intellij.psi.tree.IElementType; -import org.jastadd.tooling.RelAstGrammar; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -public class RelAstGrammarTokenType extends IElementType { - - public RelAstGrammarTokenType(@NotNull @NonNls String debugName) { - super(debugName, RelAstGrammar.INSTANCE); - } - - @Override - public String toString() { - return "RelAstGrammarTokenType." + super.toString(); - } - -} diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarElementFactory.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarElementFactory.java deleted file mode 100644 index df3bef4d1782301d2a97cbe908e2a8adc9f530e6..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarElementFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.jastadd.tooling.psi; - -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiFileFactory; -import org.jastadd.tooling.RelAstGrammarFileType; -import org.jastadd.tooling.parser.RelAstGrammarTypes; - -import java.util.Objects; - -public class RelAstGrammarElementFactory { - - private RelAstGrammarElementFactory() { - throw new IllegalStateException("Utility class"); - } - - public static RelAstGrammarDeclaredName createDeclaredName(Project project, String name) { - final RelAstGrammarFile file = createFile(project, name + ";"); - return (RelAstGrammarDeclaredName) file.getFirstChild().getFirstChild(); - } - - public static RelAstGrammarTypeReference createTypeReference(Project project, String name) { - final RelAstGrammarFile file = createFile(project, "X : " + name + ";"); - return (RelAstGrammarTypeReference) (Objects.requireNonNull(file.getFirstChild().getNode().findChildByType(RelAstGrammarTypes.TYPE_REFERENCE)).getPsi()); - } - - public static RelAstGrammarFile createFile(Project project, String text) { - String name = "dummy.relast"; - return (RelAstGrammarFile) PsiFileFactory.getInstance(project). - createFileFromText(name, RelAstGrammarFileType.INSTANCE, text); - } -} diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarFile.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarFile.java deleted file mode 100644 index 4c1afaec206dcb731e6e9d8c4967002e0468bce7..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarFile.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.jastadd.tooling.psi; - -import com.intellij.extapi.psi.PsiFileBase; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.psi.FileViewProvider; -import org.jastadd.tooling.RelAstGrammar; -import org.jastadd.tooling.RelAstGrammarFileType; -import org.jetbrains.annotations.NotNull; - -public class RelAstGrammarFile extends PsiFileBase { - - public RelAstGrammarFile(@NotNull FileViewProvider viewProvider) { - super(viewProvider, RelAstGrammar.INSTANCE); - } - - @NotNull - @Override - public FileType getFileType() { - return RelAstGrammarFileType.INSTANCE; - } - - @Override - public String toString() { - return "RelAst Grammar File"; - } - -} diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarNamedElement.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarNamedElement.java deleted file mode 100644 index 6a7844cf61085aaea84a0da8f70abc27f940b737..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarNamedElement.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.jastadd.tooling.psi; - -import com.intellij.psi.PsiNameIdentifierOwner; - -public interface RelAstGrammarNamedElement extends PsiNameIdentifierOwner { - -} diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java deleted file mode 100644 index 79837b70315b8c0d8c0913811f5057a5196ea71b..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.jastadd.tooling.psi; - -public interface RelAstGrammarTypeDeclExtension extends RelAstGrammarNamedElement { -} diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java deleted file mode 100644 index a6c95e7553e773c28c39c0d0f764074eaba5ccc2..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.jastadd.tooling.psi; - -public interface RelAstGrammarTypeReferenceExtension extends RelAstGrammarNamedElement { -} diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java deleted file mode 100644 index b51ed4fec649f326781dd67a61489f086485536d..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.jastadd.tooling.psi.impl; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import org.jastadd.tooling.parser.RelAstGrammarTypes; -import org.jastadd.tooling.psi.RelAstGrammarDeclaredName; -import org.jastadd.tooling.psi.RelAstGrammarElementFactory; -import org.jastadd.tooling.psi.RelAstGrammarTypeDeclExtension; -import org.jetbrains.annotations.NotNull; - -public class RelAstGrammarTypeDeclImplExtension extends RelAstGrammarNamedElementImpl implements RelAstGrammarTypeDeclExtension { - - public RelAstGrammarTypeDeclImplExtension(@NotNull ASTNode node) { - super(node); - } - - public String getName() { - // this finds the *first* ID, which is what we want - ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); - if (keyNode != null) { - return keyNode.getText(); - } else { - return null; - } - } - - public PsiElement setName(@NotNull String newName) { - ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); - if (keyNode != null) { - RelAstGrammarDeclaredName name = RelAstGrammarElementFactory.createDeclaredName(getProject(), newName); - ASTNode newKeyNode = name.getNode(); - getNode().replaceChild(keyNode, newKeyNode); - } - return this; - } - - public PsiElement getNameIdentifier() { - ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); - if (keyNode != null) { - return keyNode.getPsi(); - } else { - return null; - } - } - - -} diff --git a/src/main/java/org/jastadd/tooling/JastAddIcons.java b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java similarity index 89% rename from src/main/java/org/jastadd/tooling/JastAddIcons.java rename to src/main/java/org/jastadd/tooling/util/JastAddIcons.java index 011ca9980e71c02eb890798de3fb76077e169ae1..b75c0b6460965082f658c4c5d67ad2527b71c08a 100644 --- a/src/main/java/org/jastadd/tooling/JastAddIcons.java +++ b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java @@ -1,4 +1,4 @@ -package org.jastadd.tooling; +package org.jastadd.tooling.util; import com.intellij.openapi.util.IconLoader; diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 12c50ebef59cedd7b630ef32981b6c08600359a6..284b8d98e67152fd069f5dcbfc144ef1dd759184 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -11,62 +11,62 @@ <extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> - <fileType name="RelAst Grammar" implementationClass="org.jastadd.tooling.RelAstGrammarFileType" + <fileType name="RelAst Grammar" implementationClass="org.jastadd.tooling.grammar.GrammarFileType" fieldName="INSTANCE" language="JastAddGrammar" extensions="relast"/> <lang.parserDefinition language="JastAddGrammar" - implementationClass="org.jastadd.tooling.parser.RelAstGrammarParserDefinition"/> + implementationClass="org.jastadd.tooling.grammar.parser.GrammarParserDefinition"/> <lang.syntaxHighlighterFactory language="JastAddGrammar" - implementationClass="org.jastadd.tooling.RelAstGrammarSyntaxHighlighterFactory"/> + implementationClass="org.jastadd.tooling.grammar.GrammarSyntaxHighlighterFactory"/> - <colorSettingsPage implementation="org.jastadd.tooling.RelAstGrammarColorSettingsPage"/> + <colorSettingsPage implementation="org.jastadd.tooling.grammar.GrammarColorSettingsPage"/> - <annotator language="JAVA" implementationClass="org.jastadd.tooling.RelAstGrammarJavaAnnotator"/> + <annotator language="JAVA" implementationClass="org.jastadd.tooling.grammar.GrammarJavaAnnotator"/> - <annotator language="JastAddGrammar" implementationClass="org.jastadd.tooling.RelAstGrammarAnnotator"/> + <annotator language="JastAddGrammar" implementationClass="org.jastadd.tooling.grammar.GrammarAnnotator"/> <codeInsight.lineMarkerProvider language="JAVA" - implementationClass="org.jastadd.tooling.RelAstGrammarLineMarkerProvider"/> + implementationClass="org.jastadd.tooling.grammar.GrammarLineMarkerProvider"/> <completion.contributor language="JastAddGrammar" - implementationClass="org.jastadd.tooling.RelAstGrammarCompletionContributor"/> + implementationClass="org.jastadd.tooling.grammar.GrammarCompletionContributor"/> - <psi.referenceContributor implementation="org.jastadd.tooling.RelAstGrammarReferenceContributor"/> + <psi.referenceContributor implementation="org.jastadd.tooling.grammar.GrammarReferenceContributor"/> <lang.refactoringSupport language="JastAddGrammar" - implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/> + implementationClass="org.jastadd.tooling.grammar.GrammarRefactoringSupportProvider"/> - <lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" - implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/> + <lang.elementManipulator forClass="org.jastadd.tooling.grammar.psi.RelAstGrammarTypeReference" + implementationClass="org.jastadd.tooling.grammar.psi.GrammarTypeReferenceManipulator"/> <lang.findUsagesProvider language="JastAddGrammar" - implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/> + implementationClass="org.jastadd.tooling.grammar.GrammarFindUsageProvider"/> - <gotoSymbolContributor implementation="org.jastadd.tooling.RelAstGrammarChooseByNameContributor"/> + <gotoSymbolContributor implementation="org.jastadd.tooling.grammar.GrammarChooseByNameContributor"/> <lang.psiStructureViewFactory language="JastAddGrammar" - implementationClass="org.jastadd.tooling.RelAstGrammarStructureViewFactory"/> + implementationClass="org.jastadd.tooling.grammar.GrammarStructureViewFactory"/> <lang.formatter language="JastAddGrammar" - implementationClass="org.jastadd.tooling.RelAstGrammarFormattingModelBuilder"/> + implementationClass="org.jastadd.tooling.grammar.GrammarFormattingModelBuilder"/> - <codeStyleSettingsProvider implementation="org.jastadd.tooling.RelAstGrammarCodeStyleSettingsProvider"/> + <codeStyleSettingsProvider implementation="org.jastadd.tooling.grammar.GrammarCodeStyleSettingsProvider"/> <langCodeStyleSettingsProvider - implementation="org.jastadd.tooling.RelAstGrammarLanguageCodeStyleSettingsProvider"/> + implementation="org.jastadd.tooling.grammar.GrammarLanguageCodeStyleSettingsProvider"/> - <lang.commenter language="JastAddGrammar" implementationClass="org.jastadd.tooling.RelAstGrammarCommenter"/> + <lang.commenter language="JastAddGrammar" implementationClass="org.jastadd.tooling.grammar.GrammarCommenter"/> <!-- Attribute/Aspect Language --> - <fileType name="JastAdd Attribute Aspect" implementationClass="org.jastadd.tooling.aspect.JastAddAttributeFileType" + <fileType name="JastAdd Attribute Aspect" implementationClass="org.jastadd.tooling.aspect.AttributeFileType" fieldName="INSTANCE" language="JastAddAspect" extensions="jrag"/> - <fileType name="JastAdd Aspect" implementationClass="org.jastadd.tooling.aspect.JastAddAspectFileType" + <fileType name="JastAdd Aspect" implementationClass="org.jastadd.tooling.aspect.AspectFileType" fieldName="INSTANCE" language="JastAddAspect" extensions="jadd"/> <lang.parserDefinition language="JastAddAspect" - implementationClass="org.jastadd.tooling.aspect.JastAddAspectParserDefinition"/> + implementationClass="org.jastadd.tooling.aspect.parser.AspectParserDefinition"/> <languageInjector implementation="org.jastadd.tooling.aspect.JavaBlockLanguageInjector"/> </extensions>