diff --git a/simple_language_plugin/.idea/misc.xml b/simple_language_plugin/.idea/misc.xml
deleted file mode 100644
index 5c95974fd..000000000
--- a/simple_language_plugin/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/simple_language_plugin/.idea/modules.xml b/simple_language_plugin/.idea/modules.xml
deleted file mode 100644
index 7dd689510..000000000
--- a/simple_language_plugin/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/simple_language_plugin/.idea/simple_language_plugin.iml b/simple_language_plugin/.idea/simple_language_plugin.iml
deleted file mode 100644
index 3033e705b..000000000
--- a/simple_language_plugin/.idea/simple_language_plugin.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/simple_language_plugin/.idea/workspace.xml b/simple_language_plugin/.idea/workspace.xml
deleted file mode 100644
index 53bd5fa5f..000000000
--- a/simple_language_plugin/.idea/workspace.xml
+++ /dev/null
@@ -1,495 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- DEFINITION_ORDER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1507300015770
-
-
- 1507300015770
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- No facets are configured
-
-
-
-
-
-
-
-
-
-
-
- JFlex & idea-flex.skeleton
-
-
-
-
-
-
-
-
-
-
-
- 1.8
-
-
-
-
-
-
-
-
-
-
-
- simple_language_plugin
-
-
-
-
-
-
-
-
-
-
-
- 1.8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/simple_language_plugin/build.gradle b/simple_language_plugin/build.gradle
new file mode 100644
index 000000000..b48a5b20b
--- /dev/null
+++ b/simple_language_plugin/build.gradle
@@ -0,0 +1,37 @@
+plugins {
+ id 'java'
+ id 'org.jetbrains.intellij' version '0.4.16'
+}
+
+group 'com.intellij.sdk'
+version '2.0.0'
+
+sourceCompatibility = 1.8
+
+repositories {
+ mavenCentral()
+}
+
+test {
+ // This path value is machine-specific placeholder text.
+ // Set idea.home.path to the absolute path to the intellij-community source
+ // on your local machine.
+ systemProperty "idea.home.path", "/Users/jhake/Documents/source/comm"
+}
+
+// Include the generated files in the source set
+sourceSets.main.java.srcDirs 'src/main/gen'
+
+dependencies {
+ testCompile group: 'junit', name: 'junit', version: '4.12'
+}
+
+// See https://github.com/JetBrains/gradle-intellij-plugin/
+intellij {
+ version '2019.3.2'
+ plugins 'java'
+ updateSinceUntilBuild = false
+}
+patchPluginXml {
+ version = project.version
+}
diff --git a/simple_language_plugin/gradle/wrapper/gradle-wrapper.jar b/simple_language_plugin/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 000000000..cc4fdc293
Binary files /dev/null and b/simple_language_plugin/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/simple_language_plugin/gradle/wrapper/gradle-wrapper.properties b/simple_language_plugin/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 000000000..1b16c34a7
--- /dev/null
+++ b/simple_language_plugin/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/simple_language_plugin/gradlew b/simple_language_plugin/gradlew
new file mode 100755
index 000000000..2fe81a7d9
--- /dev/null
+++ b/simple_language_plugin/gradlew
@@ -0,0 +1,183 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/simple_language_plugin/gradlew.bat b/simple_language_plugin/gradlew.bat
new file mode 100644
index 000000000..9618d8d96
--- /dev/null
+++ b/simple_language_plugin/gradlew.bat
@@ -0,0 +1,100 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/simple_language_plugin/resources/META-INF/plugin.xml b/simple_language_plugin/resources/META-INF/plugin.xml
deleted file mode 100644
index 0f41aee5e..000000000
--- a/simple_language_plugin/resources/META-INF/plugin.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
- com.simpleplugin.unique.plugin.id
- Simple Language
- 1.0
- JetBrains
-
- Custom Language Support Tutorial]]>
-
-
-
-
- com.intellij.modules.java
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/simple_language_plugin/settings.gradle b/simple_language_plugin/settings.gradle
new file mode 100644
index 000000000..e10d80539
--- /dev/null
+++ b/simple_language_plugin/settings.gradle
@@ -0,0 +1,2 @@
+rootProject.name = 'simple_language_plugin'
+
diff --git a/simple_language_plugin/simple_language_plugin.iml b/simple_language_plugin/simple_language_plugin.iml
deleted file mode 100644
index e3d6fef16..000000000
--- a/simple_language_plugin/simple_language_plugin.iml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/Simple.bnf b/simple_language_plugin/src/com/simpleplugin/Simple.bnf
deleted file mode 100644
index 6aef4bb6e..000000000
--- a/simple_language_plugin/src/com/simpleplugin/Simple.bnf
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- parserClass="com.simpleplugin.parser.SimpleParser"
-
- extends="com.intellij.extapi.psi.ASTWrapperPsiElement"
-
- psiClassPrefix="Simple"
- psiImplClassSuffix="Impl"
- psiPackage="com.simpleplugin.psi"
- psiImplPackage="com.simpleplugin.psi.impl"
-
- elementTypeHolderClass="com.simpleplugin.psi.SimpleTypes"
- elementTypeClass="com.simpleplugin.psi.SimpleElementType"
- tokenTypeClass="com.simpleplugin.psi.SimpleTokenType"
-
- psiImplUtilClass="com.simpleplugin.psi.impl.SimplePsiImplUtil"
-}
-
-simpleFile ::= (property|COMMENT)*
-
-property ::= (KEY SEPARATOR VALUE?)|KEY {
- pin=3
- recoverWhile="recover_property"
- mixin="com.simpleplugin.psi.impl.SimpleNamedElementImpl"
- implements="com.simpleplugin.psi.SimpleNamedElement"
- methods=[getKey getValue getName setName getNameIdentifier getPresentation]
-}
-
-private recover_property ::= !(KEY|SEPARATOR|COMMENT)
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleAnnotator.java b/simple_language_plugin/src/com/simpleplugin/SimpleAnnotator.java
deleted file mode 100644
index f987e2810..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleAnnotator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.lang.annotation.*;
-import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.*;
-import com.simpleplugin.psi.SimpleProperty;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.List;
-
-public class SimpleAnnotator implements Annotator {
- @Override
- public void annotate(@NotNull final PsiElement element, @NotNull AnnotationHolder holder) {
- if (element instanceof PsiLiteralExpression) {
- PsiLiteralExpression literalExpression = (PsiLiteralExpression) element;
- String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
-
- if (value != null && value.startsWith("simple" + ":")) {
- Project project = element.getProject();
- String key = value.substring(7);
- List properties = SimpleUtil.findProperties(project, key);
- if (properties.size() == 1) {
- TextRange range = new TextRange(element.getTextRange().getStartOffset() + 8,
- element.getTextRange().getEndOffset() - 1);
- Annotation annotation = holder.createInfoAnnotation(range, null);
- annotation.setTextAttributes(DefaultLanguageHighlighterColors.LINE_COMMENT);
- } else if (properties.size() == 0) {
- TextRange range = new TextRange(element.getTextRange().getStartOffset() + 8,
- element.getTextRange().getEndOffset() - 1);
- holder.createErrorAnnotation(range, "Unresolved property");
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleCompletionContributor.java b/simple_language_plugin/src/com/simpleplugin/SimpleCompletionContributor.java
deleted file mode 100644
index e6407a9a9..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleCompletionContributor.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.codeInsight.completion.*;
-import com.intellij.codeInsight.lookup.LookupElementBuilder;
-import com.intellij.patterns.PlatformPatterns;
-import com.intellij.util.ProcessingContext;
-import com.simpleplugin.psi.SimpleTypes;
-import org.jetbrains.annotations.NotNull;
-
-public class SimpleCompletionContributor extends CompletionContributor {
- public SimpleCompletionContributor() {
- extend(CompletionType.BASIC,
- PlatformPatterns.psiElement(SimpleTypes.VALUE).withLanguage(SimpleLanguage.INSTANCE),
- new CompletionProvider() {
- public void addCompletions(@NotNull CompletionParameters parameters,
- ProcessingContext context,
- @NotNull CompletionResultSet resultSet) {
- resultSet.addElement(LookupElementBuilder.create("Hello"));
- }
- }
- );
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleFileTypeFactory.java b/simple_language_plugin/src/com/simpleplugin/SimpleFileTypeFactory.java
deleted file mode 100644
index 9275dc2e3..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleFileTypeFactory.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.openapi.fileTypes.*;
-import org.jetbrains.annotations.NotNull;
-
-public class SimpleFileTypeFactory extends FileTypeFactory {
- @Override
- public void createFileTypes(@NotNull FileTypeConsumer fileTypeConsumer) {
- fileTypeConsumer.consume(SimpleFileType.INSTANCE);
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleFilterLexer.java b/simple_language_plugin/src/com/simpleplugin/SimpleFilterLexer.java
deleted file mode 100644
index 59ee592fd..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleFilterLexer.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.lexer.Lexer;
-import com.intellij.psi.impl.cache.impl.*;
-import com.intellij.psi.search.UsageSearchContext;
-
-public class SimpleFilterLexer extends BaseFilterLexer {
- public SimpleFilterLexer(final Lexer originalLexer, final OccurrenceConsumer table) {
- super(originalLexer, table);
- }
-
- @Override
- public void advance() {
- scanWordsInToken(UsageSearchContext.IN_COMMENTS, false, false);
- advanceTodoItemCountsInToken();
- myDelegate.advance();
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleFoldingBuilder.java b/simple_language_plugin/src/com/simpleplugin/SimpleFoldingBuilder.java
deleted file mode 100644
index 70bf45d93..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleFoldingBuilder.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.lang.ASTNode;
-import com.intellij.lang.folding.*;
-import com.intellij.openapi.editor.*;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.*;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.simpleplugin.psi.SimpleProperty;
-import org.jetbrains.annotations.*;
-
-import java.util.*;
-
-public class SimpleFoldingBuilder extends FoldingBuilderEx {
- @NotNull
- @Override
- public FoldingDescriptor[] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean quick) {
- FoldingGroup group = FoldingGroup.newGroup("simple");
-
- List descriptors = new ArrayList();
- Collection literalExpressions =
- PsiTreeUtil.findChildrenOfType(root, PsiLiteralExpression.class);
- for (final PsiLiteralExpression literalExpression : literalExpressions) {
- String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
-
- if (value != null && value.startsWith("simple:")) {
- Project project = literalExpression.getProject();
- String key = value.substring(7);
- final List properties = SimpleUtil.findProperties(project, key);
- if (properties.size() == 1) {
- descriptors.add(new FoldingDescriptor(literalExpression.getNode(),
- new TextRange(literalExpression.getTextRange().getStartOffset() + 1,
- literalExpression.getTextRange().getEndOffset() - 1),
- group) {
- @Nullable
- @Override
- public String getPlaceholderText() {
- // IMPORTANT: keys can come with no values, so a test for null is needed
- // IMPORTANT: Convert embedded \n to backslash n, so that the string will look like it has LF embedded
- // in it and embedded " to escaped "
- String valueOf = properties.get(0).getValue();
- return valueOf == null ? "" : valueOf.replaceAll("\n", "\\n").replaceAll("\"", "\\\\\"");
- }
- });
- }
- }
- }
- return descriptors.toArray(new FoldingDescriptor[descriptors.size()]);
- }
-
- @Nullable
- @Override
- public String getPlaceholderText(@NotNull ASTNode node) {
- return "...";
- }
-
- @Override
- public boolean isCollapsedByDefault(@NotNull ASTNode node) {
- return true;
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleFormattingModelBuilder.java b/simple_language_plugin/src/com/simpleplugin/SimpleFormattingModelBuilder.java
deleted file mode 100644
index b8e69d1a2..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleFormattingModelBuilder.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.formatting.*;
-import com.intellij.lang.ASTNode;
-import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleSettings;
-import com.simpleplugin.psi.SimpleTypes;
-import org.jetbrains.annotations.*;
-
-public class SimpleFormattingModelBuilder implements FormattingModelBuilder {
- @NotNull
- @Override
- public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) {
- return FormattingModelProvider
- .createFormattingModelForPsiFile(element.getContainingFile(),
- new SimpleBlock(element.getNode(),
- Wrap.createWrap(WrapType.NONE, false),
- Alignment.createAlignment(),
- createSpaceBuilder(settings)),
- settings);
- }
-
- private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) {
- return new SpacingBuilder(settings, SimpleLanguage.INSTANCE)
- .around(SimpleTypes.SEPARATOR)
- .spaceIf(settings.getCommonSettings(SimpleLanguage.INSTANCE.getID()).SPACE_AROUND_ASSIGNMENT_OPERATORS)
- .before(SimpleTypes.PROPERTY)
- .none();
- }
-
- @Nullable
- @Override
- public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) {
- return null;
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleIcons.java b/simple_language_plugin/src/com/simpleplugin/SimpleIcons.java
deleted file mode 100644
index f191c0ce3..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleIcons.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.openapi.util.IconLoader;
-
-import javax.swing.*;
-
-public class SimpleIcons {
- public static final Icon FILE = IconLoader.getIcon("/com/simpleplugin/icons/jar-gray.png");
-}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleIdIndexer.java b/simple_language_plugin/src/com/simpleplugin/SimpleIdIndexer.java
deleted file mode 100644
index 613636ed5..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleIdIndexer.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.lexer.Lexer;
-import com.intellij.psi.impl.cache.impl.OccurrenceConsumer;
-import com.intellij.psi.impl.cache.impl.id.LexerBasedIdIndexer;
-
-public class SimpleIdIndexer extends LexerBasedIdIndexer {
-
- public static Lexer createIndexingLexer(OccurrenceConsumer consumer) {
- return new SimpleFilterLexer(new SimpleLexerAdapter(), consumer);
- }
-
- @Override
- public Lexer createLexer(final OccurrenceConsumer consumer) {
- return createIndexingLexer(consumer);
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleLineMarkerProvider.java b/simple_language_plugin/src/com/simpleplugin/SimpleLineMarkerProvider.java
deleted file mode 100644
index d509b3acc..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleLineMarkerProvider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.codeInsight.daemon.*;
-import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.java.PsiJavaTokenImpl;
-import com.simpleplugin.psi.SimpleProperty;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.*;
-
-public class SimpleLineMarkerProvider extends RelatedItemLineMarkerProvider {
- @Override
- protected void collectNavigationMarkers(@NotNull PsiElement element,
- @NotNull Collection super RelatedItemLineMarkerInfo> result) {
- if (element instanceof PsiJavaTokenImpl && element.getParent() instanceof PsiLiteralExpression) {
- PsiLiteralExpression literalExpression = (PsiLiteralExpression) element.getParent();
- String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
- if (value != null && value.startsWith("simple" + ":")) {
- Project project = element.getProject();
- final List properties = SimpleUtil.findProperties(project, value.substring(7));
- if (properties.size() > 0) {
- NavigationGutterIconBuilder builder =
- NavigationGutterIconBuilder.create(SimpleIcons.FILE).
- setTargets(properties).
- setTooltipText("Navigate to a simple property");
- result.add(builder.createLineMarkerInfo(element));
- }
- }
- }
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleRefactoringSupportProvider.java b/simple_language_plugin/src/com/simpleplugin/SimpleRefactoringSupportProvider.java
deleted file mode 100644
index a538c7c54..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleRefactoringSupportProvider.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.lang.refactoring.RefactoringSupportProvider;
-import com.intellij.psi.PsiElement;
-import com.simpleplugin.psi.SimpleProperty;
-
-public class SimpleRefactoringSupportProvider extends RefactoringSupportProvider {
- @Override
- public boolean isMemberInplaceRenameAvailable(PsiElement element, PsiElement context) {
- return element instanceof SimpleProperty;
- }
-}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleReferenceContributor.java b/simple_language_plugin/src/com/simpleplugin/SimpleReferenceContributor.java
deleted file mode 100644
index 7d234422b..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleReferenceContributor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.openapi.util.TextRange;
-import com.intellij.patterns.PlatformPatterns;
-import com.intellij.psi.*;
-import com.intellij.util.ProcessingContext;
-import org.jetbrains.annotations.NotNull;
-
-public class SimpleReferenceContributor extends PsiReferenceContributor {
- @Override
- public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
- registrar.registerReferenceProvider(PlatformPatterns.psiElement(PsiLiteralExpression.class),
- new PsiReferenceProvider() {
- @NotNull
- @Override
- public PsiReference[] getReferencesByElement(@NotNull PsiElement element,
- @NotNull ProcessingContext
- context) {
- PsiLiteralExpression literalExpression = (PsiLiteralExpression) element;
- String value = literalExpression.getValue() instanceof String ?
- (String) literalExpression.getValue() : null;
- if (value != null && value.startsWith("simple" + ":")) {
- return new PsiReference[]{
- new SimpleReference(element, new TextRange(8, value.length() + 1))};
- }
- return PsiReference.EMPTY_ARRAY;
- }
- });
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleTodoIndexer.java b/simple_language_plugin/src/com/simpleplugin/SimpleTodoIndexer.java
deleted file mode 100644
index bee9bd730..000000000
--- a/simple_language_plugin/src/com/simpleplugin/SimpleTodoIndexer.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.simpleplugin;
-
-import com.intellij.lexer.Lexer;
-import com.intellij.psi.impl.cache.impl.OccurrenceConsumer;
-import com.intellij.psi.impl.cache.impl.todo.LexerBasedTodoIndexer;
-
-public class SimpleTodoIndexer extends LexerBasedTodoIndexer {
- @Override
- public Lexer createLexer(OccurrenceConsumer consumer) {
- return SimpleIdIndexer.createIndexingLexer(consumer);
- }
-}
diff --git a/simple_language_plugin/src/com/simpleplugin/psi/SimpleElementType.java b/simple_language_plugin/src/com/simpleplugin/psi/SimpleElementType.java
deleted file mode 100644
index f1b171a8a..000000000
--- a/simple_language_plugin/src/com/simpleplugin/psi/SimpleElementType.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.simpleplugin.psi;
-
-import com.intellij.psi.tree.IElementType;
-import com.simpleplugin.SimpleLanguage;
-import org.jetbrains.annotations.*;
-
-public class SimpleElementType extends IElementType {
- public SimpleElementType(@NotNull @NonNls String debugName) {
- super(debugName, SimpleLanguage.INSTANCE);
- }
-}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/psi/SimpleNamedElement.java b/simple_language_plugin/src/com/simpleplugin/psi/SimpleNamedElement.java
deleted file mode 100644
index 8c4d9260c..000000000
--- a/simple_language_plugin/src/com/simpleplugin/psi/SimpleNamedElement.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.simpleplugin.psi;
-
-import com.intellij.psi.PsiNameIdentifierOwner;
-
-public interface SimpleNamedElement extends PsiNameIdentifierOwner {
-}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleLexer.java b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/SimpleLexer.java
similarity index 95%
rename from simple_language_plugin/src/com/simpleplugin/SimpleLexer.java
rename to simple_language_plugin/src/main/gen/com/intellij/sdk/language/SimpleLexer.java
index ecb7f5142..d29665ebe 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleLexer.java
+++ b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/SimpleLexer.java
@@ -1,16 +1,16 @@
-/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
+/* The following code was generated by JFlex 1.7.0 tweaked for IntelliJ platform */
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
-import com.simpleplugin.psi.SimpleTypes;
+import com.intellij.sdk.language.psi.SimpleTypes;
import com.intellij.psi.TokenType;
/**
* This class is a scanner generated by
- * JFlex 1.7.0-SNAPSHOT
+ * JFlex 1.7.0
* from the specification file Simple.flex
*/
class SimpleLexer implements FlexLexer {
@@ -284,7 +284,7 @@ class SimpleLexer implements FlexLexer {
/**
* Refills the input buffer.
*
- * @return false
, iff there was new input.
+ * @return {@code false}, iff there was new input.
*
* @exception java.io.IOException if any I/O-Error occurs
*/
@@ -320,7 +320,7 @@ class SimpleLexer implements FlexLexer {
/**
- * Returns the character at position pos from the
+ * Returns the character at position {@code pos} from the
* matched text.
*
* It is equivalent to yytext().charAt(pos), but faster
@@ -344,7 +344,7 @@ class SimpleLexer implements FlexLexer {
/**
- * Reports an error that occured while scanning.
+ * Reports an error that occurred while scanning.
*
* In a wellformed scanner (no or only correct usage of
* yypushback(int) and a match-all fallback rule) this method
@@ -491,31 +491,38 @@ class SimpleLexer implements FlexLexer {
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
case 1:
{ yybegin(YYINITIAL); return SimpleTypes.KEY;
- }
+ }
+ // fall through
case 8: break;
case 2:
{ yybegin(YYINITIAL); return TokenType.WHITE_SPACE;
- }
+ }
+ // fall through
case 9: break;
case 3:
{ return TokenType.BAD_CHARACTER;
- }
+ }
+ // fall through
case 10: break;
case 4:
{ yybegin(YYINITIAL); return SimpleTypes.COMMENT;
- }
+ }
+ // fall through
case 11: break;
case 5:
{ yybegin(WAITING_VALUE); return SimpleTypes.SEPARATOR;
- }
+ }
+ // fall through
case 12: break;
case 6:
{ yybegin(YYINITIAL); return SimpleTypes.VALUE;
- }
+ }
+ // fall through
case 13: break;
case 7:
{ yybegin(WAITING_VALUE); return TokenType.WHITE_SPACE;
- }
+ }
+ // fall through
case 14: break;
default:
zzScanError(ZZ_NO_MATCH);
diff --git a/simple_language_plugin/gen/com/simpleplugin/parser/SimpleParser.java b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/parser/SimpleParser.java
similarity index 75%
rename from simple_language_plugin/gen/com/simpleplugin/parser/SimpleParser.java
rename to simple_language_plugin/src/main/gen/com/intellij/sdk/language/parser/SimpleParser.java
index c4652d819..a70231e85 100644
--- a/simple_language_plugin/gen/com/simpleplugin/parser/SimpleParser.java
+++ b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/parser/SimpleParser.java
@@ -1,9 +1,9 @@
// This is a generated file. Not intended for manual editing.
-package com.simpleplugin.parser;
+package com.intellij.sdk.language.parser;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.PsiBuilder.Marker;
-import static com.simpleplugin.psi.SimpleTypes.*;
+import static com.intellij.sdk.language.psi.SimpleTypes.*;
import static com.intellij.lang.parser.GeneratedParserUtilBase.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.lang.ASTNode;
@@ -23,21 +23,33 @@ public class SimpleParser implements PsiParser, LightPsiParser {
boolean r;
b = adapt_builder_(t, b, this, null);
Marker m = enter_section_(b, 0, _COLLAPSE_, null);
- if (t == PROPERTY) {
- r = property(b, 0);
- }
- else {
- r = parse_root_(t, b, 0);
- }
+ r = parse_root_(t, b);
exit_section_(b, 0, m, t, r, true, TRUE_CONDITION);
}
- protected boolean parse_root_(IElementType t, PsiBuilder b, int l) {
+ protected boolean parse_root_(IElementType t, PsiBuilder b) {
+ return parse_root_(t, b, 0);
+ }
+
+ static boolean parse_root_(IElementType t, PsiBuilder b, int l) {
return simpleFile(b, l + 1);
}
/* ********************************************************** */
- // (KEY SEPARATOR VALUE?)|KEY
+ // property|COMMENT|CRLF
+ static boolean item_(PsiBuilder b, int l) {
+ if (!recursion_guard_(b, l, "item_")) return false;
+ boolean r;
+ Marker m = enter_section_(b);
+ r = property(b, l + 1);
+ if (!r) r = consumeToken(b, COMMENT);
+ if (!r) r = consumeToken(b, CRLF);
+ exit_section_(b, m, null, r);
+ return r;
+ }
+
+ /* ********************************************************** */
+ // (KEY? SEPARATOR VALUE?) | KEY
public static boolean property(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "property")) return false;
boolean r;
@@ -48,17 +60,25 @@ public class SimpleParser implements PsiParser, LightPsiParser {
return r;
}
- // KEY SEPARATOR VALUE?
+ // KEY? SEPARATOR VALUE?
private static boolean property_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "property_0")) return false;
boolean r;
Marker m = enter_section_(b);
- r = consumeTokens(b, 0, KEY, SEPARATOR);
+ r = property_0_0(b, l + 1);
+ r = r && consumeToken(b, SEPARATOR);
r = r && property_0_2(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
+ // KEY?
+ private static boolean property_0_0(PsiBuilder b, int l) {
+ if (!recursion_guard_(b, l, "property_0_0")) return false;
+ consumeToken(b, KEY);
+ return true;
+ }
+
// VALUE?
private static boolean property_0_2(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "property_0_2")) return false;
@@ -81,39 +101,25 @@ public class SimpleParser implements PsiParser, LightPsiParser {
private static boolean recover_property_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "recover_property_0")) return false;
boolean r;
- Marker m = enter_section_(b);
r = consumeToken(b, KEY);
if (!r) r = consumeToken(b, SEPARATOR);
if (!r) r = consumeToken(b, COMMENT);
- exit_section_(b, m, null, r);
return r;
}
/* ********************************************************** */
- // (property|COMMENT)*
+ // item_*
static boolean simpleFile(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "simpleFile")) return false;
- int c = current_position_(b);
while (true) {
- if (!simpleFile_0(b, l + 1)) break;
+ int c = current_position_(b);
+ if (!item_(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "simpleFile", c)) break;
- c = current_position_(b);
}
return true;
}
- // property|COMMENT
- private static boolean simpleFile_0(PsiBuilder b, int l) {
- if (!recursion_guard_(b, l, "simpleFile_0")) return false;
- boolean r;
- Marker m = enter_section_(b);
- r = property(b, l + 1);
- if (!r) r = consumeToken(b, COMMENT);
- exit_section_(b, m, null, r);
- return r;
- }
-
- final static Parser recover_property_parser_ = new Parser() {
+ static final Parser recover_property_parser_ = new Parser() {
public boolean parse(PsiBuilder b, int l) {
return recover_property(b, l + 1);
}
diff --git a/simple_language_plugin/gen/com/simpleplugin/psi/SimpleProperty.java b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleProperty.java
similarity index 91%
rename from simple_language_plugin/gen/com/simpleplugin/psi/SimpleProperty.java
rename to simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleProperty.java
index 2ff5df042..75a0af3b5 100644
--- a/simple_language_plugin/gen/com/simpleplugin/psi/SimpleProperty.java
+++ b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleProperty.java
@@ -1,5 +1,5 @@
// This is a generated file. Not intended for manual editing.
-package com.simpleplugin.psi;
+package com.intellij.sdk.language.psi;
import java.util.List;
import org.jetbrains.annotations.*;
diff --git a/simple_language_plugin/gen/com/simpleplugin/psi/SimpleTypes.java b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleTypes.java
similarity index 81%
rename from simple_language_plugin/gen/com/simpleplugin/psi/SimpleTypes.java
rename to simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleTypes.java
index 4e0333e72..558678ca9 100644
--- a/simple_language_plugin/gen/com/simpleplugin/psi/SimpleTypes.java
+++ b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleTypes.java
@@ -1,16 +1,17 @@
// This is a generated file. Not intended for manual editing.
-package com.simpleplugin.psi;
+package com.intellij.sdk.language.psi;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.PsiElement;
import com.intellij.lang.ASTNode;
-import com.simpleplugin.psi.impl.*;
+import com.intellij.sdk.language.psi.impl.*;
public interface SimpleTypes {
IElementType PROPERTY = new SimpleElementType("PROPERTY");
IElementType COMMENT = new SimpleTokenType("COMMENT");
+ IElementType CRLF = new SimpleTokenType("CRLF");
IElementType KEY = new SimpleTokenType("KEY");
IElementType SEPARATOR = new SimpleTokenType("SEPARATOR");
IElementType VALUE = new SimpleTokenType("VALUE");
@@ -18,7 +19,7 @@ public interface SimpleTypes {
class Factory {
public static PsiElement createElement(ASTNode node) {
IElementType type = node.getElementType();
- if (type == PROPERTY) {
+ if (type == PROPERTY) {
return new SimplePropertyImpl(node);
}
throw new AssertionError("Unknown element type: " + type);
diff --git a/simple_language_plugin/gen/com/simpleplugin/psi/SimpleVisitor.java b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleVisitor.java
similarity index 92%
rename from simple_language_plugin/gen/com/simpleplugin/psi/SimpleVisitor.java
rename to simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleVisitor.java
index 504829968..aeacbe65d 100644
--- a/simple_language_plugin/gen/com/simpleplugin/psi/SimpleVisitor.java
+++ b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/SimpleVisitor.java
@@ -1,5 +1,5 @@
// This is a generated file. Not intended for manual editing.
-package com.simpleplugin.psi;
+package com.intellij.sdk.language.psi;
import org.jetbrains.annotations.*;
import com.intellij.psi.PsiElementVisitor;
diff --git a/simple_language_plugin/gen/com/simpleplugin/psi/impl/SimplePropertyImpl.java b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/impl/SimplePropertyImpl.java
similarity index 82%
rename from simple_language_plugin/gen/com/simpleplugin/psi/impl/SimplePropertyImpl.java
rename to simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/impl/SimplePropertyImpl.java
index 2c23adbf6..e9fc3a070 100644
--- a/simple_language_plugin/gen/com/simpleplugin/psi/impl/SimplePropertyImpl.java
+++ b/simple_language_plugin/src/main/gen/com/intellij/sdk/language/psi/impl/SimplePropertyImpl.java
@@ -1,5 +1,5 @@
// This is a generated file. Not intended for manual editing.
-package com.simpleplugin.psi.impl;
+package com.intellij.sdk.language.psi.impl;
import java.util.List;
import org.jetbrains.annotations.*;
@@ -7,13 +7,13 @@ import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import static com.simpleplugin.psi.SimpleTypes.*;
-import com.simpleplugin.psi.*;
+import static com.intellij.sdk.language.psi.SimpleTypes.*;
+import com.intellij.sdk.language.psi.*;
import com.intellij.navigation.ItemPresentation;
public class SimplePropertyImpl extends SimpleNamedElementImpl implements SimpleProperty {
- public SimplePropertyImpl(ASTNode node) {
+ public SimplePropertyImpl(@NotNull ASTNode node) {
super(node);
}
@@ -26,26 +26,32 @@ public class SimplePropertyImpl extends SimpleNamedElementImpl implements Simple
else super.accept(visitor);
}
+ @Override
public String getKey() {
return SimplePsiImplUtil.getKey(this);
}
+ @Override
public String getValue() {
return SimplePsiImplUtil.getValue(this);
}
+ @Override
public String getName() {
return SimplePsiImplUtil.getName(this);
}
+ @Override
public PsiElement setName(String newName) {
return SimplePsiImplUtil.setName(this, newName);
}
+ @Override
public PsiElement getNameIdentifier() {
return SimplePsiImplUtil.getNameIdentifier(this);
}
+ @Override
public ItemPresentation getPresentation() {
return SimplePsiImplUtil.getPresentation(this);
}
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/Simple.bnf b/simple_language_plugin/src/main/java/com/intellij/sdk/language/Simple.bnf
new file mode 100644
index 000000000..3ae45df60
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/Simple.bnf
@@ -0,0 +1,30 @@
+{
+ parserClass="com.intellij.sdk.language.parser.SimpleParser"
+
+ extends="com.intellij.extapi.psi.ASTWrapperPsiElement"
+
+ psiClassPrefix="Simple"
+ psiImplClassSuffix="Impl"
+ psiPackage="com.intellij.sdk.language.psi"
+ psiImplPackage="com.intellij.sdk.language.psi.impl"
+
+ elementTypeHolderClass="com.intellij.sdk.language.psi.SimpleTypes"
+ elementTypeClass="com.intellij.sdk.language.psi.SimpleElementType"
+ tokenTypeClass="com.intellij.sdk.language.psi.SimpleTokenType"
+
+ psiImplUtilClass="com.intellij.sdk.language.psi.impl.SimplePsiImplUtil"
+}
+
+simpleFile ::= item_*
+
+private item_ ::= (property|COMMENT|CRLF)
+
+property ::= (KEY? SEPARATOR VALUE?) | KEY {
+ pin=3
+ recoverWhile="recover_property"
+ mixin="com.intellij.sdk.language.psi.impl.SimpleNamedElementImpl"
+ implements="com.intellij.sdk.language.psi.SimpleNamedElement"
+ methods=[getKey getValue getName setName getNameIdentifier getPresentation]
+}
+
+private recover_property ::= !(KEY|SEPARATOR|COMMENT)
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/Simple.flex b/simple_language_plugin/src/main/java/com/intellij/sdk/language/Simple.flex
similarity index 94%
rename from simple_language_plugin/src/com/simpleplugin/Simple.flex
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/Simple.flex
index 89f80bc4b..d71c2a4a9 100644
--- a/simple_language_plugin/src/com/simpleplugin/Simple.flex
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/Simple.flex
@@ -1,8 +1,8 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
-import com.simpleplugin.psi.SimpleTypes;
+import com.intellij.sdk.language.psi.SimpleTypes;
import com.intellij.psi.TokenType;
%%
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleAnnotator.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleAnnotator.java
new file mode 100644
index 000000000..caef97733
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleAnnotator.java
@@ -0,0 +1,59 @@
+package com.intellij.sdk.language;
+
+import com.intellij.lang.annotation.*;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.*;
+import com.intellij.sdk.language.psi.SimpleProperty;
+import org.jetbrains.annotations.NotNull;
+import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
+
+import java.util.List;
+
+
+public class SimpleAnnotator implements Annotator {
+ // Define strings for the Simple language prefix - used for annotations, line markers, etc.
+ public static final String SIMPLE_PREFIX_STR = "simple";
+ public static final String SIMPLE_SEPARATOR_STR = ":";
+
+ @Override
+ public void annotate(@NotNull final PsiElement element, @NotNull AnnotationHolder holder) {
+ // Ensure the Psi Element is an expression
+ if (!(element instanceof PsiLiteralExpression)) return;
+
+ // Ensure the Psi element contains a string that starts with the key and separator
+ PsiLiteralExpression literalExpression = (PsiLiteralExpression) element;
+ String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
+ if ((value == null) || !value.startsWith(SIMPLE_PREFIX_STR + SIMPLE_SEPARATOR_STR)) return;
+
+ // Define the text ranges (start is inclusive, end is exclusive)
+ // "simple:key"
+ // 01234567890
+ TextRange prefixRange = TextRange.from(element.getTextRange().getStartOffset(), SIMPLE_PREFIX_STR.length() + 1);
+ TextRange separatorRange = TextRange.from(prefixRange.getEndOffset(), SIMPLE_SEPARATOR_STR.length());
+ TextRange keyRange = new TextRange(separatorRange.getEndOffset(), element.getTextRange().getEndOffset() - 1);
+
+ // Get the list of properties from the Project
+ String possibleProperties = value.substring(SIMPLE_PREFIX_STR.length() + SIMPLE_SEPARATOR_STR.length());
+ Project project = element.getProject();
+ List properties = SimpleUtil.findProperties(project, possibleProperties);
+
+ // Set the annotations using the text ranges.
+ Annotation keyAnnotation = holder.createInfoAnnotation(prefixRange, null);
+ keyAnnotation.setTextAttributes(DefaultLanguageHighlighterColors.KEYWORD);
+ Annotation separatorAnnotation = holder.createInfoAnnotation(separatorRange, null);
+ separatorAnnotation.setTextAttributes(SimpleSyntaxHighlighter.SEPARATOR);
+ if (properties.isEmpty()) {
+ // No well-formed property found following the key-separator
+ Annotation badProperty = holder.createErrorAnnotation(keyRange, "Unresolved property");
+ badProperty.setTextAttributes(SimpleSyntaxHighlighter.BAD_CHARACTER);
+ // ** Tutorial step 18.3 - Add a quick fix for the string containing possible properties
+ badProperty.registerFix(new SimpleCreatePropertyQuickFix(possibleProperties));
+ } else {
+ // Found at least one property
+ Annotation annotation = holder.createInfoAnnotation(keyRange, null);
+ annotation.setTextAttributes(SimpleSyntaxHighlighter.VALUE);
+ }
+ }
+
+}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleBlock.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleBlock.java
similarity index 86%
rename from simple_language_plugin/src/com/simpleplugin/SimpleBlock.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleBlock.java
index 8ea1b008e..1e7b05f7f 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleBlock.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleBlock.java
@@ -1,4 +1,6 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.formatting.*;
import com.intellij.lang.ASTNode;
@@ -12,18 +14,18 @@ import java.util.List;
public class SimpleBlock extends AbstractBlock {
private SpacingBuilder spacingBuilder;
-
+
protected SimpleBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment,
SpacingBuilder spacingBuilder) {
super(node, wrap, alignment);
this.spacingBuilder = spacingBuilder;
}
-
+
@Override
protected List buildChildren() {
List blocks = new ArrayList();
ASTNode child = myNode.getFirstChildNode();
- while (child != null) {
+ while (child != null) {
if (child.getElementType() != TokenType.WHITE_SPACE) {
Block block = new SimpleBlock(child, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(),
spacingBuilder);
@@ -33,18 +35,18 @@ public class SimpleBlock extends AbstractBlock {
}
return blocks;
}
-
+
@Override
public Indent getIndent() {
return Indent.getNoneIndent();
}
-
+
@Nullable
@Override
public Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) {
return spacingBuilder.getSpacing(this, child1, child2);
}
-
+
@Override
public boolean isLeaf() {
return myNode.getFirstChildNode() == null;
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleChooseByNameContributor.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleChooseByNameContributor.java
similarity index 78%
rename from simple_language_plugin/src/com/simpleplugin/SimpleChooseByNameContributor.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleChooseByNameContributor.java
index 99df1310a..e172c0bdd 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleChooseByNameContributor.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleChooseByNameContributor.java
@@ -1,8 +1,10 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.navigation.*;
import com.intellij.openapi.project.Project;
-import com.simpleplugin.psi.SimpleProperty;
+import com.intellij.sdk.language.psi.SimpleProperty;
import org.jetbrains.annotations.NotNull;
import java.util.*;
@@ -20,11 +22,11 @@ public class SimpleChooseByNameContributor implements ChooseByNameContributor {
}
return names.toArray(new String[names.size()]);
}
-
+
@NotNull
@Override
public NavigationItem[] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) {
- // todo include non project items
+ // TODO: include non project items
List properties = SimpleUtil.findProperties(project, name);
return properties.toArray(new NavigationItem[properties.size()]);
}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleCodeStyleSettings.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCodeStyleSettings.java
similarity index 56%
rename from simple_language_plugin/src/com/simpleplugin/SimpleCodeStyleSettings.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCodeStyleSettings.java
index b91130025..35c41c8a8 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleCodeStyleSettings.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCodeStyleSettings.java
@@ -1,4 +1,6 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.psi.codeStyle.*;
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleCodeStyleSettingsProvider.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCodeStyleSettingsProvider.java
similarity index 86%
rename from simple_language_plugin/src/com/simpleplugin/SimpleCodeStyleSettingsProvider.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCodeStyleSettingsProvider.java
index 25e51b990..27823e310 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleCodeStyleSettingsProvider.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCodeStyleSettingsProvider.java
@@ -1,7 +1,8 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.application.options.*;
-import com.intellij.openapi.options.Configurable;
import com.intellij.psi.codeStyle.*;
import org.jetbrains.annotations.*;
@@ -10,13 +11,13 @@ public class SimpleCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
public CustomCodeStyleSettings createCustomSettings(CodeStyleSettings settings) {
return new SimpleCodeStyleSettings(settings);
}
-
+
@Nullable
@Override
public String getConfigurableDisplayName() {
return "Simple";
}
-
+
@NotNull
public CodeStyleConfigurable createConfigurable(@NotNull CodeStyleSettings settings, @NotNull CodeStyleSettings modelSettings) {
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleColorSettingsPage.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleColorSettingsPage.java
similarity index 51%
rename from simple_language_plugin/src/com/simpleplugin/SimpleColorSettingsPage.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleColorSettingsPage.java
index 1f2f26f94..a0ee3f616 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleColorSettingsPage.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleColorSettingsPage.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
@@ -8,60 +8,63 @@ import org.jetbrains.annotations.*;
import javax.swing.*;
import java.util.Map;
+import static com.intellij.sdk.language.SimpleLanguage.*;
+
public class SimpleColorSettingsPage implements ColorSettingsPage {
private static final AttributesDescriptor[] DESCRIPTORS = new AttributesDescriptor[]{
- new AttributesDescriptor("Key", SimpleSyntaxHighlighter.KEY),
- new AttributesDescriptor("Separator", SimpleSyntaxHighlighter.SEPARATOR),
- new AttributesDescriptor("Value", SimpleSyntaxHighlighter.VALUE),
- };
-
+ new AttributesDescriptor("Key", SimpleSyntaxHighlighter.KEY),
+ new AttributesDescriptor("Separator", SimpleSyntaxHighlighter.SEPARATOR),
+ new AttributesDescriptor("Value", SimpleSyntaxHighlighter.VALUE),
+ new AttributesDescriptor("Bad Value", SimpleSyntaxHighlighter.BAD_CHARACTER)
+ };
+
@Nullable
@Override
public Icon getIcon() {
return SimpleIcons.FILE;
}
-
+
@NotNull
@Override
public SyntaxHighlighter getHighlighter() {
return new SimpleSyntaxHighlighter();
}
-
+
@NotNull
@Override
public String getDemoText() {
return "# You are reading the \".properties\" entry.\n" +
- "! The exclamation mark can also mark text as comments.\n" +
- "website = http://en.wikipedia.org/\n" +
- "language = English\n" +
- "# The backslash below tells the application to continue reading\n" +
- "# the value onto the next line.\n" +
- "message = Welcome to \\\n" +
- " Wikipedia!\n" +
- "# Add spaces to the key\n" +
- "key\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n" +
- "# Unicode\n" +
- "tab : \\u0009";
+ "! The exclamation mark can also mark text as comments.\n" +
+ "website = http://en.wikipedia.org/\n" +
+ "language = English\n" +
+ "# The backslash below tells the application to continue reading\n" +
+ "# the value onto the next line.\n" +
+ "message = Welcome to \\\n" +
+ " Wikipedia!\n" +
+ "# Add spaces to the key\n" +
+ "key\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n" +
+ "# Unicode\n" +
+ "tab : \\u0009";
}
-
+
@Nullable
@Override
public Map getAdditionalHighlightingTagToDescriptorMap() {
return null;
}
-
+
@NotNull
@Override
public AttributesDescriptor[] getAttributeDescriptors() {
return DESCRIPTORS;
}
-
+
@NotNull
@Override
public ColorDescriptor[] getColorDescriptors() {
return ColorDescriptor.EMPTY_ARRAY;
}
-
+
@NotNull
@Override
public String getDisplayName() {
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleCommenter.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCommenter.java
similarity index 75%
rename from simple_language_plugin/src/com/simpleplugin/SimpleCommenter.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCommenter.java
index 4c2179547..a8c5be9de 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleCommenter.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCommenter.java
@@ -1,4 +1,6 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.lang.Commenter;
import org.jetbrains.annotations.Nullable;
@@ -9,25 +11,25 @@ public class SimpleCommenter implements Commenter {
public String getLineCommentPrefix() {
return "#";
}
-
+
@Nullable
@Override
public String getBlockCommentPrefix() {
return "";
}
-
+
@Nullable
@Override
public String getBlockCommentSuffix() {
return null;
}
-
+
@Nullable
@Override
public String getCommentedBlockCommentPrefix() {
return null;
}
-
+
@Nullable
@Override
public String getCommentedBlockCommentSuffix() {
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCompletionContributor.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCompletionContributor.java
new file mode 100644
index 000000000..4db1b4182
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCompletionContributor.java
@@ -0,0 +1,25 @@
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
+
+import com.intellij.codeInsight.completion.*;
+import com.intellij.codeInsight.lookup.LookupElementBuilder;
+import com.intellij.patterns.PlatformPatterns;
+import com.intellij.util.ProcessingContext;
+import com.intellij.sdk.language.psi.SimpleTypes;
+import org.jetbrains.annotations.NotNull;
+
+public class SimpleCompletionContributor extends CompletionContributor {
+ public SimpleCompletionContributor() {
+ extend( CompletionType.BASIC,
+ PlatformPatterns.psiElement(SimpleTypes.VALUE).withLanguage(SimpleLanguage.INSTANCE),
+ new CompletionProvider() {
+ public void addCompletions(@NotNull CompletionParameters parameters,
+ ProcessingContext context,
+ @NotNull CompletionResultSet resultSet) {
+ resultSet.addElement(LookupElementBuilder.create("Hello"));
+ }
+ }
+ );
+ }
+}
diff --git a/simple_language_plugin/src/com/simpleplugin/CreatePropertyQuickFix.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCreatePropertyQuickFix.java
similarity index 81%
rename from simple_language_plugin/src/com/simpleplugin/CreatePropertyQuickFix.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCreatePropertyQuickFix.java
index 97da7b3d2..bdb3d0f12 100644
--- a/simple_language_plugin/src/com/simpleplugin/CreatePropertyQuickFix.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleCreatePropertyQuickFix.java
@@ -1,4 +1,6 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
import com.intellij.lang.ASTNode;
@@ -18,51 +20,50 @@ import com.intellij.psi.PsiManager;
import com.intellij.psi.search.FileTypeIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.IncorrectOperationException;
-import com.intellij.util.indexing.FileBasedIndex;
-import com.simpleplugin.psi.SimpleElementFactory;
-import com.simpleplugin.psi.SimpleFile;
-import com.simpleplugin.psi.SimpleProperty;
+import com.intellij.sdk.language.psi.SimpleElementFactory;
+import com.intellij.sdk.language.psi.SimpleFile;
+import com.intellij.sdk.language.psi.SimpleProperty;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
-class CreatePropertyQuickFix extends BaseIntentionAction {
+class SimpleCreatePropertyQuickFix extends BaseIntentionAction {
private String key;
-
- CreatePropertyQuickFix(String key) {
+
+ SimpleCreatePropertyQuickFix(String key) {
this.key = key;
}
-
+
@NotNull
@Override
public String getText() {
return "Create property";
}
-
+
@NotNull
@Override
public String getFamilyName() {
return "Simple properties";
}
-
+
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
return true;
}
-
+
@Override
public void invoke(@NotNull final Project project, final Editor editor, PsiFile file) throws
- IncorrectOperationException {
+ IncorrectOperationException {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
Collection virtualFiles =
- FileTypeIndex.getFiles(SimpleFileType.INSTANCE, GlobalSearchScope.allScope(project) );
+ FileTypeIndex.getFiles(SimpleFileType.INSTANCE, GlobalSearchScope.allScope(project) );
if (virtualFiles.size() == 1) {
createProperty(project, virtualFiles.iterator().next());
} else {
final FileChooserDescriptor descriptor =
- FileChooserDescriptorFactory.createSingleFileDescriptor(SimpleFileType.INSTANCE);
+ FileChooserDescriptorFactory.createSingleFileDescriptor(SimpleFileType.INSTANCE);
descriptor.setRoots(ProjectUtil.guessProjectDir(project));
final VirtualFile file = FileChooser.chooseFile(descriptor, project, null);
if (file != null) {
@@ -72,7 +73,7 @@ class CreatePropertyQuickFix extends BaseIntentionAction {
}
});
}
-
+
private void createProperty(final Project project, final VirtualFile file) {
WriteCommandAction.writeCommandAction(project).run(() -> {
SimpleFile simpleFile = (SimpleFile) PsiManager.getInstance(project).findFile(file);
@@ -88,4 +89,4 @@ class CreatePropertyQuickFix extends BaseIntentionAction {
FileEditorManager.getInstance(project).getSelectedTextEditor().getCaretModel().moveCaretRelatively(2, 0, false, false, false);
});
}
-}
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleFileType.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFileType.java
similarity index 84%
rename from simple_language_plugin/src/com/simpleplugin/SimpleFileType.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFileType.java
index f19f08226..f1564fe64 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleFileType.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFileType.java
@@ -1,7 +1,8 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.openapi.fileTypes.LanguageFileType;
-import org.jetbrains.annotations.*;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.swing.*;
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFileTypeFactory.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFileTypeFactory.java
new file mode 100644
index 000000000..6d823c42c
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFileTypeFactory.java
@@ -0,0 +1,16 @@
+package com.intellij.sdk.language;
+
+import com.intellij.openapi.fileTypes.FileTypeConsumer;
+import com.intellij.openapi.fileTypes.FileTypeFactory;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Note: This class is only used with the fileTypeFactory extension point
+ * for versions of the IntelliJ Platform prior to v2019.2
+ */
+public class SimpleFileTypeFactory extends FileTypeFactory {
+ @Override
+ public void createFileTypes(@NotNull FileTypeConsumer fileTypeConsumer) {
+ fileTypeConsumer.consume(SimpleFileType.INSTANCE);
+ }
+}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleFindUsagesProvider.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFindUsagesProvider.java
similarity index 78%
rename from simple_language_plugin/src/com/simpleplugin/SimpleFindUsagesProvider.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFindUsagesProvider.java
index 903bf125c..aa308a388 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleFindUsagesProvider.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFindUsagesProvider.java
@@ -1,11 +1,14 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.lang.cacheBuilder.*;
import com.intellij.lang.findUsages.FindUsagesProvider;
import com.intellij.psi.*;
import com.intellij.psi.tree.TokenSet;
-import com.simpleplugin.psi.*;
+import com.intellij.sdk.language.psi.*;
import org.jetbrains.annotations.*;
+import static com.intellij.sdk.language.SimpleAnnotator.*;
public class SimpleFindUsagesProvider implements FindUsagesProvider {
@Nullable
@@ -16,18 +19,18 @@ public class SimpleFindUsagesProvider implements FindUsagesProvider {
TokenSet.create(SimpleTypes.COMMENT),
TokenSet.EMPTY);
}
-
+
@Override
public boolean canFindUsagesFor(@NotNull PsiElement psiElement) {
return psiElement instanceof PsiNamedElement;
}
-
+
@Nullable
@Override
public String getHelpId(@NotNull PsiElement psiElement) {
return null;
}
-
+
@NotNull
@Override
public String getType(@NotNull PsiElement element) {
@@ -37,7 +40,7 @@ public class SimpleFindUsagesProvider implements FindUsagesProvider {
return "";
}
}
-
+
@NotNull
@Override
public String getDescriptiveName(@NotNull PsiElement element) {
@@ -47,14 +50,14 @@ public class SimpleFindUsagesProvider implements FindUsagesProvider {
return "";
}
}
-
+
@NotNull
@Override
public String getNodeText(@NotNull PsiElement element, boolean useFullName) {
if (element instanceof SimpleProperty) {
- return ((SimpleProperty) element).getKey() + ":" + ((SimpleProperty) element).getValue();
+ return ((SimpleProperty) element).getKey() + SIMPLE_SEPARATOR_STR + ((SimpleProperty) element).getValue();
} else {
return "";
}
}
-}
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFoldingBuilder.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFoldingBuilder.java
new file mode 100644
index 000000000..f08168d60
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFoldingBuilder.java
@@ -0,0 +1,77 @@
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.lang.folding.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.*;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.sdk.language.psi.SimpleProperty;
+import org.jetbrains.annotations.*;
+
+import static com.intellij.sdk.language.SimpleAnnotator.*;
+
+import java.util.*;
+
+public class SimpleFoldingBuilder extends FoldingBuilderEx implements DumbAware {
+ @NotNull
+ @Override
+ public FoldingDescriptor[] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean quick) {
+ // Initialize the group of folding regions that will expand/collapse together.
+ FoldingGroup group = FoldingGroup.newGroup(SIMPLE_PREFIX_STR);
+ // Initialize the list of folding regions
+ List< FoldingDescriptor > descriptors = new ArrayList< FoldingDescriptor >();
+ // Get a collection of the literal expressions in the document below root
+ Collection< PsiLiteralExpression > literalExpressions =
+ PsiTreeUtil.findChildrenOfType(root, PsiLiteralExpression.class);
+ // Evaluate the collection
+ for ( final PsiLiteralExpression literalExpression : literalExpressions ) {
+ String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
+ if ( value != null && value.startsWith(SIMPLE_PREFIX_STR + SIMPLE_SEPARATOR_STR) ) {
+ Project project = literalExpression.getProject();
+ String key = value.substring(SIMPLE_PREFIX_STR.length() + SIMPLE_SEPARATOR_STR.length());
+ // Get a list of all properties for a given key in the project
+ final List< SimpleProperty > properties = SimpleUtil.findProperties(project, key);
+ if ( properties.size() == 1 ) {
+ // Add a folding descriptor for the literal expression at this node.
+ descriptors.add(new FoldingDescriptor(literalExpression.getNode(),
+ new TextRange(literalExpression.getTextRange().getStartOffset() + 1,
+ literalExpression.getTextRange().getEndOffset() - 1),
+ group) );
+ }
+ }
+ }
+ return descriptors.toArray(new FoldingDescriptor[descriptors.size()]);
+ }
+
+ /**
+ * Gets the Simple Language 'value' string corresponding to the 'key'
+ * @param node Node corresponding to PsiLiteralExpression containing a string in the format
+ * SIMPLE_PREFIX_STR + SIMPLE_SEPARATOR_STR + Key, where Key is
+ * defined by the Simple language file.
+ */
+ @Nullable
+ @Override
+ public String getPlaceholderText(@NotNull ASTNode node) {
+ String retTxt = "...";
+ if ( node.getPsi() instanceof PsiLiteralExpression ) {
+ PsiLiteralExpression nodeElement = (PsiLiteralExpression) node.getPsi();
+ String key = ((String) nodeElement.getValue()).substring(SIMPLE_PREFIX_STR.length() + SIMPLE_SEPARATOR_STR.length());
+ final List< SimpleProperty > properties = SimpleUtil.findProperties(nodeElement.getProject(), key);
+ String place = properties.get(0).getValue();
+ // IMPORTANT: keys can come with no values, so a test for null is needed
+ // IMPORTANT: Convert embedded \n to backslash n, so that the string will look
+ // like it has LF embedded in it and embedded " to escaped "
+ return place == null ? retTxt : place.replaceAll("\n", "\\n").replaceAll("\"", "\\\\\"");
+ }
+ return retTxt;
+ }
+
+ @Override
+ public boolean isCollapsedByDefault(@NotNull ASTNode node) {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFormattingModelBuilder.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFormattingModelBuilder.java
new file mode 100644
index 000000000..31e179678
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleFormattingModelBuilder.java
@@ -0,0 +1,39 @@
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
+
+import com.intellij.formatting.*;
+import com.intellij.lang.ASTNode;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.*;
+import com.intellij.psi.codeStyle.CodeStyleSettings;
+import com.intellij.sdk.language.psi.SimpleTypes;
+import org.jetbrains.annotations.*;
+
+public class SimpleFormattingModelBuilder implements FormattingModelBuilder {
+ @NotNull
+ @Override
+ public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) {
+ return FormattingModelProvider
+ .createFormattingModelForPsiFile(element.getContainingFile(),
+ new SimpleBlock(element.getNode(),
+ Wrap.createWrap(WrapType.NONE, false),
+ Alignment.createAlignment(),
+ createSpaceBuilder(settings)),
+ settings);
+ }
+
+ private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) {
+ return new SpacingBuilder(settings, SimpleLanguage.INSTANCE)
+ .around(SimpleTypes.SEPARATOR)
+ .spaceIf(settings.getCommonSettings(SimpleLanguage.INSTANCE.getID()).SPACE_AROUND_ASSIGNMENT_OPERATORS)
+ .before(SimpleTypes.PROPERTY)
+ .none();
+ }
+
+ @Nullable
+ @Override
+ public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) {
+ return null;
+ }
+}
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleIcons.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleIcons.java
new file mode 100644
index 000000000..f891e06af
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleIcons.java
@@ -0,0 +1,9 @@
+package com.intellij.sdk.language;
+
+import com.intellij.openapi.util.IconLoader;
+
+import javax.swing.*;
+
+public class SimpleIcons {
+ public static final Icon FILE = IconLoader.getIcon("/icons/jar-gray.png");
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleLanguage.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLanguage.java
similarity index 85%
rename from simple_language_plugin/src/com/simpleplugin/SimpleLanguage.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLanguage.java
index 9ac5f23f9..49e3d2eda 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleLanguage.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLanguage.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.lang.Language;
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleLanguageCodeStyleSettingsProvider.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLanguageCodeStyleSettingsProvider.java
similarity index 52%
rename from simple_language_plugin/src/com/simpleplugin/SimpleLanguageCodeStyleSettingsProvider.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLanguageCodeStyleSettingsProvider.java
index c1a91ad5d..974c1e223 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleLanguageCodeStyleSettingsProvider.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLanguageCodeStyleSettingsProvider.java
@@ -1,4 +1,6 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.lang.Language;
import com.intellij.psi.codeStyle.*;
@@ -10,7 +12,7 @@ public class SimpleLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe
public Language getLanguage() {
return SimpleLanguage.INSTANCE;
}
-
+
@Override
public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @NotNull SettingsType settingsType) {
if (settingsType == SettingsType.SPACING_SETTINGS) {
@@ -20,23 +22,21 @@ public class SimpleLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe
consumer.showStandardOptions("KEEP_BLANK_LINES_IN_CODE");
}
}
-
+
@Override
public String getCodeSample(@NotNull SettingsType settingsType) {
return "# You are reading the \".properties\" entry.\n" +
- "! The exclamation mark can also mark text as comments.\n" +
- "website = http://en.wikipedia.org/\n" +
- "\n" +
- "\n" +
- "\n" +
- "language = English\n" +
- "# The backslash below tells the application to continue reading\n" +
- "# the value onto the next line.\n" +
- "message = Welcome to \\\n" +
- " Wikipedia!\n" +
- "# Add spaces to the key\n" +
- "key\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n" +
- "# Unicode\n" +
- "tab : \\u0009";
+ "! The exclamation mark can also mark text as comments.\n" +
+ "website = http://en.wikipedia.org/\n" +
+ "\n" +
+ "language = English\n" +
+ "# The backslash below tells the application to continue reading\n" +
+ "# the value onto the next line.\n" +
+ "message = Welcome to \\\n" +
+ " Wikipedia!\n" +
+ "# Add spaces to the key\n" +
+ "key\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n" +
+ "# Unicode\n" +
+ "tab : \\u0009";
}
}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleLexerAdapter.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLexerAdapter.java
similarity index 85%
rename from simple_language_plugin/src/com/simpleplugin/SimpleLexerAdapter.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLexerAdapter.java
index 40c89a0d5..426ac5226 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleLexerAdapter.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLexerAdapter.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.lexer.FlexAdapter;
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLineMarkerProvider.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLineMarkerProvider.java
new file mode 100644
index 000000000..a70ec514e
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleLineMarkerProvider.java
@@ -0,0 +1,40 @@
+package com.intellij.sdk.language;
+
+import com.intellij.codeInsight.daemon.*;
+import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.source.tree.java.PsiJavaTokenImpl;
+import com.intellij.sdk.language.psi.SimpleProperty;
+import org.jetbrains.annotations.NotNull;
+import static com.intellij.sdk.language.SimpleAnnotator.*;
+
+import java.util.*;
+
+public class SimpleLineMarkerProvider extends RelatedItemLineMarkerProvider {
+ @Override
+ protected void collectNavigationMarkers( @NotNull PsiElement element,
+ @NotNull Collection< ? super RelatedItemLineMarkerInfo > result ) {
+ // This must be an element with a literal expression as a parent
+ if ( !(element instanceof PsiJavaTokenImpl) || !(element.getParent() instanceof PsiLiteralExpression) ) return;
+
+ // The literal expression must start with the Simple language literal expression
+ PsiLiteralExpression literalExpression = (PsiLiteralExpression) element.getParent();
+ String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
+ if ( ( value == null ) || !value.startsWith( SIMPLE_PREFIX_STR + SIMPLE_SEPARATOR_STR ) ) return;
+
+ // Get the Simple language property usage
+ Project project = element.getProject();
+ String possibleProperties = value.substring( SIMPLE_PREFIX_STR.length()+SIMPLE_SEPARATOR_STR.length() );
+ final List< SimpleProperty > properties = SimpleUtil.findProperties( project, possibleProperties );
+ if ( properties.size() > 0 ) {
+ // Add the property to a collection of line marker info
+ NavigationGutterIconBuilder< PsiElement > builder =
+ NavigationGutterIconBuilder.create( SimpleIcons.FILE )
+ .setTargets( properties )
+ .setTooltipText( "Navigate to Simple language property" );
+ result.add( builder.createLineMarkerInfo( element ) );
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleParserDefinition.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleParserDefinition.java
similarity index 89%
rename from simple_language_plugin/src/com/simpleplugin/SimpleParserDefinition.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleParserDefinition.java
index 787b97857..838c1b9fd 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleParserDefinition.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleParserDefinition.java
@@ -1,67 +1,68 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.lang.*;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.tree.*;
-import com.simpleplugin.parser.SimpleParser;
-import com.simpleplugin.psi.*;
+import com.intellij.sdk.language.parser.SimpleParser;
+import com.intellij.sdk.language.psi.*;
import org.jetbrains.annotations.NotNull;
public class SimpleParserDefinition implements ParserDefinition {
public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE);
public static final TokenSet COMMENTS = TokenSet.create(SimpleTypes.COMMENT);
-
+
public static final IFileElementType FILE = new IFileElementType(SimpleLanguage.INSTANCE);
-
+
@NotNull
@Override
public Lexer createLexer(Project project) {
return new SimpleLexerAdapter();
}
-
+
@NotNull
+ @Override
public TokenSet getWhitespaceTokens() {
return WHITE_SPACES;
}
-
+
@NotNull
@Override
public TokenSet getCommentTokens() {
return COMMENTS;
}
-
+
@NotNull
@Override
public TokenSet getStringLiteralElements() {
return TokenSet.EMPTY;
}
-
+
@NotNull
@Override
public PsiParser createParser(final Project project) {
return new SimpleParser();
}
-
+
@Override
public IFileElementType getFileNodeType() {
return FILE;
}
-
+
@Override
public PsiFile createFile(FileViewProvider viewProvider) {
return new SimpleFile(viewProvider);
}
-
+
@Override
public SpaceRequirements spaceExistenceTypeBetweenTokens(ASTNode left, ASTNode right) {
return SpaceRequirements.MAY;
}
-
+
@NotNull
@Override
public PsiElement createElement(ASTNode node) {
return SimpleTypes.Factory.createElement(node);
}
-}
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleRefactoringSupportProvider.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleRefactoringSupportProvider.java
new file mode 100644
index 000000000..f54b4253b
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleRefactoringSupportProvider.java
@@ -0,0 +1,15 @@
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
+
+import com.intellij.lang.refactoring.RefactoringSupportProvider;
+import com.intellij.psi.PsiElement;
+import com.intellij.sdk.language.psi.SimpleProperty;
+import org.jetbrains.annotations.*;
+
+public class SimpleRefactoringSupportProvider extends RefactoringSupportProvider {
+ @Override
+ public boolean isMemberInplaceRenameAvailable(@NotNull PsiElement elementToRename, @Nullable PsiElement context) {
+ return (elementToRename instanceof SimpleProperty);
+ }
+}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleReference.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleReference.java
similarity index 79%
rename from simple_language_plugin/src/com/simpleplugin/SimpleReference.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleReference.java
index 26efe1115..859ddbaf0 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleReference.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleReference.java
@@ -1,22 +1,24 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.codeInsight.lookup.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
-import com.simpleplugin.psi.SimpleProperty;
+import com.intellij.sdk.language.psi.SimpleProperty;
import org.jetbrains.annotations.*;
import java.util.*;
public class SimpleReference extends PsiReferenceBase implements PsiPolyVariantReference {
private String key;
-
+
public SimpleReference(@NotNull PsiElement element, TextRange textRange) {
super(element, textRange);
key = element.getText().substring(textRange.getStartOffset(), textRange.getEndOffset());
}
-
+
@NotNull
@Override
public ResolveResult[] multiResolve(boolean incompleteCode) {
@@ -28,14 +30,14 @@ public class SimpleReference extends PsiReferenceBase implements Psi
}
return results.toArray(new ResolveResult[results.size()]);
}
-
+
@Nullable
@Override
public PsiElement resolve() {
ResolveResult[] resolveResults = multiResolve(false);
return resolveResults.length == 1 ? resolveResults[0].getElement() : null;
}
-
+
@NotNull
@Override
public Object[] getVariants() {
@@ -44,9 +46,9 @@ public class SimpleReference extends PsiReferenceBase implements Psi
List variants = new ArrayList();
for (final SimpleProperty property : properties) {
if (property.getKey() != null && property.getKey().length() > 0) {
- variants.add(LookupElementBuilder.create(property).
- withIcon(SimpleIcons.FILE).
- withTypeText(property.getContainingFile().getName())
+ variants.add(LookupElementBuilder
+ .create(property).withIcon(SimpleIcons.FILE)
+ .withTypeText(property.getContainingFile().getName())
);
}
}
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleReferenceContributor.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleReferenceContributor.java
new file mode 100644
index 000000000..66f11f782
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleReferenceContributor.java
@@ -0,0 +1,34 @@
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
+
+import com.intellij.openapi.util.TextRange;
+import com.intellij.patterns.PlatformPatterns;
+import com.intellij.psi.*;
+import com.intellij.util.ProcessingContext;
+import org.jetbrains.annotations.NotNull;
+
+import static com.intellij.sdk.language.SimpleAnnotator.*;
+
+public class SimpleReferenceContributor extends PsiReferenceContributor {
+ @Override
+ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
+ registrar.registerReferenceProvider(PlatformPatterns.psiElement(PsiLiteralExpression.class),
+ new PsiReferenceProvider() {
+ @NotNull
+ @Override
+ public PsiReference[] getReferencesByElement(@NotNull PsiElement element,
+ @NotNull ProcessingContext context) {
+ PsiLiteralExpression literalExpression = (PsiLiteralExpression) element;
+ String value = literalExpression.getValue() instanceof String ?
+ (String) literalExpression.getValue() : null;
+ if ((value != null && value.startsWith(SIMPLE_PREFIX_STR + SIMPLE_SEPARATOR_STR))) {
+ TextRange property = new TextRange(SIMPLE_PREFIX_STR.length() + SIMPLE_SEPARATOR_STR.length() + 1,
+ value.length() + 1);
+ return new PsiReference[]{new SimpleReference(element, property)};
+ }
+ return PsiReference.EMPTY_ARRAY;
+ }
+ });
+ }
+}
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleStructureViewElement.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewElement.java
similarity index 67%
rename from simple_language_plugin/src/com/simpleplugin/SimpleStructureViewElement.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewElement.java
index 7cd36b05f..2e5efc95f 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleStructureViewElement.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewElement.java
@@ -1,4 +1,6 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.structureView.StructureViewTreeElement;
@@ -7,66 +9,65 @@ 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 com.simpleplugin.psi.SimpleFile;
-import com.simpleplugin.psi.SimpleProperty;
-import com.simpleplugin.psi.impl.SimplePropertyImpl;
+import com.intellij.sdk.language.psi.SimpleFile;
+import com.intellij.sdk.language.psi.SimpleProperty;
+import com.intellij.sdk.language.psi.impl.SimplePropertyImpl;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class SimpleStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
- private NavigatablePsiElement element;
+ private NavigatablePsiElement myElement;
public SimpleStructureViewElement(NavigatablePsiElement element) {
- this.element = element;
+ this.myElement = element;
}
@Override
public Object getValue() {
- return element;
+ return myElement;
}
@Override
public void navigate(boolean requestFocus) {
- element.navigate(requestFocus);
+ myElement.navigate(requestFocus);
}
@Override
public boolean canNavigate() {
- return element.canNavigate();
+ return myElement.canNavigate();
}
@Override
public boolean canNavigateToSource() {
- return element.canNavigateToSource();
+ return myElement.canNavigateToSource();
}
@NotNull
@Override
public String getAlphaSortKey() {
- String name = element.getName();
+ String name = myElement.getName();
return name != null ? name : "";
}
@NotNull
@Override
public ItemPresentation getPresentation() {
- ItemPresentation presentation = element.getPresentation();
+ ItemPresentation presentation = myElement.getPresentation();
return presentation != null ? presentation : new PresentationData();
}
@Override
public TreeElement[] getChildren() {
- if (element instanceof SimpleFile) {
- SimpleProperty[] properties = PsiTreeUtil.getChildrenOfType(element, SimpleProperty.class);
+ if (myElement instanceof SimpleFile) {
+ SimpleProperty[] properties = PsiTreeUtil.getChildrenOfType(myElement, SimpleProperty.class);
List treeElements = new ArrayList(properties.length);
for (SimpleProperty property : properties) {
treeElements.add(new SimpleStructureViewElement((SimplePropertyImpl) property));
}
return treeElements.toArray(new TreeElement[treeElements.size()]);
- } else {
- return EMPTY_ARRAY;
}
+ return EMPTY_ARRAY;
}
}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleStructureViewFactory.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewFactory.java
similarity index 77%
rename from simple_language_plugin/src/com/simpleplugin/SimpleStructureViewFactory.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewFactory.java
index 917c37c26..4ef9a11d9 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleStructureViewFactory.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewFactory.java
@@ -1,4 +1,6 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.ide.structureView.*;
import com.intellij.lang.PsiStructureViewFactory;
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleStructureViewModel.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewModel.java
similarity index 71%
rename from simple_language_plugin/src/com/simpleplugin/SimpleStructureViewModel.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewModel.java
index 203c07789..e7352cf82 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleStructureViewModel.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleStructureViewModel.java
@@ -1,28 +1,30 @@
-package com.simpleplugin;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language;
import com.intellij.ide.structureView.*;
import com.intellij.ide.util.treeView.smartTree.Sorter;
import com.intellij.psi.PsiFile;
-import com.simpleplugin.psi.SimpleFile;
+import com.intellij.sdk.language.psi.SimpleFile;
import org.jetbrains.annotations.NotNull;
public class SimpleStructureViewModel extends StructureViewModelBase implements
- StructureViewModel.ElementInfoProvider {
+ StructureViewModel.ElementInfoProvider {
public SimpleStructureViewModel(PsiFile psiFile) {
super(psiFile, new SimpleStructureViewElement(psiFile));
}
-
+
@NotNull
public Sorter[] getSorters() {
return new Sorter[]{Sorter.ALPHA_SORTER};
}
-
-
+
+
@Override
public boolean isAlwaysShowsPlus(StructureViewTreeElement element) {
return false;
}
-
+
@Override
public boolean isAlwaysLeaf(StructureViewTreeElement element) {
return element instanceof SimpleFile;
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleSyntaxHighlighter.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleSyntaxHighlighter.java
similarity index 77%
rename from simple_language_plugin/src/com/simpleplugin/SimpleSyntaxHighlighter.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleSyntaxHighlighter.java
index f3495b100..44ea221ab 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleSyntaxHighlighter.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleSyntaxHighlighter.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.*;
@@ -6,36 +6,37 @@ 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 com.simpleplugin.psi.SimpleTypes;
+import com.intellij.sdk.language.psi.SimpleTypes;
import org.jetbrains.annotations.NotNull;
import static com.intellij.openapi.editor.colors.TextAttributesKey.createTextAttributesKey;
public class SimpleSyntaxHighlighter extends SyntaxHighlighterBase {
public static final TextAttributesKey SEPARATOR =
- createTextAttributesKey("SIMPLE_SEPARATOR", DefaultLanguageHighlighterColors.OPERATION_SIGN);
+ createTextAttributesKey("SIMPLE_SEPARATOR", DefaultLanguageHighlighterColors.OPERATION_SIGN);
public static final TextAttributesKey KEY =
- createTextAttributesKey("SIMPLE_KEY", DefaultLanguageHighlighterColors.KEYWORD);
+ createTextAttributesKey("SIMPLE_KEY", DefaultLanguageHighlighterColors.KEYWORD);
public static final TextAttributesKey VALUE =
- createTextAttributesKey("SIMPLE_VALUE", DefaultLanguageHighlighterColors.STRING);
+ createTextAttributesKey("SIMPLE_VALUE", DefaultLanguageHighlighterColors.STRING);
public static final TextAttributesKey COMMENT =
- createTextAttributesKey("SIMPLE_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT);
+ createTextAttributesKey("SIMPLE_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT);
public static final TextAttributesKey BAD_CHARACTER =
- createTextAttributesKey("SIMPLE_BAD_CHARACTER", HighlighterColors.BAD_CHARACTER);
-
+ createTextAttributesKey("SIMPLE_BAD_CHARACTER", HighlighterColors.BAD_CHARACTER);
+
+
private static final TextAttributesKey[] BAD_CHAR_KEYS = new TextAttributesKey[]{BAD_CHARACTER};
private static final TextAttributesKey[] SEPARATOR_KEYS = new TextAttributesKey[]{SEPARATOR};
private static final TextAttributesKey[] KEY_KEYS = new TextAttributesKey[]{KEY};
private static final TextAttributesKey[] VALUE_KEYS = new TextAttributesKey[]{VALUE};
private static final TextAttributesKey[] COMMENT_KEYS = new TextAttributesKey[]{COMMENT};
private static final TextAttributesKey[] EMPTY_KEYS = new TextAttributesKey[0];
-
+
@NotNull
@Override
public Lexer getHighlightingLexer() {
return new SimpleLexerAdapter();
}
-
+
@NotNull
@Override
public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleSyntaxHighlighterFactory.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleSyntaxHighlighterFactory.java
similarity index 92%
rename from simple_language_plugin/src/com/simpleplugin/SimpleSyntaxHighlighterFactory.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleSyntaxHighlighterFactory.java
index d02428b25..d8fd3732b 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleSyntaxHighlighterFactory.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleSyntaxHighlighterFactory.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.openapi.fileTypes.*;
import com.intellij.openapi.project.Project;
diff --git a/simple_language_plugin/src/com/simpleplugin/SimpleUtil.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleUtil.java
similarity index 81%
rename from simple_language_plugin/src/com/simpleplugin/SimpleUtil.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleUtil.java
index dbc4fee6b..4666fa6b3 100644
--- a/simple_language_plugin/src/com/simpleplugin/SimpleUtil.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/SimpleUtil.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
@@ -6,15 +6,17 @@ import com.intellij.psi.PsiManager;
import com.intellij.psi.search.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.indexing.FileBasedIndex;
-import com.simpleplugin.psi.*;
+import com.intellij.sdk.language.psi.*;
import java.util.*;
public class SimpleUtil {
+
+ // Searches the entire project for Simple language files with instances of the Simple property with the given key
public static List findProperties(Project project, String key) {
List result = null;
Collection virtualFiles =
- FileTypeIndex.getFiles(SimpleFileType.INSTANCE, GlobalSearchScope.allScope(project));
+ FileTypeIndex.getFiles(SimpleFileType.INSTANCE, GlobalSearchScope.allScope(project));
for (VirtualFile virtualFile : virtualFiles) {
SimpleFile simpleFile = (SimpleFile) PsiManager.getInstance(project).findFile(virtualFile);
if (simpleFile != null) {
@@ -33,11 +35,11 @@ public class SimpleUtil {
}
return result != null ? result : Collections.emptyList();
}
-
+
public static List findProperties(Project project) {
List result = new ArrayList();
Collection virtualFiles =
- FileTypeIndex.getFiles(SimpleFileType.INSTANCE, GlobalSearchScope.allScope(project));
+ FileTypeIndex.getFiles(SimpleFileType.INSTANCE, GlobalSearchScope.allScope(project));
for (VirtualFile virtualFile : virtualFiles) {
SimpleFile simpleFile = (SimpleFile) PsiManager.getInstance(project).findFile(virtualFile);
if (simpleFile != null) {
diff --git a/simple_language_plugin/src/com/simpleplugin/psi/SimpleElementFactory.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleElementFactory.java
similarity index 68%
rename from simple_language_plugin/src/com/simpleplugin/psi/SimpleElementFactory.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleElementFactory.java
index b1342259f..5789a7f1e 100644
--- a/simple_language_plugin/src/com/simpleplugin/psi/SimpleElementFactory.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleElementFactory.java
@@ -1,28 +1,29 @@
-package com.simpleplugin.psi;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language.psi;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
-import com.simpleplugin.SimpleFileType;
+import com.intellij.sdk.language.SimpleFileType;
public class SimpleElementFactory {
- public static SimpleProperty createProperty(Project project, String name, String value) {
- final SimpleFile file = createFile(project, name + " = " + value);
- return (SimpleProperty) file.getFirstChild();
- }
-
public static SimpleProperty createProperty(Project project, String name) {
final SimpleFile file = createFile(project, name);
return (SimpleProperty) file.getFirstChild();
}
-
+
+ public static SimpleProperty createProperty(Project project, String name, String value) {
+ final SimpleFile file = createFile(project, name + " = " + value);
+ return (SimpleProperty) file.getFirstChild();
+ }
+
public static PsiElement createCRLF(Project project) {
final SimpleFile file = createFile(project, "\n");
return file.getFirstChild();
}
-
+
public static SimpleFile createFile(Project project, String text) {
String name = "dummy.simple";
- return (SimpleFile) PsiFileFactory.getInstance(project).
- createFileFromText(name, SimpleFileType.INSTANCE, text);
+ return (SimpleFile) PsiFileFactory.getInstance( project).createFileFromText(name, SimpleFileType.INSTANCE, text);
}
}
\ No newline at end of file
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleElementType.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleElementType.java
new file mode 100644
index 000000000..cbc6b76d8
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleElementType.java
@@ -0,0 +1,12 @@
+package com.intellij.sdk.language.psi;
+
+import com.intellij.psi.tree.IElementType;
+import com.intellij.sdk.language.SimpleLanguage;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class SimpleElementType extends IElementType {
+ public SimpleElementType( @NotNull @NonNls String debugName) {
+ super(debugName, SimpleLanguage.INSTANCE);
+ }
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/psi/SimpleFile.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleFile.java
similarity index 78%
rename from simple_language_plugin/src/com/simpleplugin/psi/SimpleFile.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleFile.java
index 076172051..95cf389c3 100644
--- a/simple_language_plugin/src/com/simpleplugin/psi/SimpleFile.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleFile.java
@@ -1,9 +1,9 @@
-package com.simpleplugin.psi;
+package com.intellij.sdk.language.psi;
import com.intellij.extapi.psi.PsiFileBase;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.psi.FileViewProvider;
-import com.simpleplugin.*;
+import com.intellij.sdk.language.*;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -12,20 +12,15 @@ public class SimpleFile extends PsiFileBase {
public SimpleFile(@NotNull FileViewProvider viewProvider) {
super(viewProvider, SimpleLanguage.INSTANCE);
}
-
+
@NotNull
@Override
public FileType getFileType() {
return SimpleFileType.INSTANCE;
}
-
+
@Override
public String toString() {
return "Simple File";
}
-
- @Override
- public Icon getIcon(int flags) {
- return super.getIcon(flags);
- }
}
\ No newline at end of file
diff --git a/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleNamedElement.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleNamedElement.java
new file mode 100644
index 000000000..0cb18830a
--- /dev/null
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleNamedElement.java
@@ -0,0 +1,8 @@
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language.psi;
+
+import com.intellij.psi.PsiNameIdentifierOwner;
+
+public interface SimpleNamedElement extends PsiNameIdentifierOwner {
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/com/simpleplugin/psi/SimpleTokenType.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleTokenType.java
similarity index 78%
rename from simple_language_plugin/src/com/simpleplugin/psi/SimpleTokenType.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleTokenType.java
index b2227e8f6..3300afdc0 100644
--- a/simple_language_plugin/src/com/simpleplugin/psi/SimpleTokenType.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/SimpleTokenType.java
@@ -1,16 +1,16 @@
-package com.simpleplugin.psi;
+package com.intellij.sdk.language.psi;
import com.intellij.psi.tree.IElementType;
-import com.simpleplugin.SimpleLanguage;
+import com.intellij.sdk.language.SimpleLanguage;
import org.jetbrains.annotations.*;
public class SimpleTokenType extends IElementType {
public SimpleTokenType(@NotNull @NonNls String debugName) {
super(debugName, SimpleLanguage.INSTANCE);
}
-
+
@Override
public String toString() {
return "SimpleTokenType." + super.toString();
}
-}
\ No newline at end of file
+}
diff --git a/simple_language_plugin/src/com/simpleplugin/psi/impl/SimpleNamedElementImpl.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/impl/SimpleNamedElementImpl.java
similarity index 56%
rename from simple_language_plugin/src/com/simpleplugin/psi/impl/SimpleNamedElementImpl.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/impl/SimpleNamedElementImpl.java
index e727d873d..367dd8f99 100644
--- a/simple_language_plugin/src/com/simpleplugin/psi/impl/SimpleNamedElementImpl.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/impl/SimpleNamedElementImpl.java
@@ -1,8 +1,10 @@
-package com.simpleplugin.psi.impl;
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package com.intellij.sdk.language.psi.impl;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
-import com.simpleplugin.psi.SimpleNamedElement;
+import com.intellij.sdk.language.psi.SimpleNamedElement;
import org.jetbrains.annotations.NotNull;
public abstract class SimpleNamedElementImpl extends ASTWrapperPsiElement implements SimpleNamedElement {
diff --git a/simple_language_plugin/src/com/simpleplugin/psi/impl/SimplePsiImplUtil.java b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/impl/SimplePsiImplUtil.java
similarity index 81%
rename from simple_language_plugin/src/com/simpleplugin/psi/impl/SimplePsiImplUtil.java
rename to simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/impl/SimplePsiImplUtil.java
index 044228a65..25ccc748c 100644
--- a/simple_language_plugin/src/com/simpleplugin/psi/impl/SimplePsiImplUtil.java
+++ b/simple_language_plugin/src/main/java/com/intellij/sdk/language/psi/impl/SimplePsiImplUtil.java
@@ -1,10 +1,11 @@
-package com.simpleplugin.psi.impl;
+package com.intellij.sdk.language.psi.impl;
import com.intellij.lang.ASTNode;
import com.intellij.navigation.ItemPresentation;
-import com.intellij.psi.*;
-import com.simpleplugin.SimpleIcons;
-import com.simpleplugin.psi.*;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.sdk.language.SimpleIcons;
+import com.intellij.sdk.language.psi.*;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -19,7 +20,7 @@ public class SimplePsiImplUtil {
return null;
}
}
-
+
public static String getValue(SimpleProperty element) {
ASTNode valueNode = element.getNode().findChildByType(SimpleTypes.VALUE);
if (valueNode != null) {
@@ -28,11 +29,11 @@ public class SimplePsiImplUtil {
return null;
}
}
-
+
public static String getName(SimpleProperty element) {
return getKey(element);
}
-
+
public static PsiElement setName(SimpleProperty element, String newName) {
ASTNode keyNode = element.getNode().findChildByType(SimpleTypes.KEY);
if (keyNode != null) {
@@ -42,8 +43,8 @@ public class SimplePsiImplUtil {
}
return element;
}
-
- public static PsiElement getNameIdentifier(SimpleProperty element) {
+
+ public static PsiElement getNameIdentifier( SimpleProperty element) {
ASTNode keyNode = element.getNode().findChildByType(SimpleTypes.KEY);
if (keyNode != null) {
return keyNode.getPsi();
@@ -51,27 +52,28 @@ public class SimplePsiImplUtil {
return null;
}
}
-
- public static ItemPresentation getPresentation(final SimpleProperty element) {
+
+ public static ItemPresentation getPresentation( final SimpleProperty element) {
return new ItemPresentation() {
@Nullable
@Override
public String getPresentableText() {
return element.getKey();
}
-
+
@Nullable
@Override
public String getLocationString() {
PsiFile containingFile = element.getContainingFile();
return containingFile == null ? null : containingFile.getName();
}
-
+
@Nullable
@Override
- public Icon getIcon(boolean unused) {
+ public Icon getIcon( boolean unused) {
return SimpleIcons.FILE;
}
};
}
-}
+
+}
\ No newline at end of file
diff --git a/simple_language_plugin/src/main/resources/META-INF/plugin.xml b/simple_language_plugin/src/main/resources/META-INF/plugin.xml
new file mode 100644
index 000000000..f09d17ce4
--- /dev/null
+++ b/simple_language_plugin/src/main/resources/META-INF/plugin.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+ com.intellij.sdk.simple_language
+
+
+ SDK: Simple Language Sample Project
+
+
+ 2.0.0
+
+
+
+
+
+ com.intellij.modules.platform
+ com.intellij.modules.java
+
+
+
+ Defines a new language, Simple language with support for syntax highlighting, annotations, code completion, and other features.
+
See the Custom Language Tutorial for more information.
+ ]]>
+
+
+
+ 2.0.0 Convert to Gradle-based plugin.
+ 1.0.0 Release 2018.3 and earlier.
+
+ ]]>
+
+
+
+ IntelliJ Platform SDK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/simple_language_plugin/src/main/resources/META-INF/pluginIcon.svg b/simple_language_plugin/src/main/resources/META-INF/pluginIcon.svg
new file mode 100644
index 000000000..613290897
--- /dev/null
+++ b/simple_language_plugin/src/main/resources/META-INF/pluginIcon.svg
@@ -0,0 +1,58 @@
+
diff --git a/simple_language_plugin/src/com/simpleplugin/icons/jar-gray.png b/simple_language_plugin/src/main/resources/icons/jar-gray.png
similarity index 100%
rename from simple_language_plugin/src/com/simpleplugin/icons/jar-gray.png
rename to simple_language_plugin/src/main/resources/icons/jar-gray.png
diff --git a/simple_language_plugin/tests/com/simpleplugin/SimpleCodeInsightTest.java b/simple_language_plugin/src/test/java/com/intellij/sdk/language/SimpleCodeInsightTest.java
similarity index 87%
rename from simple_language_plugin/tests/com/simpleplugin/SimpleCodeInsightTest.java
rename to simple_language_plugin/src/test/java/com/intellij/sdk/language/SimpleCodeInsightTest.java
index f8059d075..bcfd58774 100644
--- a/simple_language_plugin/tests/com/simpleplugin/SimpleCodeInsightTest.java
+++ b/simple_language_plugin/src/test/java/com/intellij/sdk/language/SimpleCodeInsightTest.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.application.options.CodeStyle;
import com.intellij.codeInsight.completion.CompletionType;
@@ -6,23 +6,25 @@ import com.intellij.codeInsight.generation.actions.CommentByLineCommentAction;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.psi.PsiElement;
import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
+import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.containers.ContainerUtil;
-import com.simpleplugin.psi.SimpleProperty;
+import com.intellij.sdk.language.psi.SimpleProperty;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
-public class SimpleCodeInsightTest extends LightCodeInsightFixtureTestCase {
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- }
+public class SimpleCodeInsightTest extends LightJavaCodeInsightFixtureTestCase {
+ /**
+ *
+ * @return path to test data file directory relative to working directory in the run configuration for this test.
+ */
@Override
- protected String getTestDataPath() { return "testData"; }
+ protected String getTestDataPath() {
+ return "src/test/resources";
+ }
public void testCompletion() {
myFixture.configureByFiles("CompleteTestData.java", "DefaultTestData.simple");
diff --git a/simple_language_plugin/tests/com/simpleplugin/SimpleParsingTest.java b/simple_language_plugin/src/test/java/com/intellij/sdk/language/SimpleParsingTest.java
similarity index 73%
rename from simple_language_plugin/tests/com/simpleplugin/SimpleParsingTest.java
rename to simple_language_plugin/src/test/java/com/intellij/sdk/language/SimpleParsingTest.java
index 41f3a0142..b0a96d281 100644
--- a/simple_language_plugin/tests/com/simpleplugin/SimpleParsingTest.java
+++ b/simple_language_plugin/src/test/java/com/intellij/sdk/language/SimpleParsingTest.java
@@ -1,4 +1,4 @@
-package com.simpleplugin;
+package com.intellij.sdk.language;
import com.intellij.testFramework.ParsingTestCase;
@@ -10,10 +10,14 @@ public class SimpleParsingTest extends ParsingTestCase {
public void testParsingTestData() {
doTest(true);
}
-
+
+ /**
+ *
+ * @return path to test data file directory relative to root of this module.
+ */
@Override
protected String getTestDataPath() {
- return "testData";
+ return "src/test/resources";
}
@Override
diff --git a/simple_language_plugin/testData/AnnotatorTestData.java b/simple_language_plugin/src/test/resources/AnnotatorTestData.java
similarity index 91%
rename from simple_language_plugin/testData/AnnotatorTestData.java
rename to simple_language_plugin/src/test/resources/AnnotatorTestData.java
index 8bcbf8db3..eae0b79de 100644
--- a/simple_language_plugin/testData/AnnotatorTestData.java
+++ b/simple_language_plugin/src/test/resources/AnnotatorTestData.java
@@ -2,6 +2,6 @@ public class Test {
public static void main(String[] args) {
System.out.println("simple:website");
System.out.println("simple:key with spaces");
- System.out.println("simple:websit");
+ System.out.println("simple:websit");
}
}
diff --git a/simple_language_plugin/testData/CompleteTestData.java b/simple_language_plugin/src/test/resources/CompleteTestData.java
similarity index 100%
rename from simple_language_plugin/testData/CompleteTestData.java
rename to simple_language_plugin/src/test/resources/CompleteTestData.java
diff --git a/simple_language_plugin/testData/DefaultTestData.simple b/simple_language_plugin/src/test/resources/DefaultTestData.simple
similarity index 100%
rename from simple_language_plugin/testData/DefaultTestData.simple
rename to simple_language_plugin/src/test/resources/DefaultTestData.simple
diff --git a/simple_language_plugin/testData/FindUsagesTestData.java b/simple_language_plugin/src/test/resources/FindUsagesTestData.java
similarity index 100%
rename from simple_language_plugin/testData/FindUsagesTestData.java
rename to simple_language_plugin/src/test/resources/FindUsagesTestData.java
diff --git a/simple_language_plugin/testData/FindUsagesTestData.simple b/simple_language_plugin/src/test/resources/FindUsagesTestData.simple
similarity index 100%
rename from simple_language_plugin/testData/FindUsagesTestData.simple
rename to simple_language_plugin/src/test/resources/FindUsagesTestData.simple
diff --git a/simple_language_plugin/testData/FoldingTestData.java b/simple_language_plugin/src/test/resources/FoldingTestData.java
similarity index 100%
rename from simple_language_plugin/testData/FoldingTestData.java
rename to simple_language_plugin/src/test/resources/FoldingTestData.java
diff --git a/simple_language_plugin/testData/FormatterTestData.simple b/simple_language_plugin/src/test/resources/FormatterTestData.simple
similarity index 100%
rename from simple_language_plugin/testData/FormatterTestData.simple
rename to simple_language_plugin/src/test/resources/FormatterTestData.simple
diff --git a/simple_language_plugin/testData/ParsingTestData.simple b/simple_language_plugin/src/test/resources/ParsingTestData.simple
similarity index 100%
rename from simple_language_plugin/testData/ParsingTestData.simple
rename to simple_language_plugin/src/test/resources/ParsingTestData.simple
diff --git a/simple_language_plugin/testData/ParsingTestData.txt b/simple_language_plugin/src/test/resources/ParsingTestData.txt
similarity index 100%
rename from simple_language_plugin/testData/ParsingTestData.txt
rename to simple_language_plugin/src/test/resources/ParsingTestData.txt
diff --git a/simple_language_plugin/testData/ReferenceTestData.java b/simple_language_plugin/src/test/resources/ReferenceTestData.java
similarity index 100%
rename from simple_language_plugin/testData/ReferenceTestData.java
rename to simple_language_plugin/src/test/resources/ReferenceTestData.java
diff --git a/simple_language_plugin/testData/RenameTestData.java b/simple_language_plugin/src/test/resources/RenameTestData.java
similarity index 100%
rename from simple_language_plugin/testData/RenameTestData.java
rename to simple_language_plugin/src/test/resources/RenameTestData.java
diff --git a/simple_language_plugin/testData/RenameTestData.simple b/simple_language_plugin/src/test/resources/RenameTestData.simple
similarity index 100%
rename from simple_language_plugin/testData/RenameTestData.simple
rename to simple_language_plugin/src/test/resources/RenameTestData.simple
diff --git a/simple_language_plugin/testData/RenameTestDataAfter.simple b/simple_language_plugin/src/test/resources/RenameTestDataAfter.simple
similarity index 100%
rename from simple_language_plugin/testData/RenameTestDataAfter.simple
rename to simple_language_plugin/src/test/resources/RenameTestDataAfter.simple