cheptsov / advancedexpressionfolding Goto Github PK
View Code? Open in Web Editor NEWHome Page: https://plugins.jetbrains.com/plugin/9320?pr=idea
Home Page: https://plugins.jetbrains.com/plugin/9320?pr=idea
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.
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; };
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);
}
}
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)
Would be nice to see class reference being folded e.g. String.class
becomes String
like Groovy and others support it.
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)
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 );
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.
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<>
Is there a short-cut to quickly toggle the folding on the fly? I do want to look at the real code, most times.
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";
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)
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...
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.
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.
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.
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)
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.
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);
The getter folding here is not quite right. Since there needs to be differentiation between getAndIncrement
and incrementAndGet
though, maybe fold to ++
and --
prefix/postfix.
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)
For example:
@Nullable Foo
to Foo?
@NotNull Foo
to Foo!
@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).
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 ''.
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:
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:
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.
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
[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.
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
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";
I believe instead of folding it it should be left as is.
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) {
// ...
}
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)
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)
"Abc: " + myVar.meth()
Folds to
"Abc: ${myVar.meth()}"
But
"Abc:" + myVar.meth()
Folds to
"Abc:${ myVar.meth()}"
With an extraneous space after the opening brace.
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.
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.
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
e.g.
ternaryOutput = (sampleText != null) ? sampleText : 'Viva Las Vegas!';
becomes
elvisOutput = sampleText?: 'Viva Las Vegas!';
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" +
"}";
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 :)
The affected class is com.predic8.membrane.core.RuleManager
in the following project: https://github.com/membrane/service-proxy.
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)
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.
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
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
I noted that you are trying to use ligatures an mathematic notations in folding.
Looks like this might be useful for you: the [Fortress]https://en.wikipedia.org/wiki/Fortress_(programming_language)) developed in Sun labs like a FORTRAN replacement and it is a symbiosis of programming language and math notation.
Take a look on the refcard
Hope you'll find a lot of inspiration here
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...
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 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.
Groovy has a cool feature that in my experience of development financial applications makes code more cleaner: decimal literal G
for BigDecimal
.
http://docs.groovy-lang.org/next/html/documentation/core-syntax.html#_decimal_literals
Instead of
new BigDecimal("1.0005").add(new BigDecimal(42.42))
show:
1.0005G + 42.42G
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.