private CompilationResult doCompile(LessSource source, Configuration options) throws Less4jException {
StyleSheet lessStyleSheet = null;
if (options != null && options.getCache() != null) {
lessStyleSheet = (StyleSheet) options.getCache().getAst(source);
if (lessStyleSheet != null) {
lessStyleSheet = lessStyleSheet.clone();
}
}
if (lessStyleSheet == null) {
ParseResult result = toAntlrTree(source);
lessStyleSheet = astBuilder.parseStyleSheet(result.getTree());
if (options != null && options.getCache() != null) {
options.getCache().setAst(source, lessStyleSheet);
lessStyleSheet = lessStyleSheet.clone();
}
}
Map<String, HiddenTokenAwareTree> variables = toAntlrTree(options.getVariables());
List<VariableDeclaration> externalVariables = astBuilder.parseVariables(variables);
lessStyleSheet.addMembers(externalVariables);
lessStyleSheet.configureParentToAllChilds();
try {
ASTCssNode cssStyleSheet = compiler.compileToCss(lessStyleSheet, source, options);
CompilationResult compilationResult = createCompilationResult(cssStyleSheet, source, externalVariables, compiler.getImportedsources(), options);
return compilationResult;
} catch (UnableToFinish ex) {
problemsHandler.unableToFinish(lessStyleSheet, ex);
return createEmptyCompilationResult();
}
}