From fb78062f7c9cbd058bd8ffceb648c1a45e9f6e5f Mon Sep 17 00:00:00 2001 From: Andrei Kudryavtsev Date: Thu, 23 Oct 2025 22:43:22 +0500 Subject: [PATCH] Fix build and tests on modern environment --- .gitignore | 5 + .run/Run Plugin.run.xml | 25 ++++ .run/Run Tests.run.xml | 25 ++++ .run/Run Verifications.run.xml | 25 ++++ build.gradle | 117 ------------------ build.gradle.kts | 104 ++++++++++++++++ gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 1 - settings.gradle.kts | 38 ++++++ .../jf/smalidea/PsiBuilderTokenStream.java | 4 +- src/main/java/org/jf/smalidea/SmaliIcons.java | 2 +- src/main/java/org/jf/smalidea/SmaliLexer.java | 6 +- .../java/org/jf/smalidea/SmaliParser.java | 2 +- .../java/org/jf/smalidea/SmaliTokens.java | 2 +- .../debugging/SmaliCodeFragmentFactory.java | 8 +- .../jf/smalidea/dexlib/SmalideaClassDef.java | 12 +- .../dexlib/SmalideaExceptionHandler.java | 2 +- .../org/jf/smalidea/dexlib/SmalideaField.java | 12 +- .../jf/smalidea/dexlib/SmalideaMethod.java | 12 +- .../dexlib/SmalideaMethodParameter.java | 4 +- .../jf/smalidea/dexlib/SmalideaTryBlock.java | 2 +- .../analysis/SmalideaClassProvider.java | 4 +- .../instruction/SmalideaArrayPayload.java | 2 +- .../instruction/SmalideaInstruction.java | 16 +-- .../instruction/SmalideaInstruction10t.java | 2 +- .../instruction/SmalideaInstruction10x.java | 2 +- .../instruction/SmalideaInstruction11n.java | 2 +- .../instruction/SmalideaInstruction11x.java | 2 +- .../instruction/SmalideaInstruction12x.java | 2 +- .../instruction/SmalideaInstruction20t.java | 2 +- .../instruction/SmalideaInstruction21c.java | 2 +- .../instruction/SmalideaInstruction21ih.java | 2 +- .../instruction/SmalideaInstruction21lh.java | 2 +- .../instruction/SmalideaInstruction21s.java | 2 +- .../instruction/SmalideaInstruction21t.java | 2 +- .../instruction/SmalideaInstruction22b.java | 2 +- .../instruction/SmalideaInstruction22c.java | 2 +- .../instruction/SmalideaInstruction22s.java | 2 +- .../instruction/SmalideaInstruction22t.java | 2 +- .../instruction/SmalideaInstruction22x.java | 2 +- .../instruction/SmalideaInstruction23x.java | 2 +- .../instruction/SmalideaInstruction30t.java | 2 +- .../instruction/SmalideaInstruction31c.java | 2 +- .../instruction/SmalideaInstruction31i.java | 2 +- .../instruction/SmalideaInstruction31t.java | 2 +- .../instruction/SmalideaInstruction32x.java | 2 +- .../instruction/SmalideaInstruction35c.java | 2 +- .../instruction/SmalideaInstruction3rc.java | 2 +- .../instruction/SmalideaInstruction51l.java | 2 +- .../SmalideaPackedSwitchPayload.java | 6 +- .../SmalideaSparseSwitchPayload.java | 6 +- .../errorReporting/ErrorReporter.java | 2 +- .../SmaliClassReferenceSearcher.java | 41 +++--- .../SmaliFindUsagesHandlerFactory.java | 55 ++++++++ .../findUsages/SmaliUsageTypeProvider.java | 2 +- .../jf/smalidea/psi/impl/SmaliAnnotation.java | 5 - .../org/jf/smalidea/psi/impl/SmaliClass.java | 13 ++ .../smalidea/psi/impl/SmaliInstruction.java | 10 +- .../jf/smalidea/psi/impl/SmaliLiteral.java | 2 +- .../org/jf/smalidea/psi/impl/SmaliMethod.java | 6 +- .../smalidea/psi/impl/SmaliModifierList.java | 2 +- .../psi/index/SmaliClassNameIndex.java | 5 + .../java/org/jf/smalidea/util/IconUtils.java | 2 +- .../jf/smalidea/util/InstructionUtils.java | 2 +- .../java/org/jf/smalidea/util/NameUtils.java | 4 +- .../org/jf/smalidea/util/StringUtils.java | 4 +- src/main/resources/META-INF/plugin.xml | 3 +- src/main/resources/icons/smali.png | Bin 261 -> 0 bytes src/main/resources/icons/smali.svg | 72 +++++++++++ .../AnnotationElementNameReferenceTest.java | 4 +- .../org/jf/smalidea/ClassReferenceTest.java | 15 ++- .../org/jf/smalidea/FieldReferenceTest.java | 4 +- .../LightCodeInsightParsingTestCase.java | 22 ++-- .../org/jf/smalidea/MethodReferenceTest.java | 4 +- .../smalidea/SmaliClassModifierListTest.java | 2 +- .../SmaliCodeFragmentFactoryTest.java | 4 +- .../java/org/jf/smalidea/SmaliFieldTest.java | 2 +- .../org/jf/smalidea/SmaliInstructionTest.java | 2 +- .../jf/smalidea/SmaliLabelReferenceTest.java | 6 +- .../java/org/jf/smalidea/SmaliMethodTest.java | 2 +- .../jf/smalidea/SmaliPositionManagerTest.java | 4 +- .../smalidea/dexlib/SmalideaMethodTest.java | 24 ++-- .../findUsages/ClassUsageTypeTest.java | 2 +- .../findUsages/FieldUsageTypeTest.java | 2 +- .../smalidea/findUsages/FindUsagesTest.java | 6 +- .../HighlightLocalClassUsagesTest.java | 15 ++- .../findUsages/MethodUsageTypeTest.java | 2 +- .../findUsages/UsageTypeProviderFactory.java | 38 ++++++ .../jf/smalidea/findUsages/UsageTypeTest.java | 11 +- 89 files changed, 594 insertions(+), 301 deletions(-) create mode 100644 .run/Run Plugin.run.xml create mode 100644 .run/Run Tests.run.xml create mode 100644 .run/Run Verifications.run.xml delete mode 100644 build.gradle create mode 100644 build.gradle.kts delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts create mode 100644 src/main/java/org/jf/smalidea/findUsages/SmaliFindUsagesHandlerFactory.java delete mode 100644 src/main/resources/icons/smali.png create mode 100644 src/main/resources/icons/smali.svg create mode 100644 src/test/java/org/jf/smalidea/findUsages/UsageTypeProviderFactory.java diff --git a/.gitignore b/.gitignore index cffcb37e..6a349287 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,8 @@ test-system # Ignore Gradle project-specific cache directory .gradle + +.idea +.intellijPlatform + +local.properties diff --git a/.run/Run Plugin.run.xml b/.run/Run Plugin.run.xml new file mode 100644 index 00000000..855d1a85 --- /dev/null +++ b/.run/Run Plugin.run.xml @@ -0,0 +1,25 @@ + + + + + + + + false + true + false + false + + + diff --git a/.run/Run Tests.run.xml b/.run/Run Tests.run.xml new file mode 100644 index 00000000..f281bdc8 --- /dev/null +++ b/.run/Run Tests.run.xml @@ -0,0 +1,25 @@ + + + + + + + + true + true + false + true + + + diff --git a/.run/Run Verifications.run.xml b/.run/Run Verifications.run.xml new file mode 100644 index 00000000..b51e78cd --- /dev/null +++ b/.run/Run Verifications.run.xml @@ -0,0 +1,25 @@ + + + + + + + + true + true + false + false + + + diff --git a/build.gradle b/build.gradle deleted file mode 100644 index dd424e2c..00000000 --- a/build.gradle +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2013, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -plugins { - id 'java' - id 'org.jetbrains.intellij' version '0.6.5' -} - -apply plugin: 'antlr' - -version = '0.06' - -def versionSuffix -try { - def git = org.eclipse.jgit.api.Git.open(file('..')) - def head = git.getRepository().getRef('HEAD') - versionSuffix = head.getObjectId().abbreviate(8).name() - - if (!git.status().call().clean) { - versionSuffix += '-dirty' - } -} catch (Exception ex) { - // In case we can't get the commit for some reason, - // just use -dev - versionSuffix = 'dev' -} - -def baseVersion = version -version = baseVersion + '-' + versionSuffix - -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - - -intellij { - version '2020.3.2' - plugins 'java' - updateSinceUntilBuild false -} - -repositories { - mavenCentral() -} - -configurations { - priorityImplementation -} -sourceSets.main.compileClasspath = configurations.priorityImplementation + sourceSets.main.compileClasspath - -dependencies { - // This is a bit of a hack to force smali and dexlib2 to be added to the compile classpath - // before the IntelliJ IDEA sources - which also contain an older version of these libraries. - priorityImplementation group: 'org.smali', name: 'smali', version: '2.5.0' - priorityImplementation group: 'org.smali', name: 'dexlib2', version: '2.5.0' - - implementation group: 'org.smali', name: 'smali', version: '2.5.0' - implementation group: 'org.smali', name: 'dexlib2', version: '2.5.0' - implementation group: 'org.antlr', name: 'antlr-runtime', version: '3.5.2' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.3.1' - - antlr group: 'org.antlr', name: 'antlr', version: '3.5.2' - - testImplementation group: 'junit', name: 'junit', version: '4.12' -} - -task extractTokens(type: org.gradle.api.tasks.Copy) { - project.afterEvaluate { - def allArtifacts = configurations.default.resolvedConfiguration.resolvedArtifacts - def smaliArtifact = allArtifacts.find { it.moduleVersion.id.name.equals('smali') } - - from(zipTree(smaliArtifact.file)) { - include '**/*.tokens' - } - into "${buildDir}/tokens" - } -} - -generateGrammarSource { - def tokensDir = file("${buildDir}/tokens/org/jf/smali") - inputs.file new File(tokensDir, 'smaliParser.tokens') - setArguments(['-lib', tokensDir.path]) - outputDirectory(file("${buildDir}/generated-src/antlr/main/org/jf/smalidea")) -} -generateGrammarSource.dependsOn(extractTokens) - -wrapper { - gradleVersion = '6.8.2' - distributionType = Wrapper.DistributionType.ALL -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..69310842 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,104 @@ +/* + * Copyright 2025, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import org.gradle.kotlin.dsl.testImplementation +import org.jetbrains.intellij.platform.gradle.TestFrameworkType + +plugins { + id("java") + id("antlr") + id("org.jetbrains.kotlin.jvm") version "2.2.20" + id("org.jetbrains.intellij.platform") version "2.10.1" +} + +group = "org.jf" +version = "0.08" + +kotlin { + jvmToolchain(17) +} + +repositories { + mavenCentral() + google() + intellijPlatform { + defaultRepositories() + } +} + +dependencies { + intellijPlatform { + intellijIdeaCommunity("2025.2.4") + // androidStudio("2025.1.4.8") + bundledPlugin("com.intellij.java") + testFramework(TestFrameworkType.Platform) + testFramework(TestFrameworkType.Plugin.Java) + } + + implementation("com.android.tools.smali:smali:3.0.9") + implementation("com.android.tools.smali:smali-util:3.0.9") + implementation("com.android.tools.smali:smali-dexlib2:3.0.9") + + implementation("org.antlr:antlr-runtime:3.5.2") + implementation("com.google.code.gson:gson:2.8.9") + antlr("org.antlr:antlr:3.5.3") + + testImplementation("junit:junit:4.13.2") + + // TODO: move from javax.annotations to org.jetbrains.annotations + implementation("com.github.spotbugs:spotbugs-annotations:4.9.7") +} + +val extractTokensTask = tasks.register("extractTokens") { + val smaliZip = providers.provider { + val artifacts = configurations.runtimeClasspath.flatMap { + it.incoming.artifacts.resolvedArtifacts + }.get() + artifacts.find { it.id.displayName.contains(":smali") }?.file + ?: throw GradleException("Could not find 'smali' artifact in 'default' configuration") + } + + from(smaliZip.map { zipTree(it) }) { + include("**/*.tokens") + } + into(layout.buildDirectory.dir("tokens")) +} + +tasks.generateGrammarSource.configure { + val tokensDir = layout.buildDirectory.dir("tokens/com/android/tools/smali/smali/") + arguments = arguments + listOf("-lib", tokensDir.get().asFile.path) + outputDirectory = layout.buildDirectory.dir("generated-src/antlr/main/org/jf/smalidea/").get().asFile + dependsOn(extractTokensTask) +} + +tasks.patchPluginXml.configure { + sinceBuild = provider { null } +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 25d32653..d706aba6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 5d97c230..00000000 --- a/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'smalidea' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..21a8fbd2 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,38 @@ +/* + * Copyright 2025, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +@file:Suppress("UnstableApiUsage") + +rootProject.name = "smalidea" + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} diff --git a/src/main/java/org/jf/smalidea/PsiBuilderTokenStream.java b/src/main/java/org/jf/smalidea/PsiBuilderTokenStream.java index 00004001..4e22d8b8 100644 --- a/src/main/java/org/jf/smalidea/PsiBuilderTokenStream.java +++ b/src/main/java/org/jf/smalidea/PsiBuilderTokenStream.java @@ -40,8 +40,8 @@ import org.antlr.runtime.TokenSource; import org.antlr.runtime.TokenStream; import org.jetbrains.annotations.Nullable; -import org.jf.smali.InvalidToken; -import org.jf.smali.smaliParser; +import com.android.tools.smali.smali.InvalidToken; +import com.android.tools.smali.smali.smaliParser; import javax.annotation.Nonnull; import java.util.ArrayList; diff --git a/src/main/java/org/jf/smalidea/SmaliIcons.java b/src/main/java/org/jf/smalidea/SmaliIcons.java index 449e71b5..7716cdf8 100644 --- a/src/main/java/org/jf/smalidea/SmaliIcons.java +++ b/src/main/java/org/jf/smalidea/SmaliIcons.java @@ -36,5 +36,5 @@ import javax.swing.*; public class SmaliIcons { - public static final Icon SmaliIcon = IconLoader.getIcon("/icons/smali.png"); + public static final Icon SmaliIcon = IconLoader.getIcon("/icons/smali.svg", SmaliIcons.class); } diff --git a/src/main/java/org/jf/smalidea/SmaliLexer.java b/src/main/java/org/jf/smalidea/SmaliLexer.java index ce705565..049fb118 100644 --- a/src/main/java/org/jf/smalidea/SmaliLexer.java +++ b/src/main/java/org/jf/smalidea/SmaliLexer.java @@ -36,9 +36,9 @@ import com.intellij.psi.tree.IElementType; import org.antlr.runtime.CommonToken; import org.jetbrains.annotations.NotNull; -import org.jf.smali.smaliFlexLexer; -import org.jf.smali.smaliParser; -import org.jf.smali.util.BlankReader; +import com.android.tools.smali.smali.smaliFlexLexer; +import com.android.tools.smali.smali.smaliParser; +import com.android.tools.smali.smali.util.BlankReader; public class SmaliLexer extends LexerBase { // TODO: need to plumb in the api level somehow diff --git a/src/main/java/org/jf/smalidea/SmaliParser.java b/src/main/java/org/jf/smalidea/SmaliParser.java index ed0fb19a..e7a0013c 100644 --- a/src/main/java/org/jf/smalidea/SmaliParser.java +++ b/src/main/java/org/jf/smalidea/SmaliParser.java @@ -48,7 +48,7 @@ public class SmaliParser implements PsiParser { PsiBuilder.Marker classMarker = builder.mark(); PsiBuilderTokenStream tokenStream = new PsiBuilderTokenStream(builder); - smalideaParser parser = new smalideaParser(tokenStream); + org.jf.smalidea.smalideaParser parser = new org.jf.smalidea.smalideaParser(tokenStream); parser.setPsiBuilder(builder); try { parser.smali_file(); diff --git a/src/main/java/org/jf/smalidea/SmaliTokens.java b/src/main/java/org/jf/smalidea/SmaliTokens.java index 97c67ed3..d7b9b6d5 100644 --- a/src/main/java/org/jf/smalidea/SmaliTokens.java +++ b/src/main/java/org/jf/smalidea/SmaliTokens.java @@ -35,7 +35,7 @@ import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; -import org.jf.smali.smaliParser; +import com.android.tools.smali.smali.smaliParser; import org.jf.smalidea.highlighter.SmaliHighlightingColors; import java.lang.reflect.Field; diff --git a/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java b/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java index 25d1969b..59895afc 100644 --- a/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java +++ b/src/main/java/org/jf/smalidea/debugging/SmaliCodeFragmentFactory.java @@ -55,8 +55,8 @@ import com.sun.jdi.Method; import com.sun.jdi.Value; import com.sun.jdi.VirtualMachine; -import org.jf.dexlib2.analysis.AnalyzedInstruction; -import org.jf.dexlib2.analysis.RegisterType; +import com.android.tools.smali.dexlib2.analysis.AnalyzedInstruction; +import com.android.tools.smali.dexlib2.analysis.RegisterType; import org.jf.smalidea.SmaliFileType; import org.jf.smalidea.SmaliLanguage; import org.jf.smalidea.debugging.value.LazyValue; @@ -75,7 +75,7 @@ public class SmaliCodeFragmentFactory extends DefaultCodeFragmentFactory { @Override public JavaCodeFragment createCodeFragment(TextWithImports item, PsiElement context, Project project) { context = wrapContext(project, context); - JavaCodeFragment fragment = super.createCodeFragment(item, context, project); + JavaCodeFragment fragment = super.createPsiCodeFragment(item, context, project); List lazyValues = context.getUserData(SMALI_LAZY_VALUES_KEY); if (lazyValues != null) { fragment.putUserData(SMALI_LAZY_VALUES_KEY, lazyValues); @@ -243,7 +243,7 @@ private PsiElement wrapContext(final Project project, final PsiElement originalC final TextWithImportsImpl textWithImports = new TextWithImportsImpl(CodeFragmentKind.CODE_BLOCK, variablesText.toString(), "", getFileType()); - final JavaCodeFragment codeFragment = super.createCodeFragment(textWithImports, originalContext, project); + final JavaCodeFragment codeFragment = super.createPsiCodeFragment(textWithImports, originalContext, project); codeFragment.accept(new JavaRecursiveElementVisitor() { @Override diff --git a/src/main/java/org/jf/smalidea/dexlib/SmalideaClassDef.java b/src/main/java/org/jf/smalidea/dexlib/SmalideaClassDef.java index c954702a..4da9333c 100644 --- a/src/main/java/org/jf/smalidea/dexlib/SmalideaClassDef.java +++ b/src/main/java/org/jf/smalidea/dexlib/SmalideaClassDef.java @@ -40,12 +40,12 @@ import com.intellij.psi.PsiField; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierList; -import org.jf.dexlib2.AccessFlags; -import org.jf.dexlib2.base.reference.BaseTypeReference; -import org.jf.dexlib2.iface.Annotation; -import org.jf.dexlib2.iface.ClassDef; -import org.jf.dexlib2.iface.Field; -import org.jf.dexlib2.iface.Method; +import com.android.tools.smali.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.base.reference.BaseTypeReference; +import com.android.tools.smali.dexlib2.iface.Annotation; +import com.android.tools.smali.dexlib2.iface.ClassDef; +import com.android.tools.smali.dexlib2.iface.Field; +import com.android.tools.smali.dexlib2.iface.Method; import org.jf.smalidea.util.NameUtils; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/SmalideaExceptionHandler.java b/src/main/java/org/jf/smalidea/dexlib/SmalideaExceptionHandler.java index 72909b63..79e8e039 100644 --- a/src/main/java/org/jf/smalidea/dexlib/SmalideaExceptionHandler.java +++ b/src/main/java/org/jf/smalidea/dexlib/SmalideaExceptionHandler.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib; -import org.jf.dexlib2.base.BaseExceptionHandler; +import com.android.tools.smali.dexlib2.base.BaseExceptionHandler; import org.jf.smalidea.psi.impl.SmaliCatchStatement; import org.jf.smalidea.psi.impl.SmaliClassTypeElement; import org.jf.smalidea.psi.impl.SmaliLabel; diff --git a/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java b/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java index c7100b28..83cf396c 100644 --- a/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java +++ b/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java @@ -35,12 +35,12 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiField; import com.intellij.psi.PsiModifierList; -import org.jf.dexlib2.AccessFlags; -import org.jf.dexlib2.HiddenApiRestriction; -import org.jf.dexlib2.base.reference.BaseFieldReference; -import org.jf.dexlib2.iface.Annotation; -import org.jf.dexlib2.iface.Field; -import org.jf.dexlib2.iface.value.EncodedValue; +import com.android.tools.smali.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.HiddenApiRestriction; +import com.android.tools.smali.dexlib2.base.reference.BaseFieldReference; +import com.android.tools.smali.dexlib2.iface.Annotation; +import com.android.tools.smali.dexlib2.iface.Field; +import com.android.tools.smali.dexlib2.iface.value.EncodedValue; import org.jf.smalidea.psi.impl.SmaliField; import org.jf.smalidea.util.NameUtils; diff --git a/src/main/java/org/jf/smalidea/dexlib/SmalideaMethod.java b/src/main/java/org/jf/smalidea/dexlib/SmalideaMethod.java index 5667f486..1304adae 100644 --- a/src/main/java/org/jf/smalidea/dexlib/SmalideaMethod.java +++ b/src/main/java/org/jf/smalidea/dexlib/SmalideaMethod.java @@ -41,12 +41,12 @@ import com.intellij.psi.PsiParameter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jf.dexlib2.AccessFlags; -import org.jf.dexlib2.HiddenApiRestriction; -import org.jf.dexlib2.base.reference.BaseMethodReference; -import org.jf.dexlib2.iface.*; -import org.jf.dexlib2.iface.debug.DebugItem; -import org.jf.dexlib2.iface.instruction.Instruction; +import com.android.tools.smali.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.HiddenApiRestriction; +import com.android.tools.smali.dexlib2.base.reference.BaseMethodReference; +import com.android.tools.smali.dexlib2.iface.*; +import com.android.tools.smali.dexlib2.iface.debug.DebugItem; +import com.android.tools.smali.dexlib2.iface.instruction.Instruction; import org.jf.smalidea.dexlib.instruction.SmalideaInstruction; import org.jf.smalidea.psi.impl.SmaliCatchStatement; import org.jf.smalidea.psi.impl.SmaliInstruction; diff --git a/src/main/java/org/jf/smalidea/dexlib/SmalideaMethodParameter.java b/src/main/java/org/jf/smalidea/dexlib/SmalideaMethodParameter.java index 49d75c83..844a80fc 100644 --- a/src/main/java/org/jf/smalidea/dexlib/SmalideaMethodParameter.java +++ b/src/main/java/org/jf/smalidea/dexlib/SmalideaMethodParameter.java @@ -34,8 +34,8 @@ import com.google.common.collect.ImmutableSet; import com.intellij.psi.PsiParameter; import org.jetbrains.annotations.Nullable; -import org.jf.dexlib2.base.BaseMethodParameter; -import org.jf.dexlib2.iface.Annotation; +import com.android.tools.smali.dexlib2.base.BaseMethodParameter; +import com.android.tools.smali.dexlib2.iface.Annotation; import org.jf.smalidea.util.NameUtils; import org.jf.smalidea.util.StringUtils; diff --git a/src/main/java/org/jf/smalidea/dexlib/SmalideaTryBlock.java b/src/main/java/org/jf/smalidea/dexlib/SmalideaTryBlock.java index 6fbab593..15a6e9b2 100644 --- a/src/main/java/org/jf/smalidea/dexlib/SmalideaTryBlock.java +++ b/src/main/java/org/jf/smalidea/dexlib/SmalideaTryBlock.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib; -import org.jf.dexlib2.base.BaseTryBlock; +import com.android.tools.smali.dexlib2.base.BaseTryBlock; import org.jf.smalidea.psi.impl.SmaliCatchStatement; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/analysis/SmalideaClassProvider.java b/src/main/java/org/jf/smalidea/dexlib/analysis/SmalideaClassProvider.java index 770c6068..3dd113d4 100644 --- a/src/main/java/org/jf/smalidea/dexlib/analysis/SmalideaClassProvider.java +++ b/src/main/java/org/jf/smalidea/dexlib/analysis/SmalideaClassProvider.java @@ -35,8 +35,8 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.impl.ResolveScopeManager; -import org.jf.dexlib2.analysis.ClassProvider; -import org.jf.dexlib2.iface.ClassDef; +import com.android.tools.smali.dexlib2.analysis.ClassProvider; +import com.android.tools.smali.dexlib2.iface.ClassDef; import org.jf.smalidea.dexlib.SmalideaClassDef; import org.jf.smalidea.util.NameUtils; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaArrayPayload.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaArrayPayload.java index 26f2daf7..48dc71cd 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaArrayPayload.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaArrayPayload.java @@ -33,7 +33,7 @@ import com.google.common.base.Function; import com.google.common.collect.Lists; -import org.jf.dexlib2.iface.instruction.formats.ArrayPayload; +import com.android.tools.smali.dexlib2.iface.instruction.formats.ArrayPayload; import org.jf.smalidea.psi.impl.SmaliArrayDataElement; import org.jf.smalidea.psi.impl.SmaliInstruction; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction.java index b5b259a2..db911980 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction.java @@ -34,14 +34,14 @@ import com.google.common.base.Function; import com.google.common.collect.Lists; import com.intellij.psi.PsiType; -import org.jf.dexlib2.Opcode; -import org.jf.dexlib2.ReferenceType; -import org.jf.dexlib2.iface.instruction.Instruction; -import org.jf.dexlib2.iface.reference.Reference; -import org.jf.dexlib2.immutable.reference.ImmutableFieldReference; -import org.jf.dexlib2.immutable.reference.ImmutableMethodReference; -import org.jf.dexlib2.immutable.reference.ImmutableStringReference; -import org.jf.dexlib2.immutable.reference.ImmutableTypeReference; +import com.android.tools.smali.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.ReferenceType; +import com.android.tools.smali.dexlib2.iface.instruction.Instruction; +import com.android.tools.smali.dexlib2.iface.reference.Reference; +import com.android.tools.smali.dexlib2.immutable.reference.ImmutableFieldReference; +import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference; +import com.android.tools.smali.dexlib2.immutable.reference.ImmutableStringReference; +import com.android.tools.smali.dexlib2.immutable.reference.ImmutableTypeReference; import org.jf.smalidea.psi.impl.*; import org.jf.smalidea.util.NameUtils; import org.jf.smalidea.util.StringUtils; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10t.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10t.java index 80a4ba66..24ac58a6 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10t.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10t.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction10t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction10t; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10x.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10x.java index 04804514..c041e0e6 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10x.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction10x.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction10x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction10x; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11n.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11n.java index 1b185dd8..c32cf72e 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11n.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11n.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction11n; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction11n; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11x.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11x.java index 7e8fbf4d..8cd1cd46 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11x.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction11x.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction11x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction11x; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction12x.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction12x.java index c6cba0a7..acd18852 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction12x.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction12x.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction12x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction12x; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction20t.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction20t.java index 1c0a9216..d908ec51 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction20t.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction20t.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction20t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction20t; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21c.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21c.java index f2ac6f1a..3bf589d1 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21c.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21c.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction21c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21ih.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21ih.java index ce5f598f..3214b427 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21ih.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21ih.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction21ih; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21ih; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21lh.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21lh.java index 3ef08505..cf2ca0bb 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21lh.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21lh.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction21lh; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21lh; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21s.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21s.java index 5ae75060..d2fd9661 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21s.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21s.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction21s; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21s; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21t.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21t.java index 11e17564..c5bfc442 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21t.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction21t.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction21t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21t; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22b.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22b.java index f1360467..c8192d1e 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22b.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22b.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction22b; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22b; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22c.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22c.java index 4d7dacbe..a56af345 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22c.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22c.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction22c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22s.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22s.java index 81897688..5063d0d2 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22s.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22s.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction22s; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22s; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22t.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22t.java index 8f4811d9..4d4b24af 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22t.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22t.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction22t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22t; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22x.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22x.java index 5cc8b004..2184ed68 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22x.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction22x.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction22x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22x; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction23x.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction23x.java index 3cc60d89..17cb5364 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction23x.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction23x.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction23x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction23x; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction30t.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction30t.java index 324fc773..e1e051ae 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction30t.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction30t.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction30t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction30t; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31c.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31c.java index ffea2175..ce6955e5 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31c.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31c.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction31c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31c; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31i.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31i.java index 0fef6674..f9b4a73d 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31i.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31i.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction31i; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31t.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31t.java index 142fd446..a287e521 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31t.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction31t.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction31t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31t; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction32x.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction32x.java index 1ac27deb..b9c5108d 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction32x.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction32x.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction32x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction32x; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction35c.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction35c.java index a3ddcce0..d73f7fec 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction35c.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction35c.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction35c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction3rc.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction3rc.java index 509e6b75..8f3e29f2 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction3rc.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction3rc.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction3rc; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction3rc; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction51l.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction51l.java index 3b58628b..83ec21ef 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction51l.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaInstruction51l.java @@ -31,7 +31,7 @@ package org.jf.smalidea.dexlib.instruction; -import org.jf.dexlib2.iface.instruction.formats.Instruction51l; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction51l; import org.jf.smalidea.psi.impl.SmaliInstruction; import javax.annotation.Nonnull; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaPackedSwitchPayload.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaPackedSwitchPayload.java index 6056da37..07346242 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaPackedSwitchPayload.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaPackedSwitchPayload.java @@ -32,9 +32,9 @@ package org.jf.smalidea.dexlib.instruction; import com.google.common.collect.Lists; -import org.jf.dexlib2.Opcode; -import org.jf.dexlib2.iface.instruction.SwitchElement; -import org.jf.dexlib2.iface.instruction.formats.PackedSwitchPayload; +import com.android.tools.smali.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.iface.instruction.SwitchElement; +import com.android.tools.smali.dexlib2.iface.instruction.formats.PackedSwitchPayload; import org.jf.smalidea.psi.impl.*; import org.jf.smalidea.util.InstructionUtils; diff --git a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaSparseSwitchPayload.java b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaSparseSwitchPayload.java index 832c8807..d6df5c57 100644 --- a/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaSparseSwitchPayload.java +++ b/src/main/java/org/jf/smalidea/dexlib/instruction/SmalideaSparseSwitchPayload.java @@ -33,9 +33,9 @@ import com.google.common.base.Function; import com.google.common.collect.Lists; -import org.jf.dexlib2.Opcode; -import org.jf.dexlib2.iface.instruction.SwitchElement; -import org.jf.dexlib2.iface.instruction.formats.SparseSwitchPayload; +import com.android.tools.smali.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.iface.instruction.SwitchElement; +import com.android.tools.smali.dexlib2.iface.instruction.formats.SparseSwitchPayload; import org.jf.smalidea.psi.impl.*; import org.jf.smalidea.util.InstructionUtils; diff --git a/src/main/java/org/jf/smalidea/errorReporting/ErrorReporter.java b/src/main/java/org/jf/smalidea/errorReporting/ErrorReporter.java index 8ebe6fc2..86d466ba 100644 --- a/src/main/java/org/jf/smalidea/errorReporting/ErrorReporter.java +++ b/src/main/java/org/jf/smalidea/errorReporting/ErrorReporter.java @@ -40,7 +40,7 @@ import com.intellij.openapi.updateSettings.impl.UpdateSettings; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Consumer; -import com.intellij.util.SystemProperties; +import org.apache.commons.lang3.SystemProperties; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/org/jf/smalidea/findUsages/SmaliClassReferenceSearcher.java b/src/main/java/org/jf/smalidea/findUsages/SmaliClassReferenceSearcher.java index 6c80dff9..17ee1a67 100644 --- a/src/main/java/org/jf/smalidea/findUsages/SmaliClassReferenceSearcher.java +++ b/src/main/java/org/jf/smalidea/findUsages/SmaliClassReferenceSearcher.java @@ -34,20 +34,28 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.QueryExecutorBase; import com.intellij.openapi.progress.EmptyProgressIndicator; +import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiManager; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.search.LowLevelSearchUtil; import com.intellij.psi.search.*; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.search.searches.ReferencesSearch.SearchParameters; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.Processor; import com.intellij.util.text.StringSearcher; import org.jetbrains.annotations.NotNull; +import org.jf.smalidea.SmaliFileType; import org.jf.smalidea.util.NameUtils; +import java.util.Collection; + public class SmaliClassReferenceSearcher extends QueryExecutorBase { @Override public void processQuery( final SearchParameters queryParameters, @@ -56,6 +64,8 @@ public class SmaliClassReferenceSearcher extends QueryExecutorBase() { @@ -73,8 +83,6 @@ public class SmaliClassReferenceSearcher extends QueryExecutorBase() { @Override public SearchScope compute() { @@ -99,23 +107,18 @@ public void run() { }); } } else if (querySearchScope instanceof GlobalSearchScope) { - PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(element.getProject()); - // TODO: limit search scope to only smali files. See, e.g. AnnotatedPackagesSearcher.PackageInfoFilesOnly - helper.processAllFilesWithWord(smaliType, (GlobalSearchScope)querySearchScope, - new Processor() { - @Override - public boolean process(PsiFile file) { - LowLevelSearchUtil.processElementsContainingWordInElement( - new TextOccurenceProcessor() { - @Override public boolean execute( - @NotNull PsiElement element, int offsetInElement) { - return processor.processTextOccurrence(element, offsetInElement, consumer); - } - }, - file, stringSearcher, true, new EmptyProgressIndicator()); - return true; - } - }, true); + ApplicationManager.getApplication().runReadAction(() -> { + Collection smaliVirtualFiles = FileTypeIndex.getFiles(SmaliFileType.INSTANCE, (GlobalSearchScope)querySearchScope); + for (VirtualFile vf : smaliVirtualFiles) { + ProgressManager.checkCanceled(); + PsiFile psiFile = PsiManager.getInstance(project).findFile(vf); + if (psiFile != null) { + LowLevelSearchUtil.processElementsContainingWordInElement((psiElement, offsetInElement) -> { + return processor.processTextOccurrence(psiElement, offsetInElement, consumer); + }, psiFile, stringSearcher, true, new EmptyProgressIndicator()); + } + } + }); } else { assert false; return; diff --git a/src/main/java/org/jf/smalidea/findUsages/SmaliFindUsagesHandlerFactory.java b/src/main/java/org/jf/smalidea/findUsages/SmaliFindUsagesHandlerFactory.java new file mode 100644 index 00000000..18e7e9e8 --- /dev/null +++ b/src/main/java/org/jf/smalidea/findUsages/SmaliFindUsagesHandlerFactory.java @@ -0,0 +1,55 @@ +/* + * Copyright 2025, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.smalidea.findUsages; + +import com.intellij.find.findUsages.JavaFindUsagesHandlerFactory; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; +import org.jf.smalidea.psi.impl.SmaliClass; +import org.jf.smalidea.psi.impl.SmaliField; +import org.jf.smalidea.psi.impl.SmaliMethod; + +// This handler simply delegates to the JavaFindUsagesHandlerFactory. +// However, JavaFindUsagesHandlerFactory appears at the end of the extension points list, +// and other handlers may take over, such as the ClangFindUsagesHandlerFactory, failing the search. +public class SmaliFindUsagesHandlerFactory extends JavaFindUsagesHandlerFactory { + + public SmaliFindUsagesHandlerFactory(Project project) { + super(project); + } + + @Override + public boolean canFindUsages(@NotNull PsiElement element) { + return element instanceof SmaliMethod || element instanceof SmaliField || element instanceof SmaliClass; + } +} diff --git a/src/main/java/org/jf/smalidea/findUsages/SmaliUsageTypeProvider.java b/src/main/java/org/jf/smalidea/findUsages/SmaliUsageTypeProvider.java index ad869421..407cc63b 100644 --- a/src/main/java/org/jf/smalidea/findUsages/SmaliUsageTypeProvider.java +++ b/src/main/java/org/jf/smalidea/findUsages/SmaliUsageTypeProvider.java @@ -37,7 +37,7 @@ import com.intellij.usages.impl.rules.UsageTypeProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jf.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.Opcode; import org.jf.smalidea.SmaliTokens; import org.jf.smalidea.psi.impl.*; diff --git a/src/main/java/org/jf/smalidea/psi/impl/SmaliAnnotation.java b/src/main/java/org/jf/smalidea/psi/impl/SmaliAnnotation.java index ac3dd81f..0db17f3a 100644 --- a/src/main/java/org/jf/smalidea/psi/impl/SmaliAnnotation.java +++ b/src/main/java/org/jf/smalidea/psi/impl/SmaliAnnotation.java @@ -108,9 +108,4 @@ public T setDeclaredAttributeValue( @Nullable @Override public PsiAnnotationOwner getOwner() { return (PsiAnnotationOwner)getParentByStub(); } - - @Nullable @Override public PsiMetaData getMetaData() { - // I have no idea what this is - return null; - } } diff --git a/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java b/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java index e2610563..d444b688 100644 --- a/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java +++ b/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java @@ -442,4 +442,17 @@ public Icon getIcon(boolean unused) { int basicClassKind = ElementPresentationUtil.getBasicClassKind(this); return IconUtils.getElementIcon(this, ElementPresentationUtil.getClassIconOfKind(this, basicClassKind)); } + + @Override + public int getTextOffset() { + SmaliClassStatement statement = findChildByClass(SmaliClassStatement.class); + if (statement == null) { + return super.getTextOffset(); + } + SmaliClassTypeElement descriptor = statement.getNameElement(); + if (descriptor == null) { + return super.getTextOffset(); + } + return descriptor.getTextOffset(); + } } \ No newline at end of file diff --git a/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java b/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java index ecbdbb33..bdde8c93 100644 --- a/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java +++ b/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java @@ -35,11 +35,11 @@ import com.intellij.lang.ASTNode; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jf.dexlib2.Format; -import org.jf.dexlib2.Opcode; -import org.jf.dexlib2.Opcodes; -import org.jf.dexlib2.analysis.AnalyzedInstruction; -import org.jf.dexlib2.analysis.MethodAnalyzer; +import com.android.tools.smali.dexlib2.Format; +import com.android.tools.smali.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.Opcodes; +import com.android.tools.smali.dexlib2.analysis.AnalyzedInstruction; +import com.android.tools.smali.dexlib2.analysis.MethodAnalyzer; import org.jf.smalidea.SmaliTokens; import org.jf.smalidea.psi.SmaliCompositeElementFactory; import org.jf.smalidea.psi.SmaliElementTypes; diff --git a/src/main/java/org/jf/smalidea/psi/impl/SmaliLiteral.java b/src/main/java/org/jf/smalidea/psi/impl/SmaliLiteral.java index 0a9f5382..9160c8b8 100644 --- a/src/main/java/org/jf/smalidea/psi/impl/SmaliLiteral.java +++ b/src/main/java/org/jf/smalidea/psi/impl/SmaliLiteral.java @@ -34,7 +34,7 @@ import com.intellij.lang.ASTNode; import com.intellij.psi.PsiAnnotationMemberValue; import com.intellij.psi.tree.IElementType; -import org.jf.smali.LiteralTools; +import com.android.tools.smali.smali.LiteralTools; import org.jf.smalidea.SmaliTokens; import org.jf.smalidea.psi.SmaliCompositeElementFactory; import org.jf.smalidea.psi.SmaliElementTypes; diff --git a/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java b/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java index f90a5fa0..3e965dfe 100644 --- a/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java +++ b/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java @@ -50,9 +50,9 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jf.dexlib2.analysis.AnalysisException; -import org.jf.dexlib2.analysis.ClassPath; -import org.jf.dexlib2.analysis.MethodAnalyzer; +import com.android.tools.smali.dexlib2.analysis.AnalysisException; +import com.android.tools.smali.dexlib2.analysis.ClassPath; +import com.android.tools.smali.dexlib2.analysis.MethodAnalyzer; import org.jf.smalidea.dexlib.SmalideaMethod; import org.jf.smalidea.dexlib.analysis.SmalideaClassProvider; import org.jf.smalidea.psi.SmaliElementTypes; diff --git a/src/main/java/org/jf/smalidea/psi/impl/SmaliModifierList.java b/src/main/java/org/jf/smalidea/psi/impl/SmaliModifierList.java index c23763fc..b318b661 100644 --- a/src/main/java/org/jf/smalidea/psi/impl/SmaliModifierList.java +++ b/src/main/java/org/jf/smalidea/psi/impl/SmaliModifierList.java @@ -44,7 +44,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jf.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.AccessFlags; import org.jf.smalidea.SmaliTokens; import org.jf.smalidea.psi.iface.SmaliModifierListOwner; import org.jf.smalidea.psi.stub.SmaliModifierListStub; diff --git a/src/main/java/org/jf/smalidea/psi/index/SmaliClassNameIndex.java b/src/main/java/org/jf/smalidea/psi/index/SmaliClassNameIndex.java index 0429597a..3d6b72a3 100644 --- a/src/main/java/org/jf/smalidea/psi/index/SmaliClassNameIndex.java +++ b/src/main/java/org/jf/smalidea/psi/index/SmaliClassNameIndex.java @@ -48,4 +48,9 @@ private SmaliClassNameIndex() { @NotNull @Override public StubIndexKey getKey() { return KEY; } + + @Override + public boolean traceKeyHashToVirtualFileMapping() { + return true; + } } diff --git a/src/main/java/org/jf/smalidea/util/IconUtils.java b/src/main/java/org/jf/smalidea/util/IconUtils.java index 5a24bd46..3da68b2f 100644 --- a/src/main/java/org/jf/smalidea/util/IconUtils.java +++ b/src/main/java/org/jf/smalidea/util/IconUtils.java @@ -2,7 +2,7 @@ import com.intellij.ui.RowIcon; import com.intellij.util.PlatformIcons; -import org.jf.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.AccessFlags; import org.jf.smalidea.psi.iface.SmaliModifierListOwner; import org.jf.smalidea.psi.impl.SmaliModifierList; diff --git a/src/main/java/org/jf/smalidea/util/InstructionUtils.java b/src/main/java/org/jf/smalidea/util/InstructionUtils.java index e302b01e..3d7aae9c 100644 --- a/src/main/java/org/jf/smalidea/util/InstructionUtils.java +++ b/src/main/java/org/jf/smalidea/util/InstructionUtils.java @@ -33,7 +33,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jf.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.Opcode; import org.jf.smalidea.psi.impl.SmaliInstruction; import org.jf.smalidea.psi.impl.SmaliLabel; import org.jf.smalidea.psi.impl.SmaliLabelReference; diff --git a/src/main/java/org/jf/smalidea/util/NameUtils.java b/src/main/java/org/jf/smalidea/util/NameUtils.java index 47cb08ca..1d276e4e 100644 --- a/src/main/java/org/jf/smalidea/util/NameUtils.java +++ b/src/main/java/org/jf/smalidea/util/NameUtils.java @@ -169,7 +169,9 @@ public static PsiClass resolveSmaliType(@NotNull Project project, @NotNull Globa @Nullable public static PsiClass resolveSmaliType(@NotNull PsiElement element, @NotNull String smaliType) { - GlobalSearchScope scope = ResolveScopeManager.getElementResolveScope(element); + // UseScope as a fallback when smali files are not marked as sources + GlobalSearchScope scope = ResolveScopeManager.getElementResolveScope(element) + .union(ResolveScopeManager.getElementUseScope(element)); return resolveSmaliType(element.getProject(), scope, smaliType); } diff --git a/src/main/java/org/jf/smalidea/util/StringUtils.java b/src/main/java/org/jf/smalidea/util/StringUtils.java index 031bd6d4..e7b0a23d 100644 --- a/src/main/java/org/jf/smalidea/util/StringUtils.java +++ b/src/main/java/org/jf/smalidea/util/StringUtils.java @@ -33,8 +33,8 @@ import org.antlr.runtime.CommonToken; import org.jetbrains.annotations.Nullable; -import org.jf.smali.smaliFlexLexer; -import org.jf.smali.smaliParser; +import com.android.tools.smali.smali.smaliFlexLexer; +import com.android.tools.smali.smali.smaliParser; import java.io.StringReader; diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 050e2003..6c593ebf 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ org.jf.smalidea Smalidea - 0.06 + 0.08 JesusFreke + + + + diff --git a/src/test/java/org/jf/smalidea/AnnotationElementNameReferenceTest.java b/src/test/java/org/jf/smalidea/AnnotationElementNameReferenceTest.java index b11193a8..c4b07606 100644 --- a/src/test/java/org/jf/smalidea/AnnotationElementNameReferenceTest.java +++ b/src/test/java/org/jf/smalidea/AnnotationElementNameReferenceTest.java @@ -32,10 +32,10 @@ package org.jf.smalidea; import com.intellij.psi.*; -import com.intellij.testFramework.ResolveTestCase; +import com.intellij.testFramework.JavaResolveTestCase; import org.junit.Assert; -public class AnnotationElementNameReferenceTest extends ResolveTestCase { +public class AnnotationElementNameReferenceTest extends JavaResolveTestCase { public void testSmaliReferenceFromSmali() throws Exception { createFile("AnnotationWithValues.smali", "" + ".class public abstract interface annotation LAnnotationWithValues;\n" + diff --git a/src/test/java/org/jf/smalidea/ClassReferenceTest.java b/src/test/java/org/jf/smalidea/ClassReferenceTest.java index 9d61bf02..127f2981 100644 --- a/src/test/java/org/jf/smalidea/ClassReferenceTest.java +++ b/src/test/java/org/jf/smalidea/ClassReferenceTest.java @@ -37,12 +37,13 @@ import com.intellij.psi.JavaResolveResult; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiReference; -import com.intellij.testFramework.ResolveTestCase; +import com.intellij.testFramework.DumbModeTestUtils; +import com.intellij.testFramework.JavaResolveTestCase; import org.jf.smalidea.psi.impl.SmaliClass; import org.jf.smalidea.psi.impl.SmaliClassTypeElement; import org.junit.Assert; -public class ClassReferenceTest extends ResolveTestCase { +public class ClassReferenceTest extends JavaResolveTestCase { /** * Test a reference to a java class from a smali class */ @@ -77,12 +78,10 @@ public void testJavaReferenceFromSmaliInDumbMode() throws Exception { Assert.assertNotNull(typeElement); Assert.assertEquals("Object", typeElement.getName()); - DumbServiceImpl.getInstance(getProject()).setDumb(true); - - PsiClass psiClass = typeElement.resolve(); - Assert.assertNull(psiClass); - - DumbServiceImpl.getInstance(getProject()).setDumb(false); + DumbModeTestUtils.runInDumbModeSynchronously(getProject(), () -> { + PsiClass psiClass = typeElement.resolve(); + Assert.assertNull(psiClass); + }); } /** diff --git a/src/test/java/org/jf/smalidea/FieldReferenceTest.java b/src/test/java/org/jf/smalidea/FieldReferenceTest.java index 78360d8b..26e23c51 100644 --- a/src/test/java/org/jf/smalidea/FieldReferenceTest.java +++ b/src/test/java/org/jf/smalidea/FieldReferenceTest.java @@ -35,11 +35,11 @@ import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.psi.PsiField; import com.intellij.psi.PsiReference; -import com.intellij.testFramework.ResolveTestCase; +import com.intellij.testFramework.JavaResolveTestCase; import org.jf.smalidea.psi.impl.SmaliFieldReference; import org.junit.Assert; -public class FieldReferenceTest extends ResolveTestCase { +public class FieldReferenceTest extends JavaResolveTestCase { /** * Test a reference to a java field from a smali class */ diff --git a/src/test/java/org/jf/smalidea/LightCodeInsightParsingTestCase.java b/src/test/java/org/jf/smalidea/LightCodeInsightParsingTestCase.java index 290021ac..f1380af0 100644 --- a/src/test/java/org/jf/smalidea/LightCodeInsightParsingTestCase.java +++ b/src/test/java/org/jf/smalidea/LightCodeInsightParsingTestCase.java @@ -30,7 +30,7 @@ import com.intellij.testFramework.LightVirtualFile; import com.intellij.testFramework.TestDataFile; import com.intellij.testFramework.UsefulTestCase; -import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; +import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -46,7 +46,7 @@ * This was originally based on com.intellij.testFramework.ParsingTestCase, but was modified * to use the LightCodeInsightFixtureTestCase base class, which provides more functionality */ -public abstract class LightCodeInsightParsingTestCase extends LightCodeInsightFixtureTestCase { +public abstract class LightCodeInsightParsingTestCase extends LightJavaCodeInsightFixtureTestCase { protected final String myFilePrefix = ""; protected final String myFileExt; @NonNls protected final String myFullDataPath; @@ -76,8 +76,8 @@ protected boolean includeRanges() { return false; } - protected boolean skipSpaces() { - return false; + protected boolean showWhitespaces() { + return true; } protected boolean checkAllPsiRoots() { @@ -110,7 +110,7 @@ protected void doTest(boolean checkResult) { checkResult(name, f); } else{ - toParseTreeText(f, skipSpaces(), includeRanges()); + toParseTreeText(f, showWhitespaces(), includeRanges()); } } catch (IOException e) { @@ -153,27 +153,27 @@ protected PsiFile createFile(LightVirtualFile virtualFile) { } protected void checkResult(@NonNls @TestDataFile String targetDataName, final PsiFile file) throws IOException { - doCheckResult(myFullDataPath, file, checkAllPsiRoots(), targetDataName, skipSpaces(), includeRanges()); + doCheckResult(myFullDataPath, file, checkAllPsiRoots(), targetDataName, showWhitespaces(), includeRanges()); } public static void doCheckResult(String myFullDataPath, PsiFile file, boolean checkAllPsiRoots, String targetDataName, - boolean skipSpaces, + boolean showWhitespaces, boolean printRanges) throws IOException { FileViewProvider provider = file.getViewProvider(); Set languages = provider.getLanguages(); if (!checkAllPsiRoots || languages.size() == 1) { - doCheckResult(myFullDataPath, targetDataName + ".txt", toParseTreeText(file, skipSpaces, printRanges).trim()); + doCheckResult(myFullDataPath, targetDataName + ".txt", toParseTreeText(file, showWhitespaces, printRanges).trim()); return; } for (Language language : languages) { PsiFile root = provider.getPsi(language); String expectedName = targetDataName + "." + language.getID() + ".txt"; - doCheckResult(myFullDataPath, expectedName, toParseTreeText(root, skipSpaces, printRanges).trim()); + doCheckResult(myFullDataPath, expectedName, toParseTreeText(root, showWhitespaces, printRanges).trim()); } } @@ -186,8 +186,8 @@ public static void doCheckResult(String fullPath, String targetDataName, String UsefulTestCase.assertSameLinesWithFile(expectedFileName, text); } - protected static String toParseTreeText(final PsiElement file, boolean skipSpaces, boolean printRanges) { - return DebugUtil.psiToString(file, skipSpaces, printRanges); + protected static String toParseTreeText(final PsiElement file, boolean showWhitespaces, boolean printRanges) { + return DebugUtil.psiToString(file, showWhitespaces, printRanges); } protected String loadFile(@NonNls @TestDataFile String name) throws IOException { diff --git a/src/test/java/org/jf/smalidea/MethodReferenceTest.java b/src/test/java/org/jf/smalidea/MethodReferenceTest.java index 1de65983..167b9bdf 100644 --- a/src/test/java/org/jf/smalidea/MethodReferenceTest.java +++ b/src/test/java/org/jf/smalidea/MethodReferenceTest.java @@ -35,11 +35,11 @@ import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiReference; -import com.intellij.testFramework.ResolveTestCase; +import com.intellij.testFramework.JavaResolveTestCase; import org.jf.smalidea.psi.impl.SmaliMethodReference; import org.junit.Assert; -public class MethodReferenceTest extends ResolveTestCase { +public class MethodReferenceTest extends JavaResolveTestCase { /** * Test a reference to a java method from a smali class */ diff --git a/src/test/java/org/jf/smalidea/SmaliClassModifierListTest.java b/src/test/java/org/jf/smalidea/SmaliClassModifierListTest.java index a841d0f1..d502070d 100644 --- a/src/test/java/org/jf/smalidea/SmaliClassModifierListTest.java +++ b/src/test/java/org/jf/smalidea/SmaliClassModifierListTest.java @@ -34,7 +34,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.psi.PsiModifierListOwner; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; -import org.jf.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.AccessFlags; import org.jf.smalidea.psi.impl.SmaliAnnotation; import org.jf.smalidea.psi.impl.SmaliClass; import org.jf.smalidea.psi.impl.SmaliFile; diff --git a/src/test/java/org/jf/smalidea/SmaliCodeFragmentFactoryTest.java b/src/test/java/org/jf/smalidea/SmaliCodeFragmentFactoryTest.java index c61d3e44..45bbf2da 100644 --- a/src/test/java/org/jf/smalidea/SmaliCodeFragmentFactoryTest.java +++ b/src/test/java/org/jf/smalidea/SmaliCodeFragmentFactoryTest.java @@ -32,7 +32,7 @@ package org.jf.smalidea; import com.google.common.collect.Sets; -import com.intellij.codeInsight.CodeInsightTestCase; +import com.intellij.codeInsight.JavaCodeInsightTestCase; import com.intellij.codeInsight.completion.CodeCompletionHandlerBase; import com.intellij.codeInsight.completion.CompletionType; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; @@ -60,7 +60,7 @@ import java.util.HashSet; import java.util.List; -public class SmaliCodeFragmentFactoryTest extends CodeInsightTestCase { +public class SmaliCodeFragmentFactoryTest extends JavaCodeInsightTestCase { private static final String completionTestClass = ".class public Lmy/pkg/blah; .super Ljava/lang/Object;\n" + ".method public getRandomParentType(I)I\n" + diff --git a/src/test/java/org/jf/smalidea/SmaliFieldTest.java b/src/test/java/org/jf/smalidea/SmaliFieldTest.java index 05e46bc2..aa960788 100644 --- a/src/test/java/org/jf/smalidea/SmaliFieldTest.java +++ b/src/test/java/org/jf/smalidea/SmaliFieldTest.java @@ -35,7 +35,7 @@ import com.intellij.psi.PsiPrimitiveType; import com.intellij.psi.PsiTypeElement; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; -import org.jf.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.AccessFlags; import org.jf.smalidea.psi.impl.SmaliClass; import org.jf.smalidea.psi.impl.SmaliField; import org.jf.smalidea.psi.impl.SmaliFile; diff --git a/src/test/java/org/jf/smalidea/SmaliInstructionTest.java b/src/test/java/org/jf/smalidea/SmaliInstructionTest.java index 37ea555c..ac678bdf 100644 --- a/src/test/java/org/jf/smalidea/SmaliInstructionTest.java +++ b/src/test/java/org/jf/smalidea/SmaliInstructionTest.java @@ -33,7 +33,7 @@ import com.intellij.psi.PsiElement; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; -import org.jf.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.Opcode; import org.jf.smalidea.psi.impl.SmaliFile; import org.jf.smalidea.psi.impl.SmaliInstruction; import org.junit.Assert; diff --git a/src/test/java/org/jf/smalidea/SmaliLabelReferenceTest.java b/src/test/java/org/jf/smalidea/SmaliLabelReferenceTest.java index 628cf0f5..12cf18e4 100644 --- a/src/test/java/org/jf/smalidea/SmaliLabelReferenceTest.java +++ b/src/test/java/org/jf/smalidea/SmaliLabelReferenceTest.java @@ -31,14 +31,14 @@ package org.jf.smalidea; -import com.intellij.testFramework.ResolveTestCase; -import org.jf.dexlib2.Opcode; +import com.intellij.testFramework.JavaResolveTestCase; +import com.android.tools.smali.dexlib2.Opcode; import org.jf.smalidea.psi.impl.SmaliInstruction; import org.jf.smalidea.psi.impl.SmaliLabel; import org.jf.smalidea.psi.impl.SmaliLabelReference; import org.junit.Assert; -public class SmaliLabelReferenceTest extends ResolveTestCase { +public class SmaliLabelReferenceTest extends JavaResolveTestCase { public void testLabelReference() throws Exception { String text = diff --git a/src/test/java/org/jf/smalidea/SmaliMethodTest.java b/src/test/java/org/jf/smalidea/SmaliMethodTest.java index 6af96757..0b47dd91 100644 --- a/src/test/java/org/jf/smalidea/SmaliMethodTest.java +++ b/src/test/java/org/jf/smalidea/SmaliMethodTest.java @@ -35,7 +35,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiPrimitiveType; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; -import org.jf.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.Opcode; import org.jf.smalidea.psi.impl.*; import org.junit.Assert; diff --git a/src/test/java/org/jf/smalidea/SmaliPositionManagerTest.java b/src/test/java/org/jf/smalidea/SmaliPositionManagerTest.java index 596c11ed..ef408cfb 100644 --- a/src/test/java/org/jf/smalidea/SmaliPositionManagerTest.java +++ b/src/test/java/org/jf/smalidea/SmaliPositionManagerTest.java @@ -44,13 +44,14 @@ import com.intellij.debugger.requests.RequestManager; import com.intellij.execution.ExecutionResult; import com.intellij.execution.process.ProcessHandler; +import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import com.sun.jdi.*; import org.jetbrains.annotations.NotNull; -import org.jf.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.Opcode; import org.jf.smalidea.debugging.SmaliPositionManager; import org.jf.smalidea.psi.impl.SmaliInstruction; import org.junit.Assert; @@ -175,6 +176,7 @@ private class MockDebugProcess implements DebugProcess { @NotNull @Override public GlobalSearchScope getSearchScope() { return null; } @Override public void printToConsole(String text) {} @Override public ProcessHandler getProcessHandler() { return null; } + @Override public void addDebugProcessListener(DebugProcessListener debugProcessListener, Disposable disposable) {} } private static class MockReferenceType implements ReferenceType { diff --git a/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java b/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java index e9aa35fc..ad69b127 100644 --- a/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java +++ b/src/test/java/org/jf/smalidea/dexlib/SmalideaMethodTest.java @@ -33,18 +33,18 @@ import com.google.common.collect.Lists; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; -import org.jf.dexlib2.AccessFlags; -import org.jf.dexlib2.Opcode; -import org.jf.dexlib2.iface.ExceptionHandler; -import org.jf.dexlib2.iface.MethodImplementation; -import org.jf.dexlib2.iface.MethodParameter; -import org.jf.dexlib2.iface.TryBlock; -import org.jf.dexlib2.iface.instruction.Instruction; -import org.jf.dexlib2.iface.instruction.SwitchElement; -import org.jf.dexlib2.iface.instruction.formats.*; -import org.jf.dexlib2.iface.reference.FieldReference; -import org.jf.dexlib2.iface.reference.StringReference; -import org.jf.dexlib2.util.ReferenceUtil; +import com.android.tools.smali.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.iface.ExceptionHandler; +import com.android.tools.smali.dexlib2.iface.MethodImplementation; +import com.android.tools.smali.dexlib2.iface.MethodParameter; +import com.android.tools.smali.dexlib2.iface.TryBlock; +import com.android.tools.smali.dexlib2.iface.instruction.Instruction; +import com.android.tools.smali.dexlib2.iface.instruction.SwitchElement; +import com.android.tools.smali.dexlib2.iface.instruction.formats.*; +import com.android.tools.smali.dexlib2.iface.reference.FieldReference; +import com.android.tools.smali.dexlib2.iface.reference.StringReference; +import com.android.tools.smali.dexlib2.util.ReferenceUtil; import org.jf.smalidea.psi.impl.SmaliClass; import org.jf.smalidea.psi.impl.SmaliFile; import org.jf.smalidea.psi.impl.SmaliMethod; diff --git a/src/test/java/org/jf/smalidea/findUsages/ClassUsageTypeTest.java b/src/test/java/org/jf/smalidea/findUsages/ClassUsageTypeTest.java index 4b5f61d2..4ea2f813 100644 --- a/src/test/java/org/jf/smalidea/findUsages/ClassUsageTypeTest.java +++ b/src/test/java/org/jf/smalidea/findUsages/ClassUsageTypeTest.java @@ -35,7 +35,7 @@ public class ClassUsageTypeTest extends UsageTypeTest { public ClassUsageTypeTest() { - super(new SmaliUsageTypeProvider()); + super(SmaliUsageTypeProvider::new); } public void testClassUsageTypes() throws Exception { diff --git a/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java b/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java index e0a7178e..6897feee 100644 --- a/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java +++ b/src/test/java/org/jf/smalidea/findUsages/FieldUsageTypeTest.java @@ -35,7 +35,7 @@ public class FieldUsageTypeTest extends UsageTypeTest { public FieldUsageTypeTest() { - super(new SmaliUsageTypeProvider()); + super(SmaliUsageTypeProvider::new); } public void testFieldUsageTypes() throws Exception { diff --git a/src/test/java/org/jf/smalidea/findUsages/FindUsagesTest.java b/src/test/java/org/jf/smalidea/findUsages/FindUsagesTest.java index f4e2b0ff..dd3d1efa 100644 --- a/src/test/java/org/jf/smalidea/findUsages/FindUsagesTest.java +++ b/src/test/java/org/jf/smalidea/findUsages/FindUsagesTest.java @@ -41,7 +41,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; -import com.intellij.testFramework.PsiTestCase; +import com.intellij.testFramework.JavaPsiTestCase; import com.intellij.usageView.UsageInfo; import com.intellij.usages.PsiElementUsageTarget; import com.intellij.usages.UsageTarget; @@ -55,7 +55,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public abstract class FindUsagesTest extends PsiTestCase { +public abstract class FindUsagesTest extends JavaPsiTestCase { public static final String USAGE_TAG = ""; public static final String REF_TAG = ""; @@ -129,7 +129,7 @@ protected void doTest() { if (reference != null) { targetElement = reference.resolve(); } else { - targetElement = TargetElementUtilBase.getInstance().getNamedElement( + targetElement = TargetElementUtilBase.getNamedElement( testFile.psiFile.findElementAt(refIndex), 0); } } diff --git a/src/test/java/org/jf/smalidea/findUsages/HighlightLocalClassUsagesTest.java b/src/test/java/org/jf/smalidea/findUsages/HighlightLocalClassUsagesTest.java index ffec82cd..c29cb3da 100644 --- a/src/test/java/org/jf/smalidea/findUsages/HighlightLocalClassUsagesTest.java +++ b/src/test/java/org/jf/smalidea/findUsages/HighlightLocalClassUsagesTest.java @@ -38,12 +38,13 @@ import com.intellij.psi.PsiReference; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; -import com.intellij.testFramework.PsiTestCase; +import com.intellij.testFramework.JavaPsiTestCase; import org.junit.Assert; +import java.util.Comparator; import java.util.List; -public class HighlightLocalClassUsagesTest extends PsiTestCase { +public class HighlightLocalClassUsagesTest extends JavaPsiTestCase { public void testHighlightLocalClassUsage() throws Exception { String fileText = "" + ".class public Lblarg; .super Ljava/lang/Object;\n" + @@ -62,13 +63,15 @@ public void testHighlightLocalClassUsage() throws Exception { if (reference != null) { target = reference.resolve(); } else { - target = TargetElementUtilBase.getInstance().getNamedElement( - file.findElementAt(refIndex), 0); + target = TargetElementUtilBase.getNamedElement(file.findElementAt(refIndex), 0); } final LocalSearchScope scope = new LocalSearchScope(file); - - List refs = Lists.newArrayList(ReferencesSearch.search(target, scope).findAll()); + List refs = Lists.newArrayList(ReferencesSearch.search(target, scope) + .findAll() + .stream() + .sorted(Comparator.comparingInt(ref -> ref.getElement().getTextOffset())) + .toList()); Assert.assertEquals(2, refs.size()); Assert.assertEquals(file.findElementAt(refIndex).getTextOffset(), refs.get(0).getElement().getTextOffset()); diff --git a/src/test/java/org/jf/smalidea/findUsages/MethodUsageTypeTest.java b/src/test/java/org/jf/smalidea/findUsages/MethodUsageTypeTest.java index 0ca6c398..1e18f618 100644 --- a/src/test/java/org/jf/smalidea/findUsages/MethodUsageTypeTest.java +++ b/src/test/java/org/jf/smalidea/findUsages/MethodUsageTypeTest.java @@ -35,7 +35,7 @@ public class MethodUsageTypeTest extends UsageTypeTest { public MethodUsageTypeTest() { - super(new SmaliUsageTypeProvider()); + super(SmaliUsageTypeProvider::new); } public void testMethodUsageTypes() throws Exception { diff --git a/src/test/java/org/jf/smalidea/findUsages/UsageTypeProviderFactory.java b/src/test/java/org/jf/smalidea/findUsages/UsageTypeProviderFactory.java new file mode 100644 index 00000000..065a32dd --- /dev/null +++ b/src/test/java/org/jf/smalidea/findUsages/UsageTypeProviderFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright 2025, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.smalidea.findUsages; + +import com.intellij.usages.impl.rules.UsageTypeProvider; + +public interface UsageTypeProviderFactory { + UsageTypeProvider create(); +} diff --git a/src/test/java/org/jf/smalidea/findUsages/UsageTypeTest.java b/src/test/java/org/jf/smalidea/findUsages/UsageTypeTest.java index fe27f9a5..4fad7ae6 100644 --- a/src/test/java/org/jf/smalidea/findUsages/UsageTypeTest.java +++ b/src/test/java/org/jf/smalidea/findUsages/UsageTypeTest.java @@ -35,7 +35,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; -import com.intellij.testFramework.PsiTestCase; +import com.intellij.testFramework.JavaPsiTestCase; import com.intellij.usages.impl.rules.UsageType; import com.intellij.usages.impl.rules.UsageTypeProvider; import org.jetbrains.annotations.NotNull; @@ -46,15 +46,15 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public abstract class UsageTypeTest extends PsiTestCase { +public abstract class UsageTypeTest extends JavaPsiTestCase { // e.g. , , etc. private static final Pattern REF_PATTERN = Pattern.compile("()"); @NotNull - private final UsageTypeProvider usageTypeProvider; + private final UsageTypeProviderFactory usageTypeProviderFactory; - public UsageTypeTest(@NotNull UsageTypeProvider usageTypeProvider) { - this.usageTypeProvider = usageTypeProvider; + public UsageTypeTest(@NotNull UsageTypeProviderFactory usageTypeProviderFactory) { + this.usageTypeProviderFactory = usageTypeProviderFactory; } protected void doTest(@NotNull String fileName, @NotNull String text, @NotNull Object... expectedUsageTypes) @@ -69,6 +69,7 @@ protected void doTest(@NotNull String fileName, @NotNull String text, @NotNull O PsiFile psiFile = createFile(fileName, REF_PATTERN.matcher(text).replaceAll("")); Map refIndexMap = getRefIndexes(text); + UsageTypeProvider usageTypeProvider = usageTypeProviderFactory.create(); for (Map.Entry entry: refIndexMap.entrySet()) { int refId = entry.getKey(); int index = entry.getValue();