Git Product home page Git Product logo

advancedexpressionfolding's People

Contributors

amaembo avatar cheptsov avatar peterschmidt85 avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

advancedexpressionfolding's Issues

Collapsing SetX fold regions with inner anonymous classes issues with right parenthesis

It appears that all the foldings for the setter methods that contain inner anonymous classes / functional interfaces show a slight bug when the setter is folded into an emulated lambda function. After collapsed, the right parenthesis is still present.

Example

With the original Android code...

fab.setOnClickListener(new View.OnClickListener() {

	@Override
	public void onClick(View view) {

		boolean isRightParenthesisShowing = true;
		
	}
	
});

... it will be conveniently folded into...

fab.onClickListener = (view) -> { boolean isRightParenthesisShowing = true; });

As you can see, the setOnClickListener's right parenthesis is still displayed, but the left one was folded away.

So it appears the code should look something like ...

fab.onClickListener = (view) -> { boolean isRightParenthesisShowing = false; };

NPE on some kind of for statement that does compile

Got an NPE trying to open a java source file. I am on the current version 0.3.7 of the plugin. Glancing at the code it seems that PsiBinaryCondition getROperator is returning a null and a few frames later it blows up. The class that I'm trying to open doesn't have any fori loops -- just a few foreach loops (not sure if that matters). Here is the stack trace and I have the class java code below

java.lang.NullPointerException
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.findChildExpressions(AdvancedExpressionFoldingBuilder.java:351)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getExpression(AdvancedExpressionFoldingBuilder.java:344)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getForStatementExpression(AdvancedExpressionFoldingBuilder.java:251)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getExpression(AdvancedExpressionFoldingBuilder.java:270)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:153)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:177)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:177)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:177)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:177)
	at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
	at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:60)
	at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:236)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:222)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:112)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:101)
	at com.intellij.psi.impl.PsiParameterizedCachedValue.doCompute(PsiParameterizedCachedValue.java:53)
	at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
	at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:65)
	at com.intellij.psi.impl.PsiParameterizedCachedValue.getValue(PsiParameterizedCachedValue.java:43)
	at com.intellij.psi.util.CachedValuesManager.getParameterizedCachedValue(CachedValuesManager.java:97)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:97)
	at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.a(CodeFoldingManagerImpl.java:326)
	at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegionsAsync(CodeFoldingManagerImpl.java:312)
	at com.intellij.codeInsight.daemon.impl.CodeFoldingPass.doCollectInformation(CodeFoldingPass.java:42)
	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:433)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1061)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.c(PassExecutorService.java:426)
	at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:568)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:519)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.b(PassExecutorService.java:425)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:405)

Here is the class that I'm trying to open

/*
 * Copyright 2016 Steve Ash
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.github.steveash.synthrec.stat;

import java.util.Arrays;
import java.util.Random;

import org.apache.commons.math3.random.RandomGenerator;

import com.google.common.base.Preconditions;
import com.google.common.primitives.Doubles;

import it.unimi.dsi.fastutil.objects.Object2DoubleMap;
import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry;

/**
 * A class that represents a categorical frequency distribution to sample from
 * the values here are cumulative (negative log(prob)) (for precision)
 * @author Steve Ash
 */
public class SamplingTable<T> implements Sampler<T> {

    public static <T> SamplingTable<T> createFromNormalized(Multinomial<T> density) {
        Preconditions.checkArgument(density.isNormalized(), "must pass a normalized distribution", density);
        int count = 0;
        for (Object2DoubleMap.Entry<T> entry : density.entries()) {
            if (entry.getDoubleValue() > 0) {
                count += 1;
            }
        }
        double cum = 0;
        int i = 0;
        Object[] values = new Object[count];
        double[] cumLogProb = new double[count];
        for (Object2DoubleMap.Entry<T> entry : density.entries()) {
            double dv = entry.getDoubleValue();
            if (dv > 0) {
                values[i] = Preconditions.checkNotNull(entry.getKey(), "cant pass null values", density);
                Preconditions.checkArgument(Doubles.isFinite(dv), "NaN/inf in density", density);
                cum += dv;
                double log = Math.log(cum);
                Preconditions.checkArgument(Doubles.isFinite(log), "infinite log prob", density, cum);
                cumLogProb[i] = log;
                i += 1;
            }
        }
        return new SamplingTable<T>(values, cumLogProb);
    }

    public static <T> SamplingTable<T> createFromMultinomial(Multinomial<T> density) {
        int count = 0;
        double sum = 0;
        for (Object2DoubleMap.Entry<T> entry : density.entries()) {
            if (entry.getDoubleValue() > 0) {
                count += 1;
                sum += entry.getDoubleValue();
            }
        }
        Preconditions.checkState(sum > 0, "cant smaple from empty multinomial");
        double totalCount = 0;
        int i = 0;
        double logSum = Math.log(sum);
        Object[] values = new Object[count];
        double[] cumLogProb = new double[count];
        for (Object2DoubleMap.Entry<T> entry : density.entries()) {
            double dv = entry.getDoubleValue();
            if (dv > 0) {
                values[i] = Preconditions.checkNotNull(entry.getKey(), "cant pass null values", density);
                Preconditions.checkArgument(Doubles.isFinite(dv), "NaN/inf in density", density);
                totalCount += dv;
                double logCum = Math.log(totalCount) - logSum;
                Preconditions.checkArgument(Doubles.isFinite(logCum), "infinite log prob", density, logCum);
                cumLogProb[i] = logCum;
                i += 1;
            }
        }
        return new SamplingTable<T>(values, cumLogProb);
    }

    public static <T> SamplingTable<T> createFromCountEntries(Iterable<? extends Entry<T>> entries) {
        int count = 0;
        long sum = 0;
        for (Entry<T> entry : entries) {
            Preconditions.checkArgument(entry.getIntValue() > 0, "cant pass 0 entries");
            count += 1;
            sum += entry.getIntValue();
        }
        long cum = 0;
        int i = 0;
        Object[] values = new Object[count];
        double[] cumLogProb = new double[count];
        double denom = Math.log(sum);
        for (Entry<T> entry : entries) {
            values[i] = Preconditions.checkNotNull(entry.getKey(), "cant pass null values", entries);
            cum += entry.getIntValue();
            cumLogProb[i] = Math.log(cum) - denom;
            i += 1;
        }
        return new SamplingTable<T>(values, cumLogProb);
    }

    private final Object[] values;
    private final double[] cumLogProb;

    // create from a normalized probability distribution
    private SamplingTable(Object[] values, double[] cumLogProb) {
        this.values = values;
        this.cumLogProb = cumLogProb;
    }

    public T sampleUniform(RandomGenerator rand) {
        return (T) values[rand.nextInt(values.length)];
    }

    public T sampleWeighted(RandomGenerator rand) {
        double nextValue = Math.log(rand.nextDouble());
        int found = Arrays.binarySearch(cumLogProb, nextValue);
        if (found >= 0) {
            // by magic we hit the exact value
            return (T) values[found];
        }
        // binary search returns (-insertPlace) - 1 so recover insert spot, thats our sample
        int insert = -(found + 1);
        Preconditions.checkState(insert >= 0 && insert <= values.length);
        if (insert >= values.length) {
            return (T) values[values.length - 1];
        }
        return (T) values[insert];
    }

    /**
     * Adapter for the Sampler interface, returns sampleWeighted()
     * @param rand
     * @return
     */
    @Override
    public T sample(RandomGenerator rand) {
        return sampleWeighted(rand);
    }
}

NPE on method call with paranthensis expression at call site

I'm getting an error trying to open a class PlainTextSerializer from the project https://github.com/universal-automata/liblevenshtein-java

The relevant portion of the stack trace is below. When I try to catch this in the debugger (i.e. running the plguin sandbox and try to do this) -- i can't see to catch this. The file wont open there either -- but it just spins without any errors logged to idea.log. Very strange.

java.lang.NullPointerException
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.findChildExpressions(AdvancedExpressionFoldingBuilder.java:375)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getExpression(AdvancedExpressionFoldingBuilder.java:356)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getExpression(AdvancedExpressionFoldingBuilder.java:334)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getMethodCallExpression(AdvancedExpressionFoldingBuilder.java:763)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getExpression(AdvancedExpressionFoldingBuilder.java:280)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:154)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:178)

Fold class references

Would be nice to see class reference being folded e.g. String.class becomes String like Groovy and others support it.

NPE Opening file

2017-04-11 14:17:02,757 [10245929] ERROR - tor.impl.FileEditorManagerImpl - IntelliJ IDEA 2017.1.1 Build #IU-171.4073.28
2017-04-11 14:17:02,758 [10245930] ERROR - tor.impl.FileEditorManagerImpl - JDK: 1.8.0_112-release
2017-04-11 14:17:02,758 [10245930] ERROR - tor.impl.FileEditorManagerImpl - VM: OpenJDK 64-Bit Server VM
2017-04-11 14:17:02,758 [10245930] ERROR - tor.impl.FileEditorManagerImpl - Vendor: JetBrains s.r.o
2017-04-11 14:17:02,758 [10245930] ERROR - tor.impl.FileEditorManagerImpl - OS: Windows 10
2017-04-11 14:17:02,758 [10245930] ERROR - tor.impl.FileEditorManagerImpl - Last Action: Switcher
2017-04-11 14:17:02,758 [10245930] ERROR - tor.impl.FileEditorManagerImpl - Current Command:
2017-04-11 14:17:05,415 [10248587] ERROR - tor.impl.FileEditorManagerImpl - java.util.concurrent.ExecutionException: java.lang.NullPointerException
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.a(AsyncEditorLoader.java:135)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.start(AsyncEditorLoader.java:79)
at com.intellij.openapi.fileEditor.impl.text.TextEditorImpl.(TextEditorImpl.java:60)
at com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl.(PsiAwareTextEditorImpl.java:44)
at com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorProvider.createEditor(PsiAwareTextEditorProvider.java:48)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.a(FileEditorManagerImpl.java:860)
at com.intellij.util.ui.UIUtil.invokeAndWaitIfNeeded(UIUtil.java:2653)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4(FileEditorManagerImpl.java:959)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl3(FileEditorManagerImpl.java:787)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.a(FileEditorManagerImpl.java:769)
at com.intellij.openapi.command.impl.CoreCommandProcessor.a(CoreCommandProcessor.java:149)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:109)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:99)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:85)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl2(FileEditorManagerImpl.java:769)
at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileWithProviders(FileEditorManagerImpl.java:700)
at com.intellij.openapi.fileEditor.ex.FileEditorManagerEx.openFile(FileEditorManagerEx.java:154)
at com.intellij.ide.actions.Switcher$SwitcherPanel.a(Switcher.java:951)
at com.intellij.openapi.wm.impl.FocusManagerImpl.a(FocusManagerImpl.java:506)
at com.intellij.openapi.wm.impl.FocusManagerImpl.b(FocusManagerImpl.java:658)
at com.intellij.openapi.wm.impl.FocusManagerImpl.l(FocusManagerImpl.java:639)
at com.intellij.openapi.wm.impl.FocusManagerImpl.o(FocusManagerImpl.java:609)
at com.intellij.openapi.wm.impl.FocusManagerImpl.a(FocusManagerImpl.java:491)
at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:2632)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:471)
at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:504)
at com.intellij.openapi.wm.impl.FocusManagerImpl.a(FocusManagerImpl.java:510)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:303)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:410)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:399)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
at com.intellij.ide.IdeEventQueue.k(IdeEventQueue.java:827)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:655)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:206)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.a(AsyncEditorLoader.java:131)
... 46 more
Caused by: java.lang.NullPointerException
at com.intellij.advancedExpressionFolding.ShortElvisExpression.supportsFoldRegions(ShortElvisExpression.java:94)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:184)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:63)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:236)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:222)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.buildInitialFoldings(CodeFoldingManagerImpl.java:225)
at com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl.loadEditorInBackground(PsiAwareTextEditorImpl.java:54)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.b(AsyncEditorLoader.java:98)
at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$commitAndRunReadAction$1(PsiDocumentManagerBase.java:478)
at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$commitAndRunReadAction$2(PsiDocumentManagerBase.java:503)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:946)
at com.intellij.psi.impl.PsiDocumentManagerBase.commitAndRunReadAction(PsiDocumentManagerBase.java:501)
at com.intellij.psi.impl.PsiDocumentManagerBase.commitAndRunReadAction(PsiDocumentManagerBase.java:478)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.a(AsyncEditorLoader.java:97)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.a(ProgressIndicatorUtils.java:147)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:176)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:556)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:501)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:66)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:163)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:145)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.a(AsyncEditorLoader.java:96)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:212)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Fold up next-line-open-braces and single block braces

This is a feature request.
It would be nice to have an option to fold next-line-open-braces up the same line as the keyword and/or hide braces for single line blocks.

so code like this

do
    {
        try
        {
            if ( x > 0 )
            {
                int someVariable = a ? x : y;
                int anotherVariable = a ? x : y;
            }
            else if ( x < 0 )
            {
                int someVariable = ( y + z );
                int anotherVariable = x = x + y;
            }
            else
            {
                for ( int i = 0;i < 5;i++ ) 
                {
                    doSomething( i ); 
                }
            }
            switch ( a )
            {
                case 0:
                    doCase0();
                    break;
                default:
                    doDefault();
            }
        }
        catch ( Exception e )
        {
            processException( e.getMessage(), x + y, z, a );
        }
        finally
        {
            processFinally();
        }
    }
    while ( true );

will look like this

do {
        try {
            if ( x > 0 ) {
                int someVariable = a ? x : y;
                int anotherVariable = a ? x : y;
            } else if ( x < 0 ) {
                int someVariable = ( y + z );
                int anotherVariable = x = x + y;
            } else {
                for ( int i = 0;i < 5;i++ ) doSomething( i );
            }
            switch ( a ) {
                case 0: doCase0(); break;
                default: doDefault();
            }
        }
        catch ( Exception e ) {
            processException( e.getMessage(), x + y, z, a );
        }
        finally {
            processFinally();
        }
    } while ( true );

Add ability fold local variable type declarations into 'var' (like java 10 might have)

Finally the java language might get 'var' as a keyword on the left hand side of local variable declarations to avoid typing the nominal types when they can easily be inferred from the initialization expression:

var list = new ArrayList<String>();

As an optional feature of the AdvancedExpressionFolding plugin, perhaps intellij could go ahead and give us this readability improvement without having to wait 5 years for java 10. Seems like a perfect fit to me :) Understandably, many users might not want this by default so making it configurable like many other features of AEF is probably a good idea.

Improve readability of use-site variance generic expressions for contravariance and covariance

Java's lack of declaration site expression of co/contra-variance dooms us to riddling our use-site generic code with verbose variance expressions that eat up many more characters than they are worth:

Map<String, ? extends Foo<? extends Bar>> myMap = new HashMap<>();

Perhaps a new feature of the Advanced Expression Folding plugin could be to optionally fold these long expressions into just a + or - to indicate covariance or contravariance. The leading plus or minus syntax would follow Scala's use of declaring generic parameter variance:

Map<String, +Foo<+Bar>> myMap = new HashMap<>

Folding toggle

Is there a short-cut to quickly toggle the folding on the fly? I do want to look at the real code, most times.

Folded expression drops an operand

I have a method that has an expression like:

total = total * 37 + litObj.hashCode();

which folds to:

total = total * 37 +

it looses the method call somehow. Here's two screenshots showing it attached.
folded2
folded1

Fold String.format to interpolated strings.

At present time plugin fold to interpolated strings only the string concatenations. It's will be impress to fold String.format too.

For example this:

return String.format("Start in %d days", days);

to this:

return "Start in $days days";

NPE during editing

null
java.lang.NullPointerException
at com.intellij.advancedExpressionFolding.ElvisExpression.supportsFoldRegions(ElvisExpression.java:65)
at com.intellij.advancedExpressionFolding.Setter.buildFoldRegions(Setter.java:65)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:185)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:63)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:236)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:222)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:112)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:95)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.a(CodeFoldingManagerImpl.java:326)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegions(CodeFoldingManagerImpl.java:282)
at com.intellij.codeInsight.editorActions.CopyPasteFoldingProcessor.processTransferableData(CopyPasteFoldingProcessor.java:101)
at com.intellij.codeInsight.editorActions.PasteHandler.a(PasteHandler.java:215)
at com.intellij.codeInsight.editorActions.PasteHandler.execute(PasteHandler.java:121)
at com.intellij.codeInsight.editorActions.PasteHandler.doExecute(PasteHandler.java:74)
at com.intellij.openapi.editor.actionSystem.EditorActionHandler$4.perform(EditorActionHandler.java:217)
at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:109)
at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:214)
at com.intellij.openapi.editor.actionSystem.EditorAction.lambda$actionPerformed$0(EditorAction.java:98)
at com.intellij.openapi.command.impl.CoreCommandProcessor.a(CoreCommandProcessor.java:149)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:109)
at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:107)
at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:86)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:215)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:232)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:570)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.a(IdeKeyEventDispatcher.java:619)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:193)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:618)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.a(IdeKeyEventDispatcher.java:477)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:211)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:633)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

java.lang.NullPointerException
at com.intellij.advancedExpressionFolding.ElvisExpression.supportsFoldRegions(ElvisExpression.java:65)
at com.intellij.advancedExpressionFolding.Setter.buildFoldRegions(Setter.java:65)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:185)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:63)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:236)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:222)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:112)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:101)
at com.intellij.psi.impl.PsiParameterizedCachedValue.doCompute(PsiParameterizedCachedValue.java:53)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:60)
at com.intellij.psi.impl.PsiParameterizedCachedValue.getValue(PsiParameterizedCachedValue.java:43)
at com.intellij.psi.util.CachedValuesManager.getParameterizedCachedValue(CachedValuesManager.java:97)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:97)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.a(CodeFoldingManagerImpl.java:326)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegionsAsync(CodeFoldingManagerImpl.java:312)
at com.intellij.codeInsight.daemon.impl.CodeFoldingPass.doCollectInformation(CodeFoldingPass.java:42)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:438)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1153)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.b(PassExecutorService.java:431)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:556)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:501)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:66)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.c(PassExecutorService.java:430)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.d(PassExecutorService.java:406)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:142)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:242)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:404)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:165)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

java.lang.NullPointerException
at com.intellij.advancedExpressionFolding.ElvisExpression.supportsFoldRegions(ElvisExpression.java:65)
at com.intellij.advancedExpressionFolding.Setter.buildFoldRegions(Setter.java:65)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:185)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:201)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:63)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:236)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:222)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:112)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:101)
at com.intellij.psi.impl.PsiParameterizedCachedValue.doCompute(PsiParameterizedCachedValue.java:53)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:60)
at com.intellij.psi.impl.PsiParameterizedCachedValue.getValue(PsiParameterizedCachedValue.java:43)
at com.intellij.psi.util.CachedValuesManager.getParameterizedCachedValue(CachedValuesManager.java:97)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:97)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.a(CodeFoldingManagerImpl.java:326)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegionsAsync(CodeFoldingManagerImpl.java:312)
at com.intellij.codeInsight.daemon.impl.CodeFoldingPass.doCollectInformation(CodeFoldingPass.java:42)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:438)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1153)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.b(PassExecutorService.java:431)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:556)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:501)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:66)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.c(PassExecutorService.java:430)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.d(PassExecutorService.java:406)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:142)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:242)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:404)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:165)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Fold null checked method calls into safe navigation operators

e.g.

if (foo != null)
  foo.bar();

becomes
foo?.bar();

Boolean null checked expressions could have special handling, e.g.
return foo != null && foo.bar()
becomes
return foo?.bar()

You could also fold assignments:
baz = foo != null ? foo.bar() : null;
into
baz = foo?.bar()?;

This would only apply when the fallback was explicitly null though...

StringBuilder chain only folds first append

sb.append(var).append('\\').append(var2);

folds to

sb += var.append('\\').append(var2);

I expected

sb += var + '\\' + var2;

But

sb.append("str").append(var);

folds as expected to

sb += "str" + var;

so I expect it's something to do with the character literal.

Automatically fold when finishing line/statement/expression (0.7.5)

Is there a way to automatically fold whenever I've typed something?
Currently in 0.7.5 my code only gets folded if I manually use the short-key or by reopening the file for editing by closing its tab and open again.

I remember how the SAM anonymous classes were automatically folded into lambdas just after writing them before lambas became available in Java 8.

Opening Android Studio throws a NoSuchMethodError

I'm using Android Studio v2.3 with Adavnced Java Folding v0.7.4.

Every time I open Android Studio, I get a popup that AJF threw a NoSuchMethodError:

NoSuchMethodError: com.intellij.openapi.editor.ex.util.EditorUtil.getEditorEx(Lcom/intellij/openapi/fileEditor/FileEditor;)Lcom/intellij/openapi/editor/ex/EditorEx;

Here is the full stack trace.

Operation folding throws NPE

The following line of code makes the plugin throw a NPE:

double value = Math.sin(15.0) * Math.sin(15.0) + Math.cos(2.0);

The two values for the sine must be the same for the NPE to be thrown.

java.lang.NullPointerException
at com.intellij.advancedExpressionFolding.Operation.simplify(Operation.java:75)
at com.intellij.advancedExpressionFolding.Expression.simplify(Expression.java:171)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:173)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:60)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:243)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:229)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getUpdateResult(FoldingUpdate.java:116)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.access$000(FoldingUpdate.java:55)
at com.intellij.codeInsight.folding.impl.FoldingUpdate$1.compute(FoldingUpdate.java:104)
at com.intellij.codeInsight.folding.impl.FoldingUpdate$1.compute(FoldingUpdate.java:99)
at com.intellij.psi.impl.PsiParameterizedCachedValue.doCompute(PsiParameterizedCachedValue.java:53)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:65)
at com.intellij.psi.impl.PsiParameterizedCachedValue.getValue(PsiParameterizedCachedValue.java:43)
at com.intellij.psi.util.CachedValuesManager.getParameterizedCachedValue(CachedValuesManager.java:97)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:98)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegions(CodeFoldingManagerImpl.java:335)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegionsAsync(CodeFoldingManagerImpl.java:320)
at com.intellij.codeInsight.daemon.impl.CodeFoldingPass.doCollectInformation(CodeFoldingPass.java:42)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$null$0(PassExecutorService.java:434)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1029)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:427)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:494)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:443)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:426)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:402)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:154)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Cast Folding inside lambda drops context identifier

e.g.

    view.addPropertyChangeListener("selection", evt -> {
      ActionModel actionModel =
        (ActionModel)view.getSelection();
      setSelectedActionModel(actionModel);
    });

folds to

    view.addPropertyChangeListener("selection", evt -> {
      ActionModel actionModel = ~selection;
      setSelectedActionModel(actionModel);
    });

i.e. the view. is lost.

Fold single-element-array wrappers as variables

Source code:

String[] ref1 = new String[1];
doSmth(() -> {
  ref1[0] = "Result";
});
handleResult(ref1[0]);

int[] ref2 = {0}; // @NotNull
doSmth(() -> {
  ref2[0] = 12;
});
handleResult(ref2[0]);

Foldings now:

String[] ref1 = new String[1];
doSmth(() -> {
  ref1.first() = "Result";
});
handleResult(ref1.first());

int[] ref2 = {0}; // @NotNull
doSmth(() -> {
  ref2.first() = 12;
});
handleResult(ref2.first());

Foldings proposal:

var ref1 = null;
doSmth(() -> {
  ref1 = "Result";
});
handleResult(ref1);

var ref2 = 0;
doSmth(() -> {
  ref2 = 12;
});
handleResult(ref2);

StringBuilder folding results incorrect semantics

Code

String base = "test";
StringBuilder builder = new StringBuilder(base).append("test").append("test");

folds into the following:

var base = "test";
var builder = base += "test" + "test";

which may lead to assumption of changing base (because of += operator)

(Version: 0.5.5)

Fold the @Nullable and @NotNull annotations

For example:

  • fold @Nullable Foo to Foo?
  • fold @NotNull Foo to Foo!
  • fold @NotNull Map<@NotNull String, @Nullable Object> to Map!<String!, Object?>

In addition to the Jetbrains annotations, support all nullability annotations that are supported by IDEA (i.e. Findbugs, Checker Framework, etc).

Fold \\ to \ in string literals

When somebody uses a string literal to hold ASCII art (e.g. Checkstyle), it'd be nice to see it as it would actually be printed by folding escaped backslashes '\' to a single backslash ''.

Colors & Fonts setting for Folded text gets modified when using plugin

I don't know if this is an issue in IDEA, or is caused by the plugin, but this is what happens.
Without the plugin installed the Folded text formatting can be set up ok and persists fine:
image
However, installing the plugin, and opening a file with folding active, the folded code isn't shown bold, and if I then open the settings I see that the bold formatting has been turned off:
image
If I reset the bold on, it will be turned off again if I switch to a different file.
This has only started happening in the last few versions of the plugin. When the problem first started it was losing the Foreground colour, but that changed in a more recent plugin version to the Bold.
I'm using IDEA 2017.1.2 EAP, although this happened with 2017.1.1 too iirc.

Exception in Studio core -> RuntimeException: Exception while applying information to Editor

This exception will occur with every single user interaction with the Editor

Exception while applying information to Editor: file://C:/Users/Christopher/AndroidStudioProjects/AndroidStudioActivityTemplates/templates/basic activity/fragment/src/main/java/io/github/ciscorucinski/androidstudio/activitytemplate/basicactivityfragment/MainActivity.java(com.intellij.ide.highlighter.JavaFileType@5a13f3de)
java.lang.RuntimeException: Exception while applying information to Editor: file://C:/Users/Christopher/AndroidStudioProjects/AndroidStudioActivityTemplates/templates/basic activity/fragment/src/main/java/io/github/ciscorucinski/androidstudio/activitytemplate/basicactivityfragment/MainActivity.java(com.intellij.ide.highlighter.JavaFileType@5a13f3de)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$3.run(PassExecutorService.java:521)
    at com.intellij.openapi.application.TransactionGuardImpl$6.run(TransactionGuardImpl.java:291)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:326)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:310)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:795)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:631)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:387)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.IndexOutOfBoundsException: Wrong offset: -1. Should be in range: [0, 1639]
    at com.intellij.openapi.editor.impl.LineSet.findLineIndex(LineSet.java:141)
    at com.intellij.openapi.editor.impl.DocumentImpl.getLineNumber(DocumentImpl.java:919)
    at com.intellij.openapi.editor.impl.view.EditorCoordinateMapper.offsetToVisualLine(EditorCoordinateMapper.java:199)
    at com.intellij.openapi.editor.impl.view.EditorView.offsetToVisualLine(EditorView.java:174)
    at com.intellij.openapi.editor.impl.view.EditorSizeManager.doInvalidateRange(EditorSizeManager.java:307)
    at com.intellij.openapi.editor.impl.view.EditorSizeManager.invalidateRange(EditorSizeManager.java:300)
    at com.intellij.openapi.editor.impl.view.EditorView.invalidateRange(EditorView.java:308)
    at com.intellij.openapi.editor.impl.EditorImpl$1.attributesChanged(EditorImpl.java:417)
    at com.intellij.openapi.editor.impl.EditorImpl$1.afterAdded(EditorImpl.java:381)
    at com.intellij.openapi.editor.impl.MarkupModelImpl.fireAfterAdded(MarkupModelImpl.java:231)
    at com.intellij.openapi.editor.impl.MarkupModelImpl.addRangeHighlighter(MarkupModelImpl.java:136)
    at com.intellij.openapi.editor.impl.MarkupModelImpl.addRangeHighlighterAndChangeAttributes(MarkupModelImpl.java:122)
    at com.intellij.openapi.editor.impl.MarkupModelImpl.addRangeHighlighter(MarkupModelImpl.java:174)
    at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingHighlightingComponent.processRegion(AdvancedExpressionFoldingHighlightingComponent.java:114)
    at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingHighlightingComponent$2.onFoldRegionStateChange(AdvancedExpressionFoldingHighlightingComponent.java:80)
    at com.intellij.openapi.editor.impl.FoldingModelImpl.notifyListenersOnFoldRegionStateChange(FoldingModelImpl.java:584)
    at com.intellij.openapi.editor.impl.FoldingModelImpl.collapseFoldRegion(FoldingModelImpl.java:387)
    at com.intellij.openapi.editor.impl.FoldRegionImpl.doSetExpanded(FoldRegionImpl.java:90)
    at com.intellij.openapi.editor.impl.FoldRegionImpl.setExpanded(FoldRegionImpl.java:69)
    at com.intellij.codeInsight.folding.impl.UpdateFoldRegionsOperation.applyExpandStatus(UpdateFoldRegionsOperation.java:108)
    at com.intellij.codeInsight.folding.impl.UpdateFoldRegionsOperation.run(UpdateFoldRegionsOperation.java:95)
    at com.intellij.openapi.editor.impl.FoldingModelImpl.runBatchFoldingOperation(FoldingModelImpl.java:225)
    at com.intellij.openapi.editor.impl.FoldingModelImpl.runBatchFoldingOperationDoNotCollapseCaret(FoldingModelImpl.java:240)
    at com.intellij.codeInsight.folding.impl.FoldingUpdate.lambda$getUpdateResult$1(FoldingUpdate.java:120)
    at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.lambda$updateFoldRegionsAsync$2(CodeFoldingManagerImpl.java:323)
    at com.intellij.codeInsight.daemon.impl.CodeFoldingPass.doApplyInformationToEditor(CodeFoldingPass.java:59)
    at com.intellij.codeHighlighting.TextEditorHighlightingPass.applyInformationToEditor(TextEditorHighlightingPass.java:115)
    at com.intellij.codeInsight.daemon.impl.PassExecutorService$3.run(PassExecutorService.java:508)
    ... 20 more

Other Side Effects

[Edit: these side effects don't seem to happen now since I updated past 0.7.5. These issues only happened after I used the workaround ( see comment's in #38 ) to download a new EAP update via the Intelli J platform's plugin update mechanism. After the new plugin version was recognized by the Intelli J platform, and I didn't have to use the workaround, this issue went away]

When selecting a custom color scheme (Darcula and default aren't effected), the IDE will change the colors for the folded text. My custom color scheme has yellow foreground color for folded text. For a second or so after applying a new color scheme (or after starting up the IDE) the IDE will completely change the values for folded text. Either it will enable both foreground and background options and set new colors, or it will disable foreground and background option.

Environment

Android Studio 2.3
Build #AI-162.3764568, built on February 24, 2017
JRE: 1.8.0_112-release-b06 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

----

Advanced Expression Folding Plugin version: 0.7.5

Do not fold concatenation with new-line breaks that improve readability

Example (ignore nonsense where clauses):

String query = 
"SELECT * FROM table" +
"WHERE some_id > 1" +
"AND some_id > 2" +
"AND some_id > 3" +
"AND some_id > 4" +
"AND some_id > 5" +
"AND some_id > 6;"

should stay this way, and not be turned into:

String query = "SELECT * FROM table WHERE some_id > 1 AND some_id > 2 AND some_id > 3 AND some_id > 4 AND some_id > 5 AND some_id > 6";

Groovy Truth

I was a Groovy programmer for few years but now working on a lagacy Java 6 project and every night I'm crying into pillow.
Could you make a folding into Groovy Truth style?
I mean that instead of

if (users.isEmpty()) {
// ...
}

fold it to simple

if (users) {
// ...
}

Error: com.intellij.openapi.project.IndexNotReadyException in the AdvancedExpressionFoldingBuilder class

Hello, some time ago i started use this beautiful plugin (thank you for it!) and today i found some strange error in the AndroidStudio v.2.3.1 for MacOS (Sierra) "com.intellij.openapi.project.IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReadyException documentation...". I found that this issue is started from the AdvancedExpressionFoldingBuilder class (line 1054), may be you can fix it fast, it would be great. Full exception log:
com.intellij.openapi.project.IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReadyException documentation at com.intellij.util.indexing.FileBasedIndexImpl.handleDumbMode(FileBasedIndexImpl.java:750) at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:698) at com.intellij.util.indexing.FileBasedIndexImpl.ensureUpToDate(FileBasedIndexImpl.java:681) at com.intellij.psi.stubs.StubIndexImpl.doProcessStubs(StubIndexImpl.java:335) at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:316) at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:146) at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:135) at com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex.get(JavaFullClassNameIndex.java:48) at com.intellij.psi.impl.file.impl.JavaFileManagerImpl.doFindClasses(JavaFileManagerImpl.java:91) at com.intellij.psi.impl.file.impl.JavaFileManagerImpl.findClass(JavaFileManagerImpl.java:126) at com.intellij.psi.impl.PsiElementFinderImpl.findClass(PsiElementFinderImpl.java:54) at com.intellij.psi.impl.JavaPsiFacadeImpl.doFindClass(JavaPsiFacadeImpl.java:122) at com.intellij.psi.impl.JavaPsiFacadeImpl.findClass(JavaPsiFacadeImpl.java:99) at com.intellij.psi.impl.PsiClassImplUtil.findSpecialSuperClass(PsiClassImplUtil.java:790) at com.intellij.psi.impl.PsiClassImplUtil.getSuperClass(PsiClassImplUtil.java:782) at com.intellij.psi.impl.source.PsiClassImpl.getSuperClass(PsiClassImpl.java:235) at com.intellij.psi.impl.source.resolve.JavaResolveUtil.isAccessible(JavaResolveUtil.java:171) at com.intellij.psi.impl.source.resolve.JavaResolveUtil.isAccessible(JavaResolveUtil.java:65) at com.intellij.psi.impl.source.resolve.PsiResolveHelperImpl.isAccessible(PsiResolveHelperImpl.java:127) at com.intellij.psi.infos.CandidateInfo.isAccessible(CandidateInfo.java:116) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolve(PsiReferenceExpressionImpl.java:258) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.access$000(PsiReferenceExpressionImpl.java:61) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:196) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:185) at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:193) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver$1.elementFinished(PsiReferenceExpressionImpl.java:234) at com.intellij.psi.JavaRecursiveElementWalkingVisitor$1.elementFinished(JavaRecursiveElementWalkingVisitor.java:35) at com.intellij.psi.JavaRecursiveElementWalkingVisitor$1.elementFinished(JavaRecursiveElementWalkingVisitor.java:32) at com.intellij.util.WalkingState.next(WalkingState.java:80) at com.intellij.util.WalkingState.walkChildren(WalkingState.java:61) at com.intellij.util.WalkingState.elementStarted(WalkingState.java:52) at com.intellij.psi.PsiWalkingState.elementStarted(PsiWalkingState.java:73) at com.intellij.psi.JavaRecursiveElementWalkingVisitor.visitElement(JavaRecursiveElementWalkingVisitor.java:41) at com.intellij.psi.JavaElementVisitor.visitExpression(JavaElementVisitor.java:103) at com.intellij.psi.JavaElementVisitor.visitCallExpression(JavaElementVisitor.java:187) at com.intellij.psi.JavaElementVisitor.visitMethodCallExpression(JavaElementVisitor.java:183) at com.intellij.psi.impl.source.tree.java.PsiMethodCallExpressionImpl.accept(PsiMethodCallExpressionImpl.java:142) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolveAllQualifiers(PsiReferenceExpressionImpl.java:217) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:195) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:185) at com.intellij.psi.impl.source.resolve.ResolveCache$4.compute(ResolveCache.java:191) at com.intellij.psi.impl.source.resolve.ResolveCache$4.compute(ResolveCache.java:188) at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112) at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:188) at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:745) at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:734) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.multiResolve(PsiReferenceExpressionImpl.java:345) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionBase.advancedResolve(PsiReferenceExpressionBase.java:86) at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionBase.resolve(PsiReferenceExpressionBase.java:48) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getVariableExpression(AdvancedExpressionFoldingBuilder.java:1054) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getReferenceExpression(AdvancedExpressionFoldingBuilder.java:1038) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getReferenceExpression(AdvancedExpressionFoldingBuilder.java:1016) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.calculateExpression(AdvancedExpressionFoldingBuilder.java:414) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.lambda$getExpression$3(AdvancedExpressionFoldingBuilder.java:381) at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:137) at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:49) at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222) at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:65) at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:38) at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:130) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getExpression(AdvancedExpressionFoldingBuilder.java:380) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingHighlightingComponent.findHighlightingExpression(AdvancedExpressionFoldingHighlightingComponent.java:205) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingHighlightingComponent.access$000(AdvancedExpressionFoldingHighlightingComponent.java:31) at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingHighlightingComponent$3.mouseMoved(AdvancedExpressionFoldingHighlightingComponent.java:131) at com.intellij.openapi.editor.impl.EditorImpl$MyMouseMotionListener.mouseMoved(EditorImpl.java:6245) at java.awt.Component.processMouseMotionEvent(Component.java:6578) at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3342) at java.awt.Component.processEvent(Component.java:6302) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4538) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:795) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:627) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:387) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Failed to open a file

Caused by: java.lang.ClassCastException: com.intellij.psi.impl.source.PsiFieldImpl cannot be cast to com.intellij.psi.PsiLocalVariable
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getForStatementExpression(AdvancedExpressionFoldingBuilder.java:259)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.getExpression(AdvancedExpressionFoldingBuilder.java:373)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:169)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:193)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:193)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:193)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:193)
at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:193)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:63)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.a(FoldingUpdate.java:236)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:222)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.buildInitialFoldings(CodeFoldingManagerImpl.java:225)
at com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl.loadEditorInBackground(PsiAwareTextEditorImpl.java:54)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.b(AsyncEditorLoader.java:98)
at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$commitAndRunReadAction$1(PsiDocumentManagerBase.java:464)
at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$commitAndRunReadAction$2(PsiDocumentManagerBase.java:489)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:946)
at com.intellij.psi.impl.PsiDocumentManagerBase.commitAndRunReadAction(PsiDocumentManagerBase.java:487)
at com.intellij.psi.impl.PsiDocumentManagerBase.commitAndRunReadAction(PsiDocumentManagerBase.java:464)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.a(AsyncEditorLoader.java:97)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.a(ProgressIndicatorUtils.java:147)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:176)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:556)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:501)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:66)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:163)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:145)
at com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader.a(AsyncEditorLoader.java:96)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:212)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Expanding setX fold region issues with right parenthesis

It appears that all the foldings for the setter methods have an issue when expanding them. After they are expanded, the right parenthesis is still missing from the expanded fold region.

In fact, there still is a fold region that exists right after the initial fold region.

Example

With the original Android code...

setContentView(R.layout.activity_main);

...it will be folded as...

contentView = R.layout.activity_main;

...but when I expand the fold region, I get the following result...

setContentView(R.layout.activity_main;

Notice the missing parenthesis before the semi-colon. Also, if I hover my mouse just before the ;, there will be a secondary fold region that I can expand to bring back the semi-colon.

Environment

Android Studio 2.4 Preview 5
Build #AI-171.3883974, built on April 6, 2017
JRE: 1.8.0_112-release-736 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

Respect and hide line breaks when folding Strings

Would be great to hide intermediate quotes and replace line breaks with real ones

E.g. a bit of json split across multiple lines like this:

"{\n" +
"\"testTextProp1\": \"textProp1\",\n" +
"\"nestedObject\": {\n" +
"  \"nestedTextProp\": \"nestedText\",\n" +
"  \"nestedSubObject\": {\n" +
"    \"nestedSubIntProp\": 33\n" +
"  },\n" +
"  \"testFloatProp\": 0.5\n" +
"},\n" +
"\"testTextProp2\": \"textProp2\",\n" +
"\"testIntProp\": 42,\n" +
"\"ignoredArrayProp\": [43, \"blah\"],\n" +
"\"emptyObjectProp\": {},\n" +
"\"testNullProp\": null\n" +
"}";

Gets folded into a big long string like this
image

Editor doesn't load a class

One specific class in a project doesn't open in the Editor: it keeps spinning with "Loading" message but never shows the source. Same class also doesn't show up even if it comes from a maven dependency (in another project).

There're no suspicious messages in the log, and no error/exceptions are shown in IDE UI.

Disabling the Advanced Java Plugin in IDEA settings fixes the problem, so I suppose there's a bug :)

Uploading Editor Loading Forever

The affected class is com.predic8.membrane.core.RuleManager in the following project: https://github.com/membrane/service-proxy.

NPE from Operation.simplify

I'm seeing the following IDE exception when viewing the android.support.v7.widget.helper.ItemTouchHelper source from the Android support lib version 25.3.1:

IDE is Android Studio 2.4 Preview 3.

null
java.lang.NullPointerException
	at com.intellij.advancedExpressionFolding.Operation.simplify(Operation.java:75)
	at com.intellij.advancedExpressionFolding.Expression.simplify(Expression.java:171)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:173)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.advancedExpressionFolding.AdvancedExpressionFoldingBuilder.buildFoldRegions(AdvancedExpressionFoldingBuilder.java:195)
	at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
	at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:60)
	at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:83)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:236)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:222)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.getUpdateResult(FoldingUpdate.java:112)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.lambda$updateFoldRegions$1(FoldingUpdate.java:101)
	at com.intellij.psi.impl.PsiParameterizedCachedValue.doCompute(PsiParameterizedCachedValue.java:53)
	at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:222)
	at com.intellij.psi.impl.PsiCachedValue.getValueWithLock(PsiCachedValue.java:65)
	at com.intellij.psi.impl.PsiParameterizedCachedValue.getValue(PsiParameterizedCachedValue.java:43)
	at com.intellij.psi.util.CachedValuesManager.getParameterizedCachedValue(CachedValuesManager.java:97)
	at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:97)
	at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegions(CodeFoldingManagerImpl.java:326)
	at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegionsAsync(CodeFoldingManagerImpl.java:312)
	at com.intellij.codeInsight.daemon.impl.CodeFoldingPass.doCollectInformation(CodeFoldingPass.java:42)
	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$null$1(PassExecutorService.java:440)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1132)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:433)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:587)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:532)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:66)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:432)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:408)
	at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:142)
	at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:238)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:406)
	at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:165)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Make plugin available to Android Studio

Only supported IDE is IntelliJ IDEA. This should also work with Android Studio.

Edit: I downloaded the JAR and added it to Android Studio. Things seem to work well. But I cannot figure out how to enable / disable features as mentioned in the Medium Post.

Cannot render whole java class edit windows with this plugin

I have such lines in code

        if (amountInSrcCurrency) {
            assertTrue(savedContext.getAmount().compareTo(amount.setScale(4, BigDecimal.ROUND_HALF_UP).divide(transferDetailEntity.getRate(), BigDecimal.ROUND_HALF_UP)) == 0);
        } else {
            assertTrue(savedContext.getAmount().compareTo(amount.setScale(4, BigDecimal.ROUND_DOWN)) == 0);
        }

With enabled Arithmetic operations in
File | Settings | Editor | General | Code Folding

IDEA cannot show java class - endless loading window instead

some screenshots:
selection_046
selection_047

IDEA info:

IntelliJ IDEA 2016.3
Build #IU-163.7743.44, built on November 18, 2016
JRE: 1.8.0_112-release-408-b2 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

Incorrect code folding for Fluent API usage

I was looking at some of my old code to see what was getting folding when I found a strange case of folding that dealt with fluent API usage

I added lines 37 and 38 to show the non-fluent API usage...

code
Note: Line 38 and 40 both use the same custom Number class with a fluent API. In line 38, the fluent API is not used, and the code folding looks good. In line 40, the fluent API is used, and the code folding looks weird.

If a better code folding solution for fluent API usage cannot be built, then not folding the code for fluent API usage probably should be done.

JavaMoney support

JavaMoney project is a project for bringing an standard Money and Currency API.
It would be great to support the API in your plugin.
I'm a minor contributor on JavaMoney and feeling little bit responsible to do the work.
But I don't want to stole your codding pleasure ;-)
Actually I have a plan to implement a separate plugin for JavaMoney support with inspections and intentions.
So if you busy or don't want to implement the JavaMoney support I can do that.

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.