SomMeri / less4j

Less language is an extension of css and less4j compiles it into regular css. Less adds several dynamic features into css: variables, expressions, nested rules, and so on. Less was designed to be compatible with css and any correct css file is also correct less file.
145 stars 47 forks source link

Infinite loop crash with (reference) imports #299

Closed twhoff closed 8 years ago

twhoff commented 9 years ago

Interesting issue.

I have a bunch of files which import a "settings" file. Let's say we have:

- settings.less
- variables.less
- mixins.less
- fileA.less
- fileB.less

And the files are set up like this:

settings.less

import "variables.less"
import "mixins.less"

fileA.less

import "settings.less"

.someClass {
}

fileB.less

import "settings.less"
import "fileA.less"

.someOtherClass {
}

This will compile fine! However if I change settings.less like this:

settings.less

import (reference) "variables.less"
import (reference) "mixins.less"

I'm getting a garbage collection "OutOfMemory" error which seems to indicate some kind of infinite loop.

There errors I'm seeing are these:

ErrorHandlerMessage.EXIT_HANDLER_EXIT calling System.exit() on receipt of exception=java.lang.OutOfMemoryError from caller=com.r9.horizon.framework.spring.R9HorizonView
r9.log.20150904:java.lang.OutOfMemoryError: GC overhead limit exceeded
r9.log.20150904-    at java.util.HashMap.resize(HashMap.java:703)
r9.log.20150904-    at java.util.HashMap.putVal(HashMap.java:628)
r9.log.20150904-    at java.util.HashMap.putMapEntries(HashMap.java:514)
r9.log.20150904-    at java.util.HashMap.<init>(HashMap.java:489)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.KeyListStorage$Level.clone(KeyListStorage.java:176)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.KeyListStorage$Level.clone(KeyListStorage.java:127)
r9.log.20150904-    at com.github.sommeri.less4j.utils.ArraysUtils.deeplyClonedLinkedList(ArraysUtils.java:174)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.KeyListStorage.clone(KeyListStorage.java:114)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.MixinsDefinitionsStorage.clone(MixinsDefinitionsStorage.java:92)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.LocalScopeData.clone(LocalScopeData.java:15)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.LocalScope.cloneCurrentDataSnapshot(LocalScope.java:141)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.SaveableLocalScope.cloneCurrentDataSnapshot(SaveableLocalScope.java:126)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.local.SaveableLocalScope.save(SaveableLocalScope.java:27)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:25)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
r9.log.20150904-    at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)

and

java.lang.Thread.State: BLOCKED (on object monitor)
20150904.100312     at java.util.HashMap.newNode(HashMap.java:1734)
20150904.100312     at java.util.HashMap.putVal(HashMap.java:630)
20150904.100312     at java.util.HashMap.putMapEntries(HashMap.java:514)
20150904.100312     at java.util.HashMap.<init>(HashMap.java:489)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.KeyListStorage$Level.clone(KeyListStorage.java:176)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.KeyListStorage$Level.clone(KeyListStorage.java:127)
20150904.100312     at com.github.sommeri.less4j.utils.ArraysUtils.deeplyClonedLinkedList(ArraysUtils.java:174)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.KeyListStorage.clone(KeyListStorage.java:114)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.MixinsDefinitionsStorage.clone(MixinsDefinitionsStorage.java:92)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.LocalScopeData.clone(LocalScopeData.java:15)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.LocalScope.cloneCurrentDataSnapshot(LocalScope.java:141)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.SaveableLocalScope.cloneCurrentDataSnapshot(SaveableLocalScope.java:126)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.local.SaveableLocalScope.save(SaveableLocalScope.java:27)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.view.ScopeView.toIndependentWorkingCopyAllParents(ScopeView.java:28)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.CallerCalleeScopeJoiner.mixinsToImport(CallerCalleeScopeJoiner.java:57)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$1.run(MixinsRulesetsSolver.java:73)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$1.run(MixinsRulesetsSolver.java:59)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:61)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:34)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.resolveCalledBody(MixinsRulesetsSolver.java:59)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.access$500(MixinsRulesetsSolver.java:37)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$3.run(MixinsRulesetsSolver.java:164)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.buildMixinReferenceReplacement(MixinsRulesetsSolver.java:153)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveCalls(ReferencesSolver.java:167)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:91)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:75)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.compileBody(MixinsRulesetsSolver.java:86)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.access$000(MixinsRulesetsSolver.java:37)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$1.run(MixinsRulesetsSolver.java:64)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$1.run(MixinsRulesetsSolver.java:59)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:61)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:34)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.resolveCalledBody(MixinsRulesetsSolver.java:59)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.access$500(MixinsRulesetsSolver.java:37)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$3.run(MixinsRulesetsSolver.java:164)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.buildMixinReferenceReplacement(MixinsRulesetsSolver.java:153)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveCalls(ReferencesSolver.java:167)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:91)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:75)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.compileBody(MixinsRulesetsSolver.java:86)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.access$000(MixinsRulesetsSolver.java:37)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$1.run(MixinsRulesetsSolver.java:64)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$1.run(MixinsRulesetsSolver.java:59)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:61)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:34)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.resolveCalledBody(MixinsRulesetsSolver.java:59)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.access$500(MixinsRulesetsSolver.java:37)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver$3.run(MixinsRulesetsSolver.java:164)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.MixinsRulesetsSolver.buildMixinReferenceReplacement(MixinsRulesetsSolver.java:153)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveCalls(ReferencesSolver.java:167)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:91)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.access$000(ReferencesSolver.java:41)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver$1.run(ReferencesSolver.java:68)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:16)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.doSolveReferences(ReferencesSolver.java:64)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveNonCalligReferences(ReferencesSolver.java:129)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:94)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.access$000(ReferencesSolver.java:41)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver$1.run(ReferencesSolver.java:68)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:16)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.doSolveReferences(ReferencesSolver.java:64)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveNonCalligReferences(ReferencesSolver.java:129)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:94)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.access$000(ReferencesSolver.java:41)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver$1.run(ReferencesSolver.java:68)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:16)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.doSolveReferences(ReferencesSolver.java:64)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveNonCalligReferences(ReferencesSolver.java:129)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:94)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.access$000(ReferencesSolver.java:41)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver$1.run(ReferencesSolver.java:68)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:16)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.doSolveReferences(ReferencesSolver.java:64)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveNonCalligReferences(ReferencesSolver.java:129)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.unsafeDoSolveReferences(ReferencesSolver.java:94)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.access$000(ReferencesSolver.java:41)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver$1.run(ReferencesSolver.java:68)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:46)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:25)
20150904.100312     at com.github.sommeri.less4j.core.compiler.scopes.InScopeSnapshotRunner.runInLocalDataSnapshot(InScopeSnapshotRunner.java:16)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.doSolveReferences(ReferencesSolver.java:64)
20150904.100312     at com.github.sommeri.less4j.core.compiler.stages.ReferencesSolver.solveReferences(ReferencesSolver.java:59)
20150904.100312     at com.github.sommeri.less4j.core.compiler.LessToCssCompiler.resolveImportsAndReferences(LessToCssCompiler.java:99)
20150904.100312     at com.github.sommeri.less4j.core.compiler.LessToCssCompiler.compileToCss(LessToCssCompiler.java:47)
20150904.100312     at com.github.sommeri.less4j.core.ThreadUnsafeLessCompiler.doCompile(ThreadUnsafeLessCompiler.java:86)
20150904.100312     at com.github.sommeri.less4j.core.ThreadUnsafeLessCompiler.compile(ThreadUnsafeLessCompiler.java:76)
20150904.100312     at com.github.sommeri.less4j.core.DefaultLessCompiler.compile(DefaultLessCompiler.java:56)
20150904.100312     at com.r9.nucleus.web.less.LessEngine2.render(LessEngine2.java:54)
20150904.100312     at com.r9.nucleus.web.resource.LessProcessor.render(LessProcessor.java:31)
20150904.100312     at com.r9.nucleus.web.resource.ResourceRenderingEngine.renderResource(ResourceRenderingEngine.java:148)
20150904.100312     at com.r9.nucleus.web.resource.WebResourceRepository.renderResource(WebResourceRepository.java:338)
SomMeri commented 9 years ago

I tried to reproduce the issue, but it works for me. I tried with both master and latest release (less4j-1.14.0).

My test:

Judging from your second call stack, I do no really think it is imports (or only imports) who are responsible. ReferencesSolver is called after imports were evaluated and compiles mixin calls, detached rulesets calls and variables.

Could you please give also your mixins and mixins calls (preferably some kind of minimal example)?

SomMeri commented 8 years ago

Closing due to lack of response.