From 9b37af6bfa2b1d15317f3d79890b2a609d935f7c Mon Sep 17 00:00:00 2001 From: Haijian Wang Date: Thu, 14 Feb 2013 09:59:41 +0200 Subject: ParseException does not output file name (Ticket #10967) Change-Id: I16a1993284cfb8d73596ec8c2b8956d8e7f9dc8e --- .../com/vaadin/sass/internal/ScssStylesheet.java | 12 +++++++- .../sass/internal/parser/SCSSParseException.java | 34 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 theme-compiler/src/com/vaadin/sass/internal/parser/SCSSParseException.java (limited to 'theme-compiler/src/com/vaadin/sass/internal') diff --git a/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java b/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java index fd00dbff2c..64279ad1e7 100644 --- a/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java +++ b/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java @@ -32,7 +32,9 @@ import org.w3c.css.sac.InputSource; import com.vaadin.sass.internal.handler.SCSSDocumentHandler; import com.vaadin.sass.internal.handler.SCSSDocumentHandlerImpl; import com.vaadin.sass.internal.handler.SCSSErrorHandler; +import com.vaadin.sass.internal.parser.ParseException; import com.vaadin.sass.internal.parser.Parser; +import com.vaadin.sass.internal.parser.SCSSParseException; import com.vaadin.sass.internal.resolver.ScssStylesheetResolver; import com.vaadin.sass.internal.resolver.VaadinResolver; import com.vaadin.sass.internal.tree.BlockNode; @@ -103,6 +105,7 @@ public class ScssStylesheet extends Node { * imported children scss node will have the same encoding as their * parent, ultimately the root scss file. The root scss node has this * "encoding" parameter to be null. Its encoding is determined by the + * * @charset declaration, the default one is ASCII. */ File file = new File(identifier); @@ -120,7 +123,14 @@ public class ScssStylesheet extends Node { Parser parser = new Parser(); parser.setErrorHandler(new SCSSErrorHandler()); parser.setDocumentHandler(handler); - parser.parseStyleSheet(source); + + try { + parser.parseStyleSheet(source); + } catch (ParseException e) { + // catch ParseException, re-throw a SCSSParseException which has + // file name info. + throw new SCSSParseException(e, identifier); + } stylesheet.setCharset(parser.getInputSource().getEncoding()); return stylesheet; diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/SCSSParseException.java b/theme-compiler/src/com/vaadin/sass/internal/parser/SCSSParseException.java new file mode 100644 index 0000000000..6d56c8128e --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/SCSSParseException.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2013 Vaadin Ltd. + * + * 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.vaadin.sass.internal.parser; + +public class SCSSParseException extends ParseException { + private ParseException parseException; + private String fileName; + + public SCSSParseException(ParseException parseException, String fileName) { + this.parseException = parseException; + this.fileName = fileName; + } + + @Override + public String getMessage() { + StringBuilder builder = new StringBuilder(); + builder.append("Error when parsing file ").append(fileName) + .append("\n").append(parseException.getMessage()); + return builder.toString(); + } +} -- cgit v1.2.3