Added some empty help info docs for JSORestrictionsChecker and LongFromJSNIChecker. Added infrastructure for propagating the extra help into to the logger.
Review by: knorton
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2344 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java b/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
index 3eac7c4..b575d62 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
@@ -17,6 +17,7 @@
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.core.ext.TreeLogger.HelpInfo;
import com.google.gwt.core.ext.typeinfo.CompilationUnitProvider;
import com.google.gwt.dev.util.CharArrayComparator;
import com.google.gwt.dev.util.Empty;
@@ -272,7 +273,13 @@
msgBuf.append(": ");
}
msgBuf.append(msg);
- branch.log(TreeLogger.ERROR, msgBuf.toString(), null);
+
+ HelpInfo helpInfo = null;
+ if (error instanceof GWTProblem) {
+ GWTProblem gwtProblem = (GWTProblem) error;
+ helpInfo = gwtProblem.getHelpInfo();
+ }
+ branch.log(TreeLogger.ERROR, msgBuf.toString(), null, helpInfo);
}
}
diff --git a/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java b/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java
index 32315d3..8d4382a 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java
@@ -121,8 +121,9 @@
String qualifiedTypeName = binaryTypeBinding.debugName();
String error = formatBinaryTypeRefErrorMessage(qualifiedTypeName);
+ // TODO(mmendez): provide extra help info?
GWTProblem.recordInCud(binaryTypeReferenceSite.getExpression(), cud,
- error);
+ error, null);
}
}
diff --git a/dev/core/src/com/google/gwt/dev/jdt/FindDeferredBindingSitesVisitor.java b/dev/core/src/com/google/gwt/dev/jdt/FindDeferredBindingSitesVisitor.java
index c62959d..33e6eca 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/FindDeferredBindingSitesVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/FindDeferredBindingSitesVisitor.java
@@ -60,7 +60,7 @@
Scope scope = site.scope;
// Safe since CUS.referenceContext is set in its constructor.
CompilationUnitDeclaration cud = scope.compilationUnitScope().referenceContext;
- GWTProblem.recordInCud(messageSend, cud, message);
+ GWTProblem.recordInCud(messageSend, cud, message, null);
}
private final Map<String, DeferredBindingSite> results = new HashMap<String, DeferredBindingSite>();
diff --git a/dev/core/src/com/google/gwt/dev/jdt/GWTProblem.java b/dev/core/src/com/google/gwt/dev/jdt/GWTProblem.java
index d5c51a7..b61688e 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/GWTProblem.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/GWTProblem.java
@@ -15,6 +15,8 @@
*/
package com.google.gwt.dev.jdt;
+import com.google.gwt.core.ext.TreeLogger.HelpInfo;
+
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.internal.compiler.CompilationResult;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
@@ -29,7 +31,7 @@
public class GWTProblem extends DefaultProblem {
static void recordInCud(ASTNode node, CompilationUnitDeclaration cud,
- String message) {
+ String message, HelpInfo helpInfo) {
CompilationResult compResult = cud.compilationResult();
int[] lineEnds = compResult.getLineSeparatorPositions();
int startLine = Util.getLineNumber(node.sourceStart(), lineEnds, 0,
@@ -37,14 +39,22 @@
int startColumn = Util.searchColumnNumber(lineEnds, startLine,
node.sourceStart());
DefaultProblem problem = new GWTProblem(compResult.fileName, message,
- node.sourceStart(), node.sourceEnd(), startLine, startColumn);
+ node.sourceStart(), node.sourceEnd(), startLine, startColumn, helpInfo);
compResult.record(problem, cud);
}
+ private HelpInfo helpInfo;
+
public GWTProblem(char[] originatingFileName, String message,
- int startPosition, int endPosition, int line, int column) {
+ int startPosition, int endPosition, int line, int column,
+ HelpInfo helpInfo) {
super(originatingFileName, message, IProblem.ExternalProblemNotFixable,
null, ProblemSeverities.Error, startPosition, endPosition, line, column);
+ this.helpInfo = helpInfo;
+ }
+
+ public HelpInfo getHelpInfo() {
+ return helpInfo;
}
}
diff --git a/dev/core/src/com/google/gwt/dev/jdt/JSORestrictionsChecker.java b/dev/core/src/com/google/gwt/dev/jdt/JSORestrictionsChecker.java
index 240c9db..5fd4509 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/JSORestrictionsChecker.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/JSORestrictionsChecker.java
@@ -16,6 +16,7 @@
package com.google.gwt.dev.jdt;
import com.google.gwt.dev.shell.JsValueGlue;
+import com.google.gwt.dev.util.InstalledHelpInfo;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.internal.compiler.ASTVisitor;
@@ -198,7 +199,8 @@
}
private void errorOn(ASTNode node, String error) {
- GWTProblem.recordInCud(node, cud, error);
+ GWTProblem.recordInCud(node, cud, error, new InstalledHelpInfo(
+ "jsoRestrictions.html"));
}
private boolean isForJSOSubclass(Scope scope) {
diff --git a/dev/core/src/com/google/gwt/dev/jdt/LongFromJSNIChecker.java b/dev/core/src/com/google/gwt/dev/jdt/LongFromJSNIChecker.java
index ff53b63..1c89410 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/LongFromJSNIChecker.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/LongFromJSNIChecker.java
@@ -16,6 +16,7 @@
package com.google.gwt.dev.jdt;
import com.google.gwt.core.client.UnsafeNativeLong;
+import com.google.gwt.dev.util.InstalledHelpInfo;
import com.google.gwt.dev.util.JsniRef;
import org.eclipse.jdt.core.compiler.CharOperation;
@@ -224,7 +225,8 @@
}
private void longAccessError(ASTNode node, String message) {
- GWTProblem.recordInCud(node, cud, message);
+ GWTProblem.recordInCud(node, cud, message, new InstalledHelpInfo(
+ "longJsniRestriction.html"));
}
private boolean paramTypesMatch(MethodBinding method, JsniRef jsniRef) {
diff --git a/dev/core/src/com/google/gwt/dev/util/InstalledHelpInfo.java b/dev/core/src/com/google/gwt/dev/util/InstalledHelpInfo.java
new file mode 100644
index 0000000..43a4b63
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/util/InstalledHelpInfo.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * 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.google.gwt.dev.util;
+
+import com.google.gwt.core.ext.TreeLogger.HelpInfo;
+import com.google.gwt.util.tools.Utility;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Help info based on the GWT installation directory.
+ */
+public class InstalledHelpInfo extends HelpInfo {
+ private URL url;
+
+ public InstalledHelpInfo(String htmlDocName) {
+ try {
+ String installPath = Utility.getInstallPath();
+ File file = new File(installPath, "doc");
+ file = new File(file, "helpInfo");
+ file = new File(file, htmlDocName);
+ if (file.isFile() && file.canRead()) {
+ url = file.toURI().toURL();
+ }
+ } catch (RuntimeException e) {
+ // Installation problem; just don't provide help info
+ } catch (MalformedURLException e) {
+ // Unexpected; just don't provide help info
+ }
+ }
+
+ @Override
+ public URL getURL() {
+ return url;
+ }
+}
diff --git a/dev/core/test/com/google/gwt/dev/jdt/GWTProblemTest.java b/dev/core/test/com/google/gwt/dev/jdt/GWTProblemTest.java
index 86388a8..301bcba 100644
--- a/dev/core/test/com/google/gwt/dev/jdt/GWTProblemTest.java
+++ b/dev/core/test/com/google/gwt/dev/jdt/GWTProblemTest.java
@@ -15,6 +15,8 @@
*/
package com.google.gwt.dev.jdt;
+import com.google.gwt.core.ext.TreeLogger.HelpInfo;
+
import junit.framework.TestCase;
import org.eclipse.jdt.core.compiler.CategorizedProblem;
@@ -34,14 +36,19 @@
CompilationUnitDeclaration cud = new CompilationUnitDeclaration(null,
compilationResult, 0);
+ HelpInfo info = new HelpInfo() {
+ };
+
// Pick an Expression subtype to pass in
- GWTProblem.recordInCud(new Wildcard(Wildcard.EXTENDS), cud, errorMessage);
+ GWTProblem.recordInCud(new Wildcard(Wildcard.EXTENDS), cud, errorMessage,
+ info);
CategorizedProblem[] errors = compilationResult.getErrors();
assertEquals(1, errors.length);
- CategorizedProblem problem = errors[0];
+ GWTProblem problem = (GWTProblem) errors[0];
assertTrue(problem.isError());
assertEquals(1, problem.getSourceLineNumber());
assertEquals(errorMessage, problem.getMessage());
+ assertSame(info, problem.getHelpInfo());
}
}
diff --git a/distro-source/core/src/doc/helpInfo/jsoRestrictions.html b/distro-source/core/src/doc/helpInfo/jsoRestrictions.html
new file mode 100644
index 0000000..cf69a7f
--- /dev/null
+++ b/distro-source/core/src/doc/helpInfo/jsoRestrictions.html
@@ -0,0 +1,9 @@
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Restrictions on subclasses of JavaScriptObject</title>
+ </head>
+ <body>
+ TODO(spoon): write some doc!
+ </body>
+</html>
diff --git a/distro-source/core/src/doc/helpInfo/longJsniRestriction.html b/distro-source/core/src/doc/helpInfo/longJsniRestriction.html
new file mode 100644
index 0000000..fdaaac9
--- /dev/null
+++ b/distro-source/core/src/doc/helpInfo/longJsniRestriction.html
@@ -0,0 +1,9 @@
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <title>Restrictions on long values with JSNI</title>
+ </head>
+ <body>
+ TODO(spoon): write some doc!
+ </body>
+</html>