diff options
author | Danny van Bruggen <hexagonaal@gmail.com> | 2016-12-05 20:42:06 +0100 |
---|---|---|
committer | Danny van Bruggen <hexagonaal@gmail.com> | 2016-12-05 20:42:06 +0100 |
commit | 915bbb87897978a87e7b360be438c20cb60d7ddb (patch) | |
tree | aa78f54e288450425c9905625c579cc0c31aae74 /javaparser-core/src | |
parent | c6959148142c467cbf6959c037ce17ea4635316c (diff) | |
download | javaparser-915bbb87897978a87e7b360be438c20cb60d7ddb.tar.gz |
Remove EmptyImportDeclaration.
Add BadImportDeclaration.
Diffstat (limited to 'javaparser-core/src')
19 files changed, 120 insertions, 94 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/BadImportDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/BadImportDeclaration.java new file mode 100644 index 000000000..51dbbb2ae --- /dev/null +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/BadImportDeclaration.java @@ -0,0 +1,59 @@ +package com.github.javaparser.ast.imports; + +import com.github.javaparser.Range; +import com.github.javaparser.ast.nodeTypes.BadNode; +import com.github.javaparser.ast.observing.ObservableProperty; +import com.github.javaparser.ast.visitor.GenericVisitor; +import com.github.javaparser.ast.visitor.VoidVisitor; + +import static com.github.javaparser.utils.Utils.assertNotNull; + +/** + * An import declaration that failed to parse. + */ +public class BadImportDeclaration extends ImportDeclaration implements + BadNode<BadImportDeclaration> { + + private String sourceText; + + public BadImportDeclaration() { + this(null, "import ???;"); + } + + public BadImportDeclaration(Range range, String sourceText) { + super(range); + setSourceText(sourceText); + } + + @Override + public <R, A> R accept(GenericVisitor<R, A> v, A arg) { + return v.visit(this, arg); + } + + @Override + public <A> void accept(VoidVisitor<A> v, A arg) { + v.visit(this, arg); + } + + @Override + public String getSourceText() { + return sourceText; + } + + @Override + public BadImportDeclaration setSourceText(String sourceText) { + notifyPropertyChange(ObservableProperty.SOURCE_TEXT, this.sourceText, sourceText); + this.sourceText = assertNotNull(sourceText); + return this; + } + + @Override + boolean isAsterisk() { + return false; + } + + @Override + boolean isStatic() { + return false; + } +} diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/EmptyImportDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/EmptyImportDeclaration.java deleted file mode 100644 index a137fb2d0..000000000 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/EmptyImportDeclaration.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.javaparser.ast.imports; - -import com.github.javaparser.Range; -import com.github.javaparser.ast.visitor.GenericVisitor; -import com.github.javaparser.ast.visitor.VoidVisitor; - -/** - * A stray semicolon between the imports. - * This isn't described in the JLS, but accepted by most or all tools that parse Java. - * - * @deprecated will be removed in 3.0 - */ -@Deprecated -public class EmptyImportDeclaration extends ImportDeclaration { - - public EmptyImportDeclaration() { - this(null); - } - - public EmptyImportDeclaration(Range range) { - super(range); - } - - @Override - public <R, A> R accept(GenericVisitor<R, A> v, A arg) { - return v.visit(this, arg); - } - - @Override - public <A> void accept(VoidVisitor<A> v, A arg) { - v.visit(this, arg); - } -} diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/ImportDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/ImportDeclaration.java index 57051a8bb..20c4673e6 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/ImportDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/ImportDeclaration.java @@ -43,4 +43,8 @@ public abstract class ImportDeclaration extends Node { public ImportDeclaration(Range range) { super(range); } + + abstract boolean isAsterisk(); + + abstract boolean isStatic(); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/NonEmptyImportDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/NonEmptyImportDeclaration.java deleted file mode 100644 index ca4308bc8..000000000 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/NonEmptyImportDeclaration.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.github.javaparser.ast.imports; - -import com.github.javaparser.Range; - -/** - * Common ancestor for all imports, aside EmptyImportDeclaration - */ -public abstract class NonEmptyImportDeclaration extends ImportDeclaration { - - protected NonEmptyImportDeclaration(Range range) { - super(range); - } - - abstract boolean isAsterisk(); - - abstract boolean isStatic(); -} diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleStaticImportDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleStaticImportDeclaration.java index 603e40b06..e7b186846 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleStaticImportDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleStaticImportDeclaration.java @@ -14,7 +14,7 @@ import static com.github.javaparser.utils.Utils.assertNotNull; * href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5.3">7.5.3. Single-Static-Import * Declarations</a></p> */ -public class SingleStaticImportDeclaration extends NonEmptyImportDeclaration { +public class SingleStaticImportDeclaration extends ImportDeclaration { private ClassOrInterfaceType type; private String staticMember; diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleTypeImportDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleTypeImportDeclaration.java index dee3b6be6..0a44bb3d4 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleTypeImportDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/SingleTypeImportDeclaration.java @@ -12,7 +12,7 @@ import static com.github.javaparser.utils.Utils.assertNotNull; * Example: <code>import com.github.javaparser.JavaParser;</code> <p><a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5.1">JLS * 7.5.1. Single-Type-Import Declarations</a></p> */ -public class SingleTypeImportDeclaration extends NonEmptyImportDeclaration { +public class SingleTypeImportDeclaration extends ImportDeclaration { private ClassOrInterfaceType type; public SingleTypeImportDeclaration() { diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/StaticImportOnDemandDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/StaticImportOnDemandDeclaration.java index 534ddf69a..91d4e9897 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/StaticImportOnDemandDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/StaticImportOnDemandDeclaration.java @@ -12,7 +12,7 @@ import static com.github.javaparser.utils.Utils.assertNotNull; * Example: <code>import static com.github.javaparser.JavaParser.*;</code> <p><a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5.4">7.5.4. * Static-Import-on-Demand Declarations</a></p> */ -public class StaticImportOnDemandDeclaration extends NonEmptyImportDeclaration { +public class StaticImportOnDemandDeclaration extends ImportDeclaration { private ClassOrInterfaceType type; public StaticImportOnDemandDeclaration() { diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/TypeImportOnDemandDeclaration.java b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/TypeImportOnDemandDeclaration.java index 28a10af80..910296110 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/imports/TypeImportOnDemandDeclaration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/imports/TypeImportOnDemandDeclaration.java @@ -15,7 +15,7 @@ import static com.github.javaparser.utils.Utils.assertNotNull; * href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5.2">JLS 7.5.2. Type-Import-on-Demand * Declarations</a></p> */ -public class TypeImportOnDemandDeclaration extends NonEmptyImportDeclaration implements NodeWithName<TypeImportOnDemandDeclaration> { +public class TypeImportOnDemandDeclaration extends ImportDeclaration implements NodeWithName<TypeImportOnDemandDeclaration> { private Name name; public TypeImportOnDemandDeclaration() { diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/BadNode.java b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/BadNode.java new file mode 100644 index 000000000..2567b5da9 --- /dev/null +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/nodeTypes/BadNode.java @@ -0,0 +1,13 @@ +package com.github.javaparser.ast.nodeTypes; + +import com.github.javaparser.ast.Node; + +/** + * A node with parse problems. + * These nodes are stored as "only text". + */ +public interface BadNode<N extends Node> { + String getSourceText(); + + N setSourceText(String sourceText); +} diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/observing/ObservableProperty.java b/javaparser-core/src/main/java/com/github/javaparser/ast/observing/ObservableProperty.java index f573099aa..5a5b00dfe 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/observing/ObservableProperty.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/observing/ObservableProperty.java @@ -86,5 +86,6 @@ public enum ObservableProperty { VALUES, VARIABLE, VARIABLES, + SOURCE_TEXT, VAR_ARGS } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java index 5cb5d7720..fd2d31f18 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/CloneVisitor.java @@ -1192,9 +1192,9 @@ public class CloneVisitor implements GenericVisitor<Visitable, Object> { } @Override - public Visitable visit(EmptyImportDeclaration _n, Object _arg) { + public Visitable visit(BadImportDeclaration _n, Object _arg) { Comment comment = cloneNode(_n.getComment(), _arg); - return new EmptyImportDeclaration(_n.getRange().orElse(null)).setComment(comment); + return new BadImportDeclaration(_n.getRange().orElse(null), _n.getSourceText()).setComment(comment); } @Override diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java index e488abfaa..221ed07eb 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/EqualsVisitor.java @@ -1516,7 +1516,7 @@ public class EqualsVisitor implements GenericVisitor<Boolean, Visitable> { } @Override - public Boolean visit(EmptyImportDeclaration n1, Visitable arg) { + public Boolean visit(BadImportDeclaration n1, Visitable arg) { return true; } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java index 9b714dfa9..03b0ab676 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitor.java @@ -216,7 +216,7 @@ public interface GenericVisitor<R, A> { R visit(NodeList n, A arg); - R visit(EmptyImportDeclaration n, A arg); + R visit(BadImportDeclaration n, A arg); R visit(SingleStaticImportDeclaration n, A arg); diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java index e335c8606..43ff85f8f 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/GenericVisitorAdapter.java @@ -1642,7 +1642,7 @@ public abstract class GenericVisitorAdapter<R, A> implements GenericVisitor<R, A } @Override - public R visit(EmptyImportDeclaration n, A arg) { + public R visit(BadImportDeclaration n, A arg) { visitComment(n, arg); return null; } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitorAdapter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitorAdapter.java index 4e89f9a53..495545294 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitorAdapter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/ModifierVisitorAdapter.java @@ -837,7 +837,7 @@ public class ModifierVisitorAdapter<A> implements GenericVisitor<Visitable, A> { } @Override - public Visitable visit(EmptyImportDeclaration n, A arg) { + public Visitable visit(BadImportDeclaration n, A arg) { visitComment(n, arg); return n; } diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java index 5f145f01d..5f570b7e0 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitor.java @@ -216,7 +216,7 @@ public interface VoidVisitor<A> { void visit(NodeList n, A arg); - void visit(EmptyImportDeclaration n, A arg); + void visit(BadImportDeclaration n, A arg); void visit(SingleStaticImportDeclaration n, A arg); diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java index 0e486f1d5..008cd08f6 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/visitor/VoidVisitorAdapter.java @@ -823,7 +823,7 @@ public abstract class VoidVisitorAdapter<A> implements VoidVisitor<A> { } @Override - public void visit(EmptyImportDeclaration n, A arg) { + public void visit(BadImportDeclaration n, A arg) { visitComment(n.getComment(), arg); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java index 103930873..524cd155e 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java @@ -1368,7 +1368,7 @@ public class PrettyPrintVisitor implements VoidVisitor<Void> { } @Override - public void visit(EmptyImportDeclaration n, Void arg) { + public void visit(BadImportDeclaration n, Void arg) { printer.println(";"); } diff --git a/javaparser-core/src/main/javacc/java_1_8.jj b/javaparser-core/src/main/javacc/java_1_8.jj index 3badb3453..978981dbd 100644 --- a/javaparser-core/src/main/javacc/java_1_8.jj +++ b/javaparser-core/src/main/javacc/java_1_8.jj @@ -1306,11 +1306,15 @@ CompilationUnit CompilationUnit(): TypeDeclaration tn = null; } { - [ LOOKAHEAD(PackageDeclaration()) pakage = PackageDeclaration() ] - ( in = ImportDeclaration() { imports = add(imports, in); } )* - ( tn = TypeDeclaration() { types = add(types, tn); } )* - (<EOF> | "\u001A" /** ctrl+z char **/) - { return new CompilationUnit(range(Position.HOME, tokenEnd()), pakage, imports, types); } + [ LOOKAHEAD(PackageDeclaration()) pakage = PackageDeclaration() ] + ( + in = ImportDeclaration() { imports = add(imports, in); } + | + ";" + )* + ( tn = TypeDeclaration() { types = add(types, tn); } )* + (<EOF> | "\u001A" /** ctrl+z char **/) + { return new CompilationUnit(range(Position.HOME, tokenEnd()), pakage, imports, types); } } PackageDeclaration PackageDeclaration(): @@ -1333,37 +1337,32 @@ ImportDeclaration ImportDeclaration(): ImportDeclaration ret; } { + "import" {begin = tokenBegin();} ( - "import" {begin = tokenBegin();} + "static" type = ClassOrInterfaceType() ( - "static" type = ClassOrInterfaceType() - ( - "." "*" ";" - { ret = new StaticImportOnDemandDeclaration(range(begin, tokenEnd()), type); } - | - ";" - { - if(!type.getScope().isPresent()){ - addProblem("import static has only one identifier"); - ret = new EmptyImportDeclaration(range(begin, tokenEnd())); - } else { - ret = new SingleStaticImportDeclaration(range(begin, tokenEnd()), type.getScope().get(), type.getNameAsString()); - } - } - ) + "." "*" ";" + { ret = new StaticImportOnDemandDeclaration(range(begin, tokenEnd()), type); } | - ( LOOKAHEAD(Name() "." "*") - name = Name() "." "*" ";" - { ret = new TypeImportOnDemandDeclaration(range(begin, tokenEnd()), name); } - | - type = ClassOrInterfaceType() ";" - { ret = new SingleTypeImportDeclaration(range(begin, tokenEnd()), type); } - ) + ";" + { + if(!type.getScope().isPresent()){ + addProblem("import static has only one identifier"); + ret = new BadImportDeclaration(range(begin, tokenEnd()), token.image); + } else { + ret = new SingleStaticImportDeclaration(range(begin, tokenEnd()), type.getScope().get(), type.getNameAsString()); + } + } ) | - ";" {begin = tokenBegin();} - { ret = new EmptyImportDeclaration(range(begin, tokenEnd())); } - ) + ( LOOKAHEAD(Name() "." "*") + name = Name() "." "*" ";" + { ret = new TypeImportOnDemandDeclaration(range(begin, tokenEnd()), name); } + | + type = ClassOrInterfaceType() ";" + { ret = new SingleTypeImportDeclaration(range(begin, tokenEnd()), type); } + ) + ) { return ret; } } |