GithubHelp home page GithubHelp logo

manifold-ij's Introduction

manifold-ij

An IntelliJ IDEA plugin for Manifold.

Description

Use the Manifold IntelliJ IDEA plugin to experience Manifold to its fullest.

The plugin provides comprehensive support for Manifold along with high-level IntelliJ features including:

  • Feature highlighting
  • Error reporting
  • Code completion
  • Navigation
  • Usage searching
  • Refactoring
  • Incremental compilation
  • Debugging

Install the plugin directly from IntelliJ via:

SettingsPluginsMarketplace ➜ search: Manifold

Visit the Manifold website for more information.

Development

The plugin can be compiled and tested against different API versions. The default value lives in the defaultIjVersion property in the root gradle.properties file.

Either override this value in gradle.properties locally, or from the command line: gradlew check -DijVersion=15.0.6

manifold-ij's People

Contributors

ice1000 avatar rsmckinney avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

manifold-ij's Issues

`when` clause not working with JDK 21

public class Test {
  sealed interface I {}
  record A(int a) implements I {}

  public static void main(String[] args) {
    I i = new A(1);
    switch (i) {
      case A(var a) when a == 1 -> System.out.println(a);
      default -> System.out.println("default");
    }
  }
}

After installing the manifold plugin, IntelliJ IDEA can no longer parse the above code:
image

Environment:

IntelliJ IDEA 2024.1.2 Preview (Ultimate Edition)
Build #IU-241.17011.2, built on May 7, 2024
Licensed to Yinsen Zhang
Subscription is active until January 8, 2025.
For educational use only.
Runtime version: 17.0.11+1-b1207.20 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11.0
GC: G1 Young Generation, G1 Old Generation
Memory: 2010M
Cores: 20
Registry:
  debugger.new.tool.window.layout=true
  ide.experimental.ui=true
  ide.images.show.chessboard=true
Non-Bundled Plugins:
  org.canonical.intellij (1.0)
  PsiViewer (241.14494.158-EAP-SNAPSHOT)
  com.jetbrains.darkPurpleTheme (1.3)
  com.jetbrains.space (241.17011.2)
  manifold.ij (2023.3.27)
  org.jetbrains.idea.grammar (2022.3.2)
  org.ice1000.kala (0.8)
  org.aya.intellij (0.0.1-SNAPSHOT)
  fuck.idea.jpms (SNAPSHOT)
  com.github.copilot (1.5.3.5510)
  com.perl5 (241.13688.18-EAP-SNAPSHOT)
Kotlin: 241.17011.2-IJ

Related report: https://youtrack.jetbrains.com/issue/IDEA-353282/Java-21-syntax-is-no-longer-supported

'Method is never used ' when using Manifold Properties (Property inference)

When using properties (using a defined method, i.e. Property inference), the method is not marked as used.

MyClass myClass = new MyClass();
int foo = myClass.foo;
int test = myClass.bar; 

-----

public class MyClass {

    @val int foo = 2;  // marked as used

    public int getBar(){  // not marked as used!
        return 5;
    }
}


screenshot 35

screenshot 36

IDE version (IntelliJ IDEA or Android Studio): IntelliJ IDEA 2024.1
Manifold version: 2024.1.12
Manifold IntelliJ plugin version: 2023.3.22

Exception when opening file

When opening a file in Idea Ultimate 2022.2.2 with the Manifold plugin 2022.1.21, the following exception gets thrown

java.lang.InternalError: java.lang.IllegalAccessException: static final field has no write access: com.intellij.psi.impl.java.stubs.JavaStubElementTypes.LITERAL_EXPRESSION/com.intellij.psi.impl.java.stubs.JavaLiteralExpressionElementType/putStatic, from class java.lang.Object (module java.base)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newFieldAccessor(MethodHandleAccessorFactory.java:167)
	at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:176)
	at java.base/java.lang.reflect.Field.acquireOverrideFieldAccessor(Field.java:1184)
	at java.base/java.lang.reflect.Field.getOverrideFieldAccessor(Field.java:1153)
	at java.base/java.lang.reflect.Field.set(Field.java:820)
	at manifold.util.ReflectUtil.setFinal(ReflectUtil.java:1274)
	at manifold.util.ReflectUtil.setFinal(ReflectUtil.java:1261)
	at manifold.util.ReflectUtil.access$400(ReflectUtil.java:56)
	at manifold.util.ReflectUtil$FieldRef.setStatic(ReflectUtil.java:1025)
	at manifold.ij.core.ManApplicationLoadListener.overrideJavaStringLiterals(ManApplicationLoadListener.java:164)
	at manifold.ij.core.ManApplicationLoadListener.overrideJavaParserStuff(ManApplicationLoadListener.java:87)
	at manifold.ij.core.ManApplicationLoadListener.beforeApplicationLoaded(ManApplicationLoadListener.java:67)
	at com.intellij.idea.ApplicationLoader.initConfigurationStore(ApplicationLoader.kt:431)
	at com.intellij.idea.ApplicationLoader$initApplication$block$3.apply(ApplicationLoader.kt:156)
	at com.intellij.idea.ApplicationLoader$initApplication$block$3.apply(ApplicationLoader.kt)
	at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
	at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:614)
	at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1163)
	at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482)
	at com.intellij.idea.ApplicationLoader$initApplication$block$2.execute(ApplicationLoader.kt:142)
	at java.base/java.util.concurrent.CompletableFuture$UniCompletion.claim(CompletableFuture.java:572)
	at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1147)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
	at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:614)
	at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1163)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:483)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.IllegalAccessException: static final field has no write access: com.intellij.psi.impl.java.stubs.JavaStubElementTypes.LITERAL_EXPRESSION/com.intellij.psi.impl.java.stubs.JavaLiteralExpressionElementType/putStatic, from class java.lang.Object (module java.base)
	at java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:955)
	at java.base/java.lang.invoke.MethodHandles$Lookup.unreflectField(MethodHandles.java:3494)
	at java.base/java.lang.invoke.MethodHandles$Lookup.unreflectSetter(MethodHandles.java:3485)
	at java.base/java.lang.invoke.MethodHandleImpl$1.unreflectField(MethodHandleImpl.java:1637)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newFieldAccessor(MethodHandleAccessorFactory.java:145)
	... 31 more

SQL statements that use a table that doesn't exist in the database cause IJ's CPU usage to be high.

When your code contains a SQL statement that uses a table that doesn't exist in the database, and you keep opening the file, you will find that IJ's CPU usage is extremely high.I looked at the database log and found it executes a lot of SQL every second. The SQL is the same as I provided below. If you close the file, CPU usage will be normal.

"[.sql/] insert into table_doesnt_exists(data) values(?) ".execute(ctx, data);

Warning when Synchronize on @val property

When using Manifold properties, annotating a field with @val makes the field final.
However, when using that field in a synchronized block, I get a warning message: Synchronization on a non-final field. This warning should be suppressed.

public class Foo{
    @val Object object;
    
    public Foo(Object object){
        this.object = object;
    }

    public void doSomething(){
        synchronized(object){ // <-- Synchronization on a non-final field warning
            ...
        }
    }
}

Manifold section in Settings -> Editor -> Code Style

          It would be nice to have a Manifold section in Settings -> Editor -> Code Style, where you could configure several things like the color of fields from manifold-props, extension methods from manifold-ext and interpolated variables from manifold-strings, 

For instance it's the default in Kotlin to color extension methods differently than normal methods. That would also be nice in Manifold.

Originally posted by @CC007 in #17 (comment)

[bug] 2024.1.2 doesn't work together with Lombok.

When using version 2024.1.2 (and 2024.1.3), Lombok isn't working anymore (Lombok imports cannot be resolved). Building with maven does work. I don't see any error messages. Latest version that is working is 2024.1.1.
Also many IntelliJ features are working anymore, including but not limited to:

  • browse type hierarchy
  • browse call hierarchy
  • go to implementation
  • go to declaration
  • inspecting code
  • ...

Using IntelliJ IDEA version 2024.1.1.

IntelliJ freezes on "Gradle: Importing maven repository data" after sync

Follow up from https://youtrack.jetbrains.com/issue/KTIJ-19271/IntelliJ-freezes-on-Gradle-Importing-maven-repository-data-after-sync. After a Gradle Sync, IntelliJ stays stuck on "Importing maven repository data" for several seconds/minutes.

It turns out it seems to be stuck in ManLibraryChecker.getManifoldJarsInProject (thread dump)

Environment:

IntelliJ IDEA 2023.3.5 (Community Edition)
Build #IC-233.14808.21, built on March 12, 2024
Runtime version: 17.0.10+1-b1087.21 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 14.4
GC: G1 Young Generation, G1 Old Generation
Memory: 4096M
Cores: 10
Metal Rendering is ON
Registry:
  debugger.mayBringFrameToFrontOnBreakpoint=false
  debugger.new.tool.window.layout=true
  ide.experimental.ui=true
Non-Bundled Plugins:
  org.intellij.plugins.hcl (233.13135.65)
  idea.plugin.protoeditor (233.14808.14)
  manifold.ij (2023.3.20)
  com.intellij.lang.jsgraphql (233.14808.14)
  org.jetbrains.amper (233.14475.9)
  org.asciidoctor.intellij.asciidoc (0.41.9)
  kotest-plugin-intellij (1.3.74-IC-2023.3)
  org.jetbrains.android (233.14808.21)
  mobi.hsz.idea.gitignore (4.5.2)
Kotlin: 233.14808.21-IJ

[Bug] Extension method highlighting not working properly in manifold-collections

Describe the bug
Highlighting doesn't seem to work in the manifold project itself, for instance for ManIterableExt from manifold-collections.

To Reproduce
Steps to reproduce the behavior:

  1. Fork manifold and checkout the master branch in IntelliJ
  2. Set the SDK to java 8 (Zulu-8 used in this case)
  3. Run mvn clean package
  4. Open ManIterableExt from manifold-collections.
  5. Click the sync button in the Maven window in IntelliJ (not enough to get it to work)
  6. Click File -> Repair IDE and go through all steps (not enough to get it to work)

Expected behavior
I expect highlighting to work

Desktop (please complete the following information):

  • OS Type & Version: Windows 10
  • Java/JDK version: Zulu-8 (1.8.0_232, vendor: Azul Systems, Inc.)
  • maven version: 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)
  • IDE version (IntelliJ IDEA or Android Studio): IntelliJ 2023.2.2
  • Manifold version: 2023.1.26-SNAPSHOT (latest master, commit: 9d2c5902)
  • Manifold IntelliJ plugin version: 23.2.2

Screenshots
afbeelding

Additional context
I don't get any IntelliJ stack traces, so it doesn't seem like the Manifold plugin crached.

com.intellij.util.IncorrectOperationException: Incorrect expression

In file: jar:///Users/danny/.m2/repository/systems/manifold/manifold-science/2022.1.8/manifold-science-2022.1.8-sources.jar!/manifold/science/api/AbstractMeasure.java

com.intellij.util.IncorrectOperationException: Incorrect expression '((manifold.science.api.Unit<T,U>)null).compareToUsing((null)null, null)'
at com.intellij.psi.impl.PsiJavaParserFacadeImpl.newException(PsiJavaParserFacadeImpl.java:388)
at com.intellij.psi.impl.PsiJavaParserFacadeImpl.createExpressionFromText(PsiJavaParserFacadeImpl.java:295)
at com.intellij.psi.impl.PsiElementFactoryImpl.createExpressionFromText(PsiElementFactoryImpl.java:642)
at manifold.ij.extensions.ManJavaResolveCache.getGenericBinaryOperationReturnType(ManJavaResolveCache.java:333)
at manifold.ij.extensions.ManJavaResolveCache.getBinaryOperationReturnType(ManJavaResolveCache.java:376)
at manifold.ij.extensions.ManJavaResolveCache.getBinaryType(ManJavaResolveCache.java:257)
at manifold.ij.extensions.ManJavaResolveCache.getTypeForOverloadedBinaryOperator(ManJavaResolveCache.java:189)
at manifold.ij.extensions.ManJavaResolveCache.getTypeDirectly(ManJavaResolveCache.java:101)
at manifold.ij.extensions.ManJavaResolveCache.lambda$getType$1(ManJavaResolveCache.java:93)
at com.intellij.psi.util.CachedValuesManager.lambda$getProjectPsiDependentCache$0(CachedValuesManager.java:134)
at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:158)
at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:39)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$3(CachedValueBase.java:227)
at com.intellij.util.CachedValueBase.computeData(CachedValueBase.java:42)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$4(CachedValueBase.java:227)
at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:114)
at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:44)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:228)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:28)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:72)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:155)
at com.intellij.psi.util.CachedValuesManager.getProjectPsiDependentCache(CachedValuesManager.java:132)
at manifold.ij.extensions.ManJavaResolveCache.getType(ManJavaResolveCache.java:93)
at com.intellij.psi.impl.source.tree.java.PsiBinaryExpressionImpl.getType(PsiBinaryExpressionImpl.java:90)
at com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl.visitExpression(HighlightVisitorImpl.java:600)
at manifold.ij.extensions.ManHighlightVisitor.visitPolyadicExpression(ManHighlightVisitor.java:61)
at com.intellij.psi.JavaElementVisitor.visitBinaryExpression(JavaElementVisitor.java:28)
at com.intellij.psi.impl.source.tree.java.PsiBinaryExpressionImpl.accept(PsiBinaryExpressionImpl.java:134)
at com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl.visit(HighlightVisitorImpl.java:185)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.runVisitors(GeneralHighlightingPass.java:343)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$collectHighlights$7(GeneralHighlightingPass.java:282)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:302)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.github.izhangzhihao.rainbow.brackets.visitor.RainbowHighlightVisitor.analyze(RainbowHighlightVisitor.kt:36)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl.analyze(HighlightVisitorImpl.java:214)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.analysis.JavaNamesHighlightVisitor.analyze(JavaNamesHighlightVisitor.java:60)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:93)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectHighlights(GeneralHighlightingPass.java:273)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectInformationWithProgress(GeneralHighlightingPass.java:218)
at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:97)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:56)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:419)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1152)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:412)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:411)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:387)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:174)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:213)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:385)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:184)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.lang.AssertionError: Unexpected token: 'null'
at com.intellij.lang.java.parser.JavaParserUtil.parseFragment(JavaParserUtil.java:210)
at com.intellij.psi.impl.source.tree.JavaElementType$JavaDummyElementType.parseContents(JavaElementType.java:273)
at com.intellij.psi.impl.source.tree.LazyParseableElement.lambda$ensureParsed$2(LazyParseableElement.java:175)
at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:481)
at com.intellij.psi.impl.source.tree.LazyParseableElement.ensureParsed(LazyParseableElement.java:174)
at com.intellij.psi.impl.source.tree.LazyParseableElement.getFirstChildNode(LazyParseableElement.java:226)
at com.intellij.psi.impl.source.JavaDummyElement.getFirstChildNode(JavaDummyElement.java:69)
at com.intellij.psi.impl.PsiJavaParserFacadeImpl.createExpressionFromText(PsiJavaParserFacadeImpl.java:293)
... 66 more

Regression: Extensions Not Recognized Until Project Is Reopened

Like issue #14 the extensions that I create are not recognized until I reopen my project in Idea. It only appears to affect Gradle modules that do not yet have an extension in them, as I found it while creating the project that I initially found manifold-systems/manifold#459. It happened on the original project and the minimal test case as I was writing them.

It appears as though the reproduction steps are the following:

  1. Create extension class in a project that did not have one
  2. Plugin can not see it
  3. Reload Idea project
  4. Plugin can see it
  5. Create new extension in a project that had it
  6. Plugin can see it

jdk included in the repository

I'm looking at the code and I've seen a pretty odd thing - jdk 1.8 is pushed to this very git repository. Any reason to do so?

Extensions don't seems to handle annotations for parameters correctly

When annotating parameters of an extension method, the annotation doesn't seem to be taken into account.


A test class with a method, which accepts a nullable parameter.
screenshot 38

Extension method, which add a method that also accepts a nullable parameter:
screenshot 39

Using extension method with argument null warns me about 'NotNull', whereas the non-extension method doesn't display a warning (which is correct).
screenshot 41

IDE version (IntelliJ IDEA or Android Studio): IntelliJ IDEA 2024.1
Manifold version: 2024.1.12
Manifold IntelliJ plugin version: 2023.3.22

[Bug] Sonarlint complains about unused assignment/local variables when using string interpolation

In this code snippet:

default String getTemplateFileName(HttpServletRequest request, Model model) {
    URI baseUri = getBaseUri();
    String templateFileName = this.getClass().getSimpleName() + ".ftl";
    String canonicalFileName = getResource(templateFileName)
            .map(baseUri::relativize)
            .map(URI::getPath)
            .orElse(COMPONENT_TEMPLATE_PREFIX + "content/error/Status500.ftl");
    log.info("Template name: $canonicalFileName");
    return "/$canonicalFileName";
}

The canonicalFileName is used in 2 places, however it is ONLY used in string interpolation. SonarLint doesn't understand how manifold added string interpolation, so it is giving a false positive that canonicalFileName is an unused local variable. Because of this, it also erroneously detects that the assignment to that variable is unused.

I don't know if I should file this bug here or on the SonarLint side. I think that the solution might be a combination of both.

Odd failing test

I pulled down the repo and tried to build via gradle clean build and got the below error. Is there anything else we need to do before running tests?

junit.framework.AssertionFailedError: No tests found in manifold.ij.AbstractManifoldCodeInsightTest
	at junit.framework.Assert.fail(Assert.java:57)
	at junit.framework.TestCase.fail(TestCase.java:227)
	at junit.framework.TestSuite$1.runTest(TestSuite.java:97)
	at junit.framework.TestCase.runBare(TestCase.java:141)
	at junit.framework.TestResult$1.protect(TestResult.java:122)
	at junit.framework.TestResult.runProtected(TestResult.java:142)
	at junit.framework.TestResult.run(TestResult.java:125)
	at junit.framework.TestCase.run(TestCase.java:129)
	at junit.framework.TestSuite.runTest(TestSuite.java:252)
	at junit.framework.TestSuite.run(TestSuite.java:247)
	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
	at jdk.internal.reflect.GeneratedMethodAccessor70.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
	at jdk.internal.reflect.GeneratedMethodAccessor69.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.base/java.lang.Thread.run(Thread.java:836)

The plugin cannot recognize the extension method in time

If it is the first time to create an extension of a certain class, the plugin cannot recognize the extension method in time.

manifold-ij-issue.mp4

The extension method will not be recognized by IDE until the project has been reopened.

OS: macOS Big Sur 11.7.1
Intellij IDEA: 2022.3 (Ultimate Edition)
Manifold-ij: 2022.3.29

My pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.alibaba.zhiye.manifold</groupId>
    <artifactId>manifold-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>manifold-demo</name>

    <properties>
        <manifold.version>2022.1.29</manifold.version>
        <lombok.version>1.18.24</lombok.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>systems.manifold</groupId>
            <artifactId>manifold-ext</artifactId>
            <version>${manifold.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArgs>
                        <arg>-Xplugin:Manifold no-bootstrap</arg>
                    </compilerArgs>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>systems.manifold</groupId>
                            <artifactId>manifold-ext</artifactId>
                            <version>${manifold.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

no code highlighting in string templates

code that is usually colored is not if it is inside a string template (such as "$foo"). Here's an example:
image

I'm using version 2023.2.1 of IJ, 2023.1.19 of the plugin, 2023.1.22 of manifold-strings, and gerry themes.

AssertionError

java.lang.AssertionError
	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at java.base/java.util.concurrent.ForkJoinTask.getException(ForkJoinTask.java:557)
	at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:573)
	at java.base/java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:663)
	at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:677)
	at com.intellij.concurrency.JobLauncherImpl.procInOrderAsync(JobLauncherImpl.java:548)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$12(InspectionRunner.java:197)
	at com.intellij.codeInspection.InspectionEngine.withSession(InspectionEngine.java:205)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.inspect(InspectionRunner.java:162)
	at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.collectInformationWithProgress(LocalInspectionsPass.java:140)
	at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:84)
	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:57)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:417)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.runWithSpanIgnoreThrows(trace.kt:109)
	at com.intellij.platform.diagnostic.telemetry.helpers.TraceUtil.runWithSpanThrows(TraceUtil.java:34)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$3(PassExecutorService.java:412)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.tryRunReadAction(AnyThreadWriteThreadingSupport.kt:291)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:958)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$4(PassExecutorService.java:403)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:402)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:378)
	at com.intellij.openapi.fileTypes.impl.FileTypeManagerImpl.cacheFileTypesInside(FileTypeManagerImpl.java:797)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$1(PassExecutorService.java:378)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.executeByImpatientReader(AnyThreadWriteThreadingSupport.kt:486)
	at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:182)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:376)
	at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:190)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:507)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1491)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:2073)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2035)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187)
Caused by: java.lang.AssertionError: The marker is already disposed
	at com.intellij.lang.impl.PsiBuilderImpl.rollbackTo(PsiBuilderImpl.java:863)
	at com.intellij.lang.impl.PsiBuilderImpl.access$700(PsiBuilderImpl.java:49)
	at com.intellij.lang.impl.PsiBuilderImpl$StartMarker.rollbackTo(PsiBuilderImpl.java:356)
	at manifold.ij.core.ManStatementParser.parseStatement(ManStatementParser.java:233)
	at manifold.ij.core.ManStatementParser.parseStatements(ManStatementParser.java:121)
	at manifold.ij.core.ManStatementParser.parseStatements(ManStatementParser.java:116)
	at com.intellij.psi.impl.source.BasicJavaElementType$StatementThinCodeFragmentElementType.lambda$new$0(BasicJavaElementType.java:382)
	at com.intellij.lang.java.parser.BasicJavaParserUtil.parseFragment(BasicJavaParserUtil.java:209)
	at com.intellij.lang.java.parser.BasicJavaParserUtil.parseFragment(BasicJavaParserUtil.java:187)
	at com.intellij.psi.impl.source.BasicJavaElementType$ThinCodeFragmentElementType.parseContents(BasicJavaElementType.java:441)
	at com.intellij.psi.impl.source.tree.LazyParseableElement.lambda$ensureParsed$2(LazyParseableElement.java:183)
	at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:535)
	at com.intellij.psi.impl.source.tree.LazyParseableElement.ensureParsed(LazyParseableElement.java:182)
	at com.intellij.psi.impl.source.tree.LazyParseableElement.getFirstChildNode(LazyParseableElement.java:234)
	at com.intellij.psi.impl.source.tree.LazyParseableElement.getFirstChildNode(LazyParseableElement.java:25)
	at com.intellij.psi.impl.source.tree.SharedImplUtil.getFirstChild(SharedImplUtil.java:37)
	at com.intellij.psi.impl.source.PsiFileImpl.getFirstChild(PsiFileImpl.java:822)
	at com.siyeh.ig.maturity.CommentedOutCodeInspection.isInvalidCode(CommentedOutCodeInspection.java:259)
	at com.siyeh.ig.maturity.CommentedOutCodeInspection.isCode(CommentedOutCodeInspection.java:218)
	at com.siyeh.ig.maturity.CommentedOutCodeInspection$CommentedOutCodeVisitor.visitComment(CommentedOutCodeInspection.java:160)
	at com.intellij.psi.impl.source.tree.PsiCommentImpl.accept(PsiCommentImpl.java:23)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner$InspectionProblemHolder.visitElement(InspectionRunner.java:589)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processContext$20(InspectionRunner.java:410)
	at com.intellij.codeInsight.daemon.impl.InspectionVisitorOptimizer.acceptElements(InspectionVisitorOptimizer.java:207)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.processContext(InspectionRunner.java:408)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$7(InspectionRunner.java:192)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.tryRunReadAction(AnyThreadWriteThreadingSupport.kt:291)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:958)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$executeInImpatientReadAction$17(InspectionRunner.java:389)
	at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:158)
	at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:150)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$executeInImpatientReadAction$18(InspectionRunner.java:380)
	at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:129)
	at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:118)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.executeInImpatientReadAction(InspectionRunner.java:380)
	at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$8(InspectionRunner.java:191)
	at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.lambda$call$0(JobLauncherImpl.java:492)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79)
	at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.call(JobLauncherImpl.java:481)
	at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.call(JobLauncherImpl.java:469)
	at java.base/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1602)
	... 5 more

StringIndexOutOfBoundsException on Creating New Extension with Default Package Name

When attempting to create a new @Extension, if I leave the package name field blank (defaulting to ""), the system throws the following error:

In the ExtensionClassAnnotator.java class, after retrieving the indexOf value, a check can be added.

Plugin version: 2023.3.15

java.lang.StringIndexOutOfBoundsException: begin 10, end 0, length 0
	at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4606)
	at java.base/java.lang.String.substring(String.java:2709)
	at java.base/java.lang.String.substring(String.java:2682)
	at manifold.ij.extensions.ExtensionClassAnnotator.getExtendedClassName(ExtensionClassAnnotator.java:371)
	at manifold.ij.extensions.ManAugmentProvider$ExtensionClassPsiListener.incIfExtensionClass(ManAugmentProvider.java:936)
	at manifold.ij.extensions.ManAugmentProvider$ExtensionClassPsiListener.childrenChanged(ManAugmentProvider.java:901)
	at com.intellij.psi.impl.PsiManagerImpl.notifyPsiTreeChangeListener(PsiManagerImpl.java:414)
	at com.intellij.psi.impl.PsiManagerImpl.fireEvent(PsiManagerImpl.java:357)
	at com.intellij.psi.impl.PsiManagerImpl.childrenChanged(PsiManagerImpl.java:306)
	at com.intellij.pom.tree.events.impl.ChangeInfoImpl.childrenChanged(ChangeInfoImpl.java:122)
	at com.intellij.pom.tree.events.impl.ChangeInfoImpl.fireEvent(ChangeInfoImpl.java:72)
	at com.intellij.pom.tree.events.impl.TreeChangeImpl.fireEvents(TreeChangeImpl.java:143)
	at com.intellij.pom.tree.events.impl.TreeChangeEventImpl.fireEvents(TreeChangeEventImpl.java:130)
	at com.intellij.pom.wrappers.PsiEventWrapperAspect.update(PsiEventWrapperAspect.java:32)
	at com.intellij.pom.core.impl.PomModelImpl.updateDependentAspects(PomModelImpl.java:167)
	at com.intellij.psi.impl.source.PostprocessReformattingAspectImpl$LangPomModel.updateDependentAspects(PostprocessReformattingAspectImpl.java:87)
	at com.intellij.pom.core.impl.PomModelImpl.lambda$runTransaction$1(PomModelImpl.java:129)
	at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:535)
	at com.intellij.pom.core.impl.PomModelImpl.lambda$runTransaction$2(PomModelImpl.java:103)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeNonCancelableSection$2(CoreProgressManager.java:228)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:634)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$computeInNonCancelableSection$3(CoreProgressManager.java:236)
	at com.intellij.openapi.progress.Cancellation.computeInNonCancelableSection(Cancellation.java:53)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeInNonCancelableSection(CoreProgressManager.java:236)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:227)
	at com.intellij.pom.core.impl.PomModelImpl.runTransaction(PomModelImpl.java:92)
	at com.intellij.psi.impl.DiffLog.lambda$doActualPsiChange$0(DiffLog.java:242)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.lambda$performActionWithFormatterDisabled$4(CodeStyleManagerImpl.java:426)
	at com.intellij.psi.impl.source.PostprocessReformattingAspectImpl.disablePostprocessFormattingInside(PostprocessReformattingAspectImpl.java:128)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:454)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:425)
	at com.intellij.psi.impl.DiffLog.doActualPsiChange(DiffLog.java:230)
	at com.intellij.psi.impl.DocumentCommitThread.lambda$doCommit$5(DocumentCommitThread.java:302)
	at com.intellij.psi.impl.PsiDocumentManagerBase.commitToExistingPsi(PsiDocumentManagerBase.java:435)
	at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$finishCommitInWriteAction$5(PsiDocumentManagerBase.java:409)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$computeInNonCancelableSection$3(CoreProgressManager.java:236)
	at com.intellij.openapi.progress.Cancellation.computeInNonCancelableSection(Cancellation.java:57)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeInNonCancelableSection(CoreProgressManager.java:236)
	at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$finishCommitInWriteAction$6(PsiDocumentManagerBase.java:404)
	at com.intellij.psi.impl.PsiDocumentManagerBase.executeInsideCommit(PsiDocumentManagerBase.java:520)
	at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommitInWriteAction(PsiDocumentManagerBase.java:402)
	at com.intellij.psi.impl.PsiDocumentManagerImpl.finishCommitInWriteAction(PsiDocumentManagerImpl.java:135)
	at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommit(PsiDocumentManagerBase.java:363)
	at com.intellij.psi.impl.DocumentCommitThread.lambda$commitUnderProgress$2(DocumentCommitThread.java:140)
	at com.intellij.psi.impl.DocumentCommitThread.commitSynchronously(DocumentCommitThread.java:100)
	at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$doCommit$9(PsiDocumentManagerBase.java:505)
	at com.intellij.psi.impl.PsiDocumentManagerBase.executeInsideCommit(PsiDocumentManagerBase.java:520)
	at com.intellij.psi.impl.PsiDocumentManagerBase.doCommit(PsiDocumentManagerBase.java:505)
	at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$doCommit$8(PsiDocumentManagerBase.java:494)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:975)
	at com.intellij.psi.impl.PsiDocumentManagerBase.doCommit(PsiDocumentManagerBase.java:494)
	at com.intellij.psi.impl.PsiDocumentManagerBase.commitDocument(PsiDocumentManagerBase.java:343)
	at com.intellij.ide.JavaFilePasteProvider.lambda$performPaste$0(JavaFilePasteProvider.java:71)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$compute$3(WriteCommandAction.java:161)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$1(WriteCommandAction.java:144)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:975)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$2(WriteCommandAction.java:142)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:225)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:187)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.doRunWriteCommandAction(WriteCommandAction.java:151)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.run(WriteCommandAction.java:118)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.compute(WriteCommandAction.java:161)
	at com.intellij.ide.JavaFilePasteProvider.performPaste(JavaFilePasteProvider.java:58)
	at com.intellij.ide.CopyPasteDelegator$MyEditable.performPaste(CopyPasteDelegator.java:128)
	at com.intellij.ide.actions.PasteAction.actionPerformed(PasteAction.java:35)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.doPerformActionOrShowPopup(ActionUtil.java:344)
	at com.intellij.openapi.keymap.impl.ActionProcessor.performAction(ActionProcessor.java:32)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$myActionProcessor$1.performAction(IdeKeyEventDispatcher.kt:496)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcherKt.doPerformActionInner$lambda$4$lambda$3(IdeKeyEventDispatcher.kt:831)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:95)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcherKt.doPerformActionInner$lambda$4(IdeKeyEventDispatcher.kt:831)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:381)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcherKt.doPerformActionInner(IdeKeyEventDispatcher.kt:829)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcherKt.access$doPerformActionInner(IdeKeyEventDispatcher.kt:1)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction$intellij_platform_ide_impl(IdeKeyEventDispatcher.kt:559)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.kt:509)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processActionOrWaitSecondStroke(IdeKeyEventDispatcher.kt:448)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.kt:441)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.kt:303)
	at com.intellij.ide.IdeEventQueue.dispatchKeyEvent(IdeEventQueue.kt:620)
	at com.intellij.ide.IdeEventQueue._dispatchEvent$lambda$11(IdeEventQueue.kt:581)
	at com.intellij.openapi.application.impl.RwLockHolder.runWithEnabledImplicitRead(RwLockHolder.kt:75)
	at com.intellij.openapi.application.impl.RwLockHolder.runWithImplicitRead(RwLockHolder.kt:67)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:581)
	at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:72)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:355)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:354)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:793)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:354)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:349)
	at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:1014)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:114)
	at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:1014)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$7(IdeEventQueue.kt:349)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:848)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:391)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

Find usages of a property not possible when normal getter/setters are used.

When using Manifold properties, there is no way to find usages of a field that still uses a normal getter.

public class Foo{
    @val String bar;
}

screenshot 47
Using Find Usages does not include something like this: String bar = new Foo().getBar();


Lombok adds the generated getters/setters to the Structure view. This might be a more intuitive way? (It also makes it more clear whether the generated getter/setter is private/protected/...)

public class Foo {
    @Getter String bar;
}

screenshot 48

com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl #JAVA because: parent is null

com.intellij.psi.PsiInvalidElementAccessException: Element: class com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl #JAVA because: parent is null
invalidated at: see attachment
at com.intellij.psi.impl.source.tree.CompositePsiElement.getProject(CompositePsiElement.java:284)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.getType(PsiReferenceExpressionImpl.java:415)
at manifold.ij.core.ManPsiAssignmentExpressionImpl.lambda$getType$0(ManPsiAssignmentExpressionImpl.java:52)
at manifold.ij.extensions.ManJavaResolveCache.getTypeDirectly(ManJavaResolveCache.java:108)
at manifold.ij.extensions.ManJavaResolveCache.lambda$getType$1(ManJavaResolveCache.java:93)
at com.intellij.psi.util.CachedValuesManager.lambda$getProjectPsiDependentCache$0(CachedValuesManager.java:134)
at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:158)
at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:39)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$3(CachedValueBase.java:227)
at com.intellij.util.CachedValueBase.computeData(CachedValueBase.java:42)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$4(CachedValueBase.java:227)
at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:114)
at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:44)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:228)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:28)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:72)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:155)
at com.intellij.psi.util.CachedValuesManager.getProjectPsiDependentCache(CachedValuesManager.java:132)
at manifold.ij.extensions.ManJavaResolveCache.getType(ManJavaResolveCache.java:93)
at manifold.ij.core.ManPsiAssignmentExpressionImpl.getType(ManPsiAssignmentExpressionImpl.java:52)
at com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl.visitExpression(HighlightVisitorImpl.java:600)
at com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl.visitAssignmentExpression(HighlightVisitorImpl.java:370)
at com.intellij.psi.impl.source.tree.java.PsiAssignmentExpressionImpl.accept(PsiAssignmentExpressionImpl.java:105)
at com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl.visit(HighlightVisitorImpl.java:185)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.runVisitors(GeneralHighlightingPass.java:343)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$collectHighlights$7(GeneralHighlightingPass.java:276)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:302)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.github.izhangzhihao.rainbow.brackets.visitor.RainbowHighlightVisitor.analyze(RainbowHighlightVisitor.kt:36)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl.analyze(HighlightVisitorImpl.java:214)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.analysis.JavaNamesHighlightVisitor.analyze(JavaNamesHighlightVisitor.java:60)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.lambda$analyzeByVisitors$8(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor.analyze(DefaultHighlightVisitor.java:93)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.analyzeByVisitors(GeneralHighlightingPass.java:305)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectHighlights(GeneralHighlightingPass.java:273)
at com.intellij.codeInsight.daemon.impl.GeneralHighlightingPass.collectInformationWithProgress(GeneralHighlightingPass.java:218)
at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:97)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:57)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:419)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1152)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:412)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:411)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:387)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:174)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:213)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:385)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:184)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.