From fa3ec7660dc98307035d2146e742baf50d6d5a09 Mon Sep 17 00:00:00 2001 From: luozhenyu Date: Fri, 15 Apr 2022 16:10:02 +0800 Subject: [PATCH] Support IntelliJ 2022.1 * Support IntelliJ 2022.1 * Upgrade to Gradle 7.4.2 * Upgrade intellij plugin to 1.5.3 * Remove all usages of deprecated API * README: Java 11 is required to build from source * Backwards compatibility since 2021.2 --- README.md | 6 +- build.gradle | 15 +- gradle.properties | 7 +- gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 +++++++++++------- gradlew.bat | 21 +- jps-plugin/build.gradle | 2 +- .../ThriftFacetConfigurationSerializer.java | 4 - .../jps/ThriftProjectExtensionSerializer.java | 5 - thrift/build.gradle | 4 +- .../plugins/thrift/GeneratorIcons.java | 11 +- .../plugins/thrift/ThriftFileTypeLoader.java | 15 - .../config/ThriftCompilerConfigurable.java | 12 +- .../plugins/thrift/config/ThriftPlugin.java | 2 +- .../facet/ThriftFacetSupportProvider.java | 7 +- .../plugins/thrift/util/ThriftPsiUtil.java | 9 +- thrift/src/main/java/icons/ThriftIcons.java | 16 +- thrift/src/main/resources/META-INF/plugin.xml | 8 +- .../ThriftCodeInsightFixtureTestCase.java | 4 +- .../inspections/ThriftInspectionTestBase.java | 5 +- 21 files changed, 206 insertions(+), 206 deletions(-) delete mode 100644 thrift/src/main/java/com/intellij/plugins/thrift/ThriftFileTypeLoader.java diff --git a/README.md b/README.md index 1779809a..e126da07 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,15 @@ Plugin to support Thrift language in IntelliJ How to build =============== -```bahs +[JDK 11 or later](https://adoptium.net/) is required to build from source. + +```bash ./gradlew :thrift:buildPlugin ``` How to run locally with new changes =============== -```bahs +```bash ./gradlew :thrift:runIde ``` diff --git a/build.gradle b/build.gradle index 72e4de18..d8810d81 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id "org.jetbrains.intellij" version "0.6.5" + id "org.jetbrains.intellij" version "1.5.3" apply false } subprojects { @@ -8,7 +8,6 @@ subprojects { repositories { mavenLocal() - jcenter() mavenCentral() maven { setUrl("https://repo.gradle.org/gradle/repo") } maven { setUrl("https://maven.google.com/") } @@ -16,10 +15,14 @@ subprojects { apply plugin: 'org.jetbrains.intellij' intellij { - version project.property("ideaVersion") - plugins = ['copyright', 'java', 'org.intellij.scala:2021.3.14'] - downloadSources Boolean.valueOf(sources) - sameSinceUntilBuild Boolean.valueOf(isEAP) + version = project.property('ideaVersion') + plugins = ['copyright', 'java', 'org.intellij.scala:2022.1.13'] + downloadSources = Boolean.valueOf(project.property('sources') as String) + sameSinceUntilBuild = Boolean.valueOf(project.property('isEAP') as String) + } + + tasks.named('patchPluginXml') { + sinceBuild = project.property('ideaSinceVersion') } test { diff --git a/gradle.properties b/gradle.properties index f84890ff..1796b412 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,7 @@ -ideaVersion = 2021.3 -sources = true -isEAP = false +ideaVersion=2022.1 +ideaSinceVersion=212.4746.92 +sources=true +isEAP=false org.gradle.daemon=true org.gradle.caching=true diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c053550b91381bbd28b1afc82d634bf73a8a..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 20829 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
;BmaEf^h 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${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" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # 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 - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 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" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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 @@ -106,80 +140,95 @@ 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 +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac 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 +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # 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 +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # 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\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg 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; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# 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" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 5093609d..107acd32 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ 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 @@ -86,7 +71,7 @@ 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% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/jps-plugin/build.gradle b/jps-plugin/build.gradle index 5705b8e5..2c6abe3b 100644 --- a/jps-plugin/build.gradle +++ b/jps-plugin/build.gradle @@ -1,4 +1,4 @@ -jar.archiveName = "thrift-jps.jar" +jar.archiveFileName = "thrift-jps.jar" java { sourceCompatibility = JavaVersion.VERSION_1_8 diff --git a/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftFacetConfigurationSerializer.java b/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftFacetConfigurationSerializer.java index f91867a6..66c204f0 100644 --- a/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftFacetConfigurationSerializer.java +++ b/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftFacetConfigurationSerializer.java @@ -34,8 +34,4 @@ protected ThriftCompilerOptions loadExtension(@NotNull Element facetConfiguratio return configuration; } - - @Override - protected void saveExtension(ThriftCompilerOptions extension, Element facetConfigurationTag, JpsModule module) { - } } diff --git a/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftProjectExtensionSerializer.java b/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftProjectExtensionSerializer.java index 5543ef53..f67a5929 100644 --- a/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftProjectExtensionSerializer.java +++ b/jps-plugin/src/main/java/com/intellij/plugins/thrift/jps/ThriftProjectExtensionSerializer.java @@ -42,11 +42,6 @@ public void loadExtension(@NotNull JpsProject project, @NotNull Element componen } } - @Override - public void saveExtension(@NotNull JpsProject project, @NotNull Element componentTag) { - - } - /** *

Converts a String to a Boolean.

diff --git a/thrift/build.gradle b/thrift/build.gradle index 816ef9f5..e128714a 100644 --- a/thrift/build.gradle +++ b/thrift/build.gradle @@ -1,4 +1,4 @@ -jar.archiveName = "plugin.jar" +jar.archiveFileName = "plugin.jar" patchPluginXml { version = System.getenv().getOrDefault("CIRRUS_TAG", "1.0") @@ -23,5 +23,5 @@ sourceSets { dependencies { - compile project(':jps-plugin') + implementation project(':jps-plugin') } \ No newline at end of file diff --git a/thrift/src/main/java/com/intellij/plugins/thrift/GeneratorIcons.java b/thrift/src/main/java/com/intellij/plugins/thrift/GeneratorIcons.java index 63e48805..2f9f023a 100644 --- a/thrift/src/main/java/com/intellij/plugins/thrift/GeneratorIcons.java +++ b/thrift/src/main/java/com/intellij/plugins/thrift/GeneratorIcons.java @@ -4,7 +4,7 @@ import com.intellij.plugins.thrift.config.target.GeneratorType; import javax.swing.*; -import java.util.HashMap; +import java.util.EnumMap; import java.util.Map; public final class GeneratorIcons { @@ -21,17 +21,12 @@ private static class LazyHolder { static final GeneratorIcons INSTANCE = new GeneratorIcons(); } - private Map icons = new HashMap(); + private final Map icons = new EnumMap<>(GeneratorType.class); private GeneratorIcons() { for (final GeneratorType generatorType : GeneratorType.values()) { - IconLoader.LazyIcon lazyIcon = new IconLoader.LazyIcon() { - @Override - protected Icon compute() { - return IconLoader.getIcon(generatorType.getIconName()); - } - }; + Icon lazyIcon = IconLoader.createLazy(() -> IconLoader.getIcon(generatorType.getIconName(), GeneratorIcons.class)); icons.put(generatorType, lazyIcon); } } diff --git a/thrift/src/main/java/com/intellij/plugins/thrift/ThriftFileTypeLoader.java b/thrift/src/main/java/com/intellij/plugins/thrift/ThriftFileTypeLoader.java deleted file mode 100644 index 6a766acb..00000000 --- a/thrift/src/main/java/com/intellij/plugins/thrift/ThriftFileTypeLoader.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.intellij.plugins.thrift; - -import com.intellij.openapi.fileTypes.FileTypeConsumer; -import com.intellij.openapi.fileTypes.FileTypeFactory; -import org.jetbrains.annotations.NotNull; - -/** - * Created by fkorotkov. - */ -public class ThriftFileTypeLoader extends FileTypeFactory { - @Override - public void createFileTypes(@NotNull FileTypeConsumer fileTypeConsumer) { - fileTypeConsumer.consume(ThriftFileType.INSTANCE); - } -} diff --git a/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftCompilerConfigurable.java b/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftCompilerConfigurable.java index b42a6f1e..3ea07735 100644 --- a/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftCompilerConfigurable.java +++ b/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftCompilerConfigurable.java @@ -11,6 +11,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.TextBrowseFolderListener; import com.intellij.openapi.ui.TextFieldWithBrowseButton; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -20,7 +21,6 @@ import com.intellij.ui.components.JBTextField; import com.intellij.util.ui.JBInsets; import org.apache.commons.lang.StringUtils; -import org.apache.sanselan.util.IOUtils; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -261,16 +261,12 @@ public String readVersion() { process.waitFor(); byte[] stdOut; - InputStream stdOutIS = process.getInputStream(); - try { - stdOut = IOUtils.getInputStreamBytes(stdOutIS); - if (stdOut == null || stdOut.length == 0) { + try (InputStream stdOutIS = process.getInputStream()) { + stdOut = FileUtil.loadBytes(stdOutIS); + if (stdOut.length == 0) { return null; } } - finally { - stdOutIS.close(); - } return new String(stdOut); } diff --git a/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftPlugin.java b/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftPlugin.java index 8492cf5f..bdb87933 100644 --- a/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftPlugin.java +++ b/thrift/src/main/java/com/intellij/plugins/thrift/config/ThriftPlugin.java @@ -19,7 +19,7 @@ @Storage(ThriftProjectExtensionSerializer.CONFIG_FILE_NAME) } ) -public class ThriftPlugin implements NamedComponent, PersistentStateComponent, ProjectComponent { +public class ThriftPlugin implements NamedComponent, PersistentStateComponent { private ThriftConfig myConfig; @Nullable diff --git a/thrift/src/main/java/com/intellij/plugins/thrift/config/facet/ThriftFacetSupportProvider.java b/thrift/src/main/java/com/intellij/plugins/thrift/config/facet/ThriftFacetSupportProvider.java index 14eb8930..53e2edcd 100644 --- a/thrift/src/main/java/com/intellij/plugins/thrift/config/facet/ThriftFacetSupportProvider.java +++ b/thrift/src/main/java/com/intellij/plugins/thrift/config/facet/ThriftFacetSupportProvider.java @@ -1,6 +1,5 @@ package com.intellij.plugins.thrift.config.facet; -import com.intellij.facet.Facet; import com.intellij.facet.ui.FacetBasedFrameworkSupportProvider; import com.intellij.ide.util.frameworkSupport.FrameworkVersion; import com.intellij.openapi.roots.ModifiableRootModel; @@ -10,13 +9,13 @@ * * @author xBlackCat */ -public class ThriftFacetSupportProvider extends FacetBasedFrameworkSupportProvider { +public class ThriftFacetSupportProvider extends FacetBasedFrameworkSupportProvider { protected ThriftFacetSupportProvider() { super(ThriftFacet.TYPE); } @Override - protected void setupConfiguration(Facet facet, ModifiableRootModel rootModel, FrameworkVersion version) { - + protected void setupConfiguration(ThriftFacet facet, ModifiableRootModel rootModel, FrameworkVersion version) { + // Do nothing } } diff --git a/thrift/src/main/java/com/intellij/plugins/thrift/util/ThriftPsiUtil.java b/thrift/src/main/java/com/intellij/plugins/thrift/util/ThriftPsiUtil.java index 609a2f4c..c86c17cb 100644 --- a/thrift/src/main/java/com/intellij/plugins/thrift/util/ThriftPsiUtil.java +++ b/thrift/src/main/java/com/intellij/plugins/thrift/util/ThriftPsiUtil.java @@ -56,16 +56,9 @@ public static PsiFile resolveInclude(@Nullable ThriftInclude include) { final VirtualFile includedVirtualFile = ContainerUtil.find( FilenameIndex.getVirtualFilesByName( - include.getProject(), PathUtil.getFileName(includePath), GlobalSearchScope.allScope(include.getProject()) - ), - new Condition() { - @Override - public boolean value(VirtualFile file) { - return file.getPath().endsWith(includePath); - } - } + ), file -> file.getPath().endsWith(includePath) ); return includedVirtualFile != null ? include.getManager().findFile(includedVirtualFile) : null; diff --git a/thrift/src/main/java/icons/ThriftIcons.java b/thrift/src/main/java/icons/ThriftIcons.java index 24e54a0d..a4910e95 100644 --- a/thrift/src/main/java/icons/ThriftIcons.java +++ b/thrift/src/main/java/icons/ThriftIcons.java @@ -5,12 +5,12 @@ import javax.swing.*; public class ThriftIcons { - public static final Icon CONST = IconLoader.getIcon("/icons/const.png"); - public static final Icon ENUM = IconLoader.getIcon("/icons/enum.png"); - public static final Icon EXCEPTION = IconLoader.getIcon("/icons/exception.png"); - public static final Icon SERVICE = IconLoader.getIcon("/icons/service.png"); - public static final Icon STRUCT = IconLoader.getIcon("/icons/struct.png"); - public static final Icon TYPEDEF = IconLoader.getIcon("/icons/typedef.png"); - public static final Icon UNION = IconLoader.getIcon("/icons/union.png"); - public static final Icon FACET = IconLoader.getIcon("/icons/faceticon.png"); + public static final Icon CONST = IconLoader.getIcon("/icons/const.png", ThriftIcons.class); + public static final Icon ENUM = IconLoader.getIcon("/icons/enum.png", ThriftIcons.class); + public static final Icon EXCEPTION = IconLoader.getIcon("/icons/exception.png", ThriftIcons.class); + public static final Icon SERVICE = IconLoader.getIcon("/icons/service.png", ThriftIcons.class); + public static final Icon STRUCT = IconLoader.getIcon("/icons/struct.png", ThriftIcons.class); + public static final Icon TYPEDEF = IconLoader.getIcon("/icons/typedef.png", ThriftIcons.class); + public static final Icon UNION = IconLoader.getIcon("/icons/union.png", ThriftIcons.class); + public static final Icon FACET = IconLoader.getIcon("/icons/faceticon.png", ThriftIcons.class); } diff --git a/thrift/src/main/resources/META-INF/plugin.xml b/thrift/src/main/resources/META-INF/plugin.xml index 25f3f035..1e5ac5db 100644 --- a/thrift/src/main/resources/META-INF/plugin.xml +++ b/thrift/src/main/resources/META-INF/plugin.xml @@ -4,11 +4,11 @@ Support for Thrift language @fedor - + com.intellij.modules.platform com.intellij.modules.lang @@ -22,7 +22,7 @@ - + + text="Go to Thrift Source"> diff --git a/thrift/src/test/java/com/intellij/plugins/thrift/ThriftCodeInsightFixtureTestCase.java b/thrift/src/test/java/com/intellij/plugins/thrift/ThriftCodeInsightFixtureTestCase.java index 504624bf..621fabc8 100644 --- a/thrift/src/test/java/com/intellij/plugins/thrift/ThriftCodeInsightFixtureTestCase.java +++ b/thrift/src/test/java/com/intellij/plugins/thrift/ThriftCodeInsightFixtureTestCase.java @@ -1,12 +1,12 @@ package com.intellij.plugins.thrift; import com.intellij.plugins.thrift.util.ThriftTestUtils; -import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; +import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; /** * Created by fkorotkov. */ -abstract public class ThriftCodeInsightFixtureTestCase extends LightCodeInsightFixtureTestCase { +abstract public class ThriftCodeInsightFixtureTestCase extends LightJavaCodeInsightFixtureTestCase { @Override protected String getTestDataPath() { return ThriftTestUtils.BASE_TEST_DATA_PATH + "/" + getBasePath(); diff --git a/thrift/src/test/java/com/intellij/plugins/thrift/inspections/ThriftInspectionTestBase.java b/thrift/src/test/java/com/intellij/plugins/thrift/inspections/ThriftInspectionTestBase.java index 69e4b1c8..66ecafe5 100644 --- a/thrift/src/test/java/com/intellij/plugins/thrift/inspections/ThriftInspectionTestBase.java +++ b/thrift/src/test/java/com/intellij/plugins/thrift/inspections/ThriftInspectionTestBase.java @@ -1,9 +1,9 @@ package com.intellij.plugins.thrift.inspections; import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.plugins.thrift.ThriftCodeInsightFixtureTestCase; +import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; -abstract public class ThriftInspectionTestBase extends ThriftCodeInsightFixtureTestCase { +abstract public class ThriftInspectionTestBase extends LightJavaCodeInsightFixtureTestCase { private final String myPath; Class inspection; @@ -26,6 +26,7 @@ protected String getBasePath() { return myPath; } + @SuppressWarnings("unchecked") protected void doTest() { myFixture.enableInspections(this.inspection); myFixture.configureByFile(getTestName(true) + ".thrift");