]> source.dussan.org Git - vaadin-framework.git/commitdiff
ParseException does not output file name (Ticket #10967)
authorHaijian Wang <haijian@vaadin.com>
Thu, 14 Feb 2013 07:59:41 +0000 (09:59 +0200)
committerHaijian Wang <haijian@vaadin.com>
Thu, 14 Feb 2013 07:59:41 +0000 (09:59 +0200)
Change-Id: I16a1993284cfb8d73596ec8c2b8956d8e7f9dc8e

theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java
theme-compiler/src/com/vaadin/sass/internal/parser/SCSSParseException.java [new file with mode: 0644]

index fd00dbff2ceb8c324e1221a7f1a7070dec8a6061..64279ad1e70dd8803c5b39c309aea883c14164b9 100644 (file)
@@ -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 (file)
index 0000000..6d56c81
--- /dev/null
@@ -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();
+    }
+}