diff --git a/grammar/grammar.iml b/grammar/grammar.iml
index 5959571cff2..0b8311a01e8 100644
--- a/grammar/grammar.iml
+++ b/grammar/grammar.iml
@@ -16,6 +16,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/grammar/src/class.grm b/grammar/src/class.grm
index 41fb9449dab..00f9e0229c1 100644
--- a/grammar/src/class.grm
+++ b/grammar/src/class.grm
@@ -1,5 +1,7 @@
/**
h2. Classes
+
+*Relevant pages:* [Classes and Inheritance]
*/
/*
diff --git a/grammar/src/class_members.grm b/grammar/src/class_members.grm
index 4394722d5c5..aa46d40e9b5 100644
--- a/grammar/src/class_members.grm
+++ b/grammar/src/class_members.grm
@@ -41,7 +41,7 @@ memberDeclaration
: function
: property
: class
- : extension ยง
+ : extension
: typedef
: anonymousInitializer
;
diff --git a/grammar/src/lexical.grm b/grammar/src/lexical.grm
index 759a43b786e..40c41efad41 100644
--- a/grammar/src/lexical.grm
+++ b/grammar/src/lexical.grm
@@ -2,13 +2,6 @@
h1. Lexical structure
*/
-SimpleName
- : ;
-FieldName
- : "$" SimpleName;
-LabelName
- : "@" SimpleName;
-
[helper]
Digit
: ["0".."9"];
@@ -29,15 +22,47 @@ HexadecimalLiteral
CharacterLiteral
: ;
+/**
+bq. See [Basic types]
+*/
+
StringWithTemplates
: ;
NoEscapeString
: <"""-quoted string>;
+/**
+bq. See [String templates]
+*/
+
SEMI
: ;
+
+SimpleName
+ :
+ : "`" "`"
+ ;
+
+/**
+bq. See [Java interoperability]
+*/
+
+FieldName
+ : "$" SimpleName;
+
+/**
+bq. See [Properties And Fields]
+*/
+
+LabelName
+ : "@" SimpleName;
+
+/**
+bq. See [Nonlocal returns and jumps]
+*/
+
/* Symbols:
[](){}<>
diff --git a/grammar/src/modifiers.grm b/grammar/src/modifiers.grm
index 757dd3a47c4..221a5718a9b 100644
--- a/grammar/src/modifiers.grm
+++ b/grammar/src/modifiers.grm
@@ -13,7 +13,6 @@ modifier
: memberModifier
: parameterKind
: attributes
- // sealed by default
;
classModifier
diff --git a/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java b/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java
index 51ca2e9974e..daffdaf0224 100644
--- a/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java
+++ b/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java
@@ -1,5 +1,11 @@
package org.jetbrains.jet.grammar;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
+
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
@@ -88,7 +94,14 @@ public class ConfluenceHyperlinksGenerator {
Set declaredSymbols = new HashSet();
Set usedSymbols = new HashSet();
+ Multimap usages = Multimaps.newListMultimap(Maps.>newHashMap(), new Supplier>() {
+ @Override
+ public List get() {
+ return Lists.newArrayList();
+ }
+ });
List tokens = new ArrayList();
+ Declaration lastDeclaration = null;
while (true) {
Token advance = grammarLexer.advance();
@@ -97,10 +110,13 @@ public class ConfluenceHyperlinksGenerator {
}
if (advance instanceof Declaration) {
Declaration declaration = (Declaration) advance;
+ lastDeclaration = declaration;
declaredSymbols.add(declaration.getName());
}
else if (advance instanceof Identifier) {
Identifier identifier = (Identifier) advance;
+ assert lastDeclaration != null;
+ usages.put(identifier.getName(), lastDeclaration.getName());
usedSymbols.add(identifier.getName());
}
tokens.add(advance);
@@ -109,10 +125,25 @@ public class ConfluenceHyperlinksGenerator {
for (Token token : tokens) {
if (token instanceof Declaration) {
Declaration declaration = (Declaration) token;
+ result.append("{anchor:").append(declaration.getName()).append("}");
if (!usedSymbols.contains(declaration.getName())) {
// result.append("(!) *Unused!* ");
System.out.println("Unused: " + token);
}
+ Collection myUsages = usages.get(declaration.getName());
+ if (!myUsages.isEmpty()) {
+ result.append("\\[{color:grey}Used by ");
+ for (Iterator iterator = myUsages.iterator(); iterator.hasNext(); ) {
+ String usage = iterator.next();
+ result.append("[#").append(usage).append("]");
+ if (iterator.hasNext()) {
+ result.append(", ");
+ }
+ }
+ result.append("{color}\\]\n");
+ }
+ result.append(token);
+ continue;
}
else if (token instanceof Identifier) {
Identifier identifier = (Identifier) token;
diff --git a/grammar/src/org/jetbrains/jet/grammar/Declaration.java b/grammar/src/org/jetbrains/jet/grammar/Declaration.java
index 47451807c88..e6c6396fd61 100644
--- a/grammar/src/org/jetbrains/jet/grammar/Declaration.java
+++ b/grammar/src/org/jetbrains/jet/grammar/Declaration.java
@@ -13,7 +13,7 @@ public class Declaration extends Token {
@Override
public String toString() {
- return "{anchor:" + name + "}*" + name + "*";
+ return "*" + name + "*";
}
public String getName() {
diff --git a/grammar/src/toplevel.grm b/grammar/src/toplevel.grm
index 2f2456f6ad7..f5318c57325 100644
--- a/grammar/src/toplevel.grm
+++ b/grammar/src/toplevel.grm
@@ -1,5 +1,7 @@
/**
h1. Syntax
+
+*Relevant pages:* [Namespaces]
*/
diff --git a/grammar/src/when.grm b/grammar/src/when.grm
index 180c0ee2f83..6cd32b72b73 100644
--- a/grammar/src/when.grm
+++ b/grammar/src/when.grm
@@ -1,5 +1,7 @@
/**
h4. Pattern matching
+
+*Relevant pages:* [Pattern matching]
*/
when