forked from jruby/jruby
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Java Method Signature parser (initial landing)
- Loading branch information
Showing
16 changed files
with
2,938 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
def jflex(file) | ||
sh "#{JFLEX_BIN} #{file}" | ||
end | ||
|
||
def jay(name='JavaSignatureParser', skeleton='signature_skeleton.parser') | ||
sh "#{JAY_BIN} #{PARSER_DIR}/#{name}.y < #{PARSER_DIR}/#{skeleton} | grep -v ^//t > #{PARSER_DIR}/#{name}.java" | ||
end | ||
|
||
|
||
namespace :parse do | ||
task :generate_java_signature_parser do | ||
jflex 'src/org/jruby/lexer/JavaSignatureLexer.flex' | ||
jay 'JavaSignatureParser', 'signature_skeleton.parser' | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
package org.jruby.ast.java_signature; | ||
|
||
import java.util.List; | ||
|
||
/** | ||
* Java Method signature declaration | ||
*/ | ||
public class MethodSignatureNode { | ||
protected List<Modifier> modifiers; | ||
protected String name; | ||
protected List<ParameterNode> parameterList; | ||
protected TypeNode returnType; | ||
protected List<TypeNode> throwTypes; | ||
|
||
public MethodSignatureNode(String name, List<ParameterNode> parameterList) { | ||
this.name = name; | ||
this.parameterList = parameterList; | ||
} | ||
|
||
public String getName() { | ||
return name; | ||
} | ||
|
||
public List<ParameterNode> getParameterList() { | ||
return parameterList; | ||
} | ||
|
||
public TypeNode getReturnType() { | ||
return returnType; | ||
} | ||
|
||
public void setReturnType(TypeNode returnType) { | ||
this.returnType = returnType; | ||
} | ||
|
||
public void setModifiers(List<Modifier> modifiers) { | ||
this.modifiers = modifiers; | ||
} | ||
|
||
public List<Modifier> getModifiers() { | ||
return modifiers; | ||
} | ||
|
||
public void setThrows(List<TypeNode> throwTypes) { | ||
this.throwTypes = throwTypes; | ||
} | ||
|
||
public List<TypeNode> getThrows() { | ||
return throwTypes; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
StringBuilder builder = new StringBuilder(); | ||
|
||
for (Modifier modifier: modifiers) { | ||
builder.append(modifier).append(' '); | ||
} | ||
|
||
builder.append(returnType).append(' '); | ||
|
||
builder.append(name).append('('); | ||
|
||
int length = parameterList.size(); | ||
for (int i = 0; i < length - 1; i++) { | ||
builder.append(parameterList.get(i)).append(", "); | ||
} | ||
|
||
if (length > 0) builder.append(parameterList.get(length - 1)); | ||
|
||
builder.append(')'); | ||
|
||
length = throwTypes.size(); | ||
if (length > 0) { | ||
builder.append(" throws "); | ||
for (int i = 0; i < length - 1; i++) { | ||
builder.append(throwTypes.get(i)).append(", "); | ||
} | ||
builder.append(throwTypes.get(length - 1)); | ||
} | ||
|
||
return builder.toString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package org.jruby.ast.java_signature; | ||
|
||
/** | ||
* valid method declaration modifiers | ||
*/ | ||
public enum Modifier { | ||
PUBLIC("public"), PROTECTED("protected"), PRIVATE("private"), STATIC("static"), | ||
ABSTRACT("abstract"), FINAL("final"), NATIVE("native"), SYNCHRONIZED("synchronized"), | ||
TRANSIENT("transient"), VOLATILE("volatile"), STRICTFP("strictfp"); | ||
|
||
private String name; | ||
|
||
Modifier(String name) { | ||
this.name = name; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return name; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package org.jruby.ast.java_signature; | ||
|
||
// Fixme: varargs and variableNames with [] on them should ammend type on construction to save | ||
// consumer the effort. | ||
public class ParameterNode { | ||
private final TypeNode type; | ||
private final String variableName; | ||
private boolean isFinal = false; | ||
private boolean isVarArgs = false; | ||
|
||
public ParameterNode(TypeNode type, String variableName) { | ||
this.type = type; | ||
this.variableName = variableName; | ||
} | ||
|
||
public ParameterNode(TypeNode type, String variableName, boolean isFinal) { | ||
this(type, variableName); | ||
|
||
this.isFinal = isFinal; | ||
} | ||
|
||
public ParameterNode(TypeNode type, String variableName, boolean isFinal, boolean isVarArgs) { | ||
this(type, variableName, isFinal); | ||
|
||
this.isVarArgs = isVarArgs; | ||
} | ||
|
||
public TypeNode getType() { | ||
return type; | ||
} | ||
|
||
public String getVariableName() { | ||
return variableName; | ||
} | ||
|
||
public boolean isFinal() { | ||
return isFinal; | ||
} | ||
|
||
public boolean isVarArgs() { | ||
return isVarArgs; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
StringBuilder builder = new StringBuilder(); | ||
|
||
if (isFinal) builder.append("final "); | ||
builder.append(type); | ||
if (isVarArgs()) builder.append("..."); | ||
if (variableName != null) builder.append(" ").append(variableName); | ||
|
||
return builder.toString(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* To change this template, choose Tools | Templates | ||
* and open the template in the editor. | ||
*/ | ||
|
||
package org.jruby.ast.java_signature; | ||
|
||
/** | ||
* For Java primitive types: byte, short, int, long, char, float, double, boolean, void | ||
*/ | ||
public class PrimitiveTypeNode extends TypeNode { | ||
public static PrimitiveTypeNode BYTE = new PrimitiveTypeNode("byte"); | ||
public static PrimitiveTypeNode SHORT = new PrimitiveTypeNode("short"); | ||
public static PrimitiveTypeNode INT = new PrimitiveTypeNode("int"); | ||
public static PrimitiveTypeNode LONG = new PrimitiveTypeNode("long"); | ||
public static PrimitiveTypeNode CHAR = new PrimitiveTypeNode("char"); | ||
public static PrimitiveTypeNode FLOAT = new PrimitiveTypeNode("float"); | ||
public static PrimitiveTypeNode DOUBLE = new PrimitiveTypeNode("double"); | ||
public static PrimitiveTypeNode BOOLEAN = new PrimitiveTypeNode("boolean"); | ||
public static PrimitiveTypeNode VOID = new PrimitiveTypeNode("void"); | ||
|
||
// This should only be used by constants above, but I left it a little open if you want to | ||
// add your own new primitives! | ||
protected PrimitiveTypeNode(String name) { | ||
super(name); | ||
} | ||
|
||
@Override | ||
public boolean isPrimitive() { | ||
return true; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return name; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/* | ||
* To change this template, choose Tools | Templates | ||
* and open the template in the editor. | ||
*/ | ||
|
||
package org.jruby.ast.java_signature; | ||
|
||
/** | ||
* | ||
* @author enebo | ||
*/ | ||
public class ReferenceTypeNode extends TypeNode { | ||
public ReferenceTypeNode(String name) { | ||
super(name); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return name; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package org.jruby.ast.java_signature; | ||
|
||
/** | ||
* Base class for all typed nodes | ||
*/ | ||
public class TypeNode { | ||
protected String name; | ||
protected boolean isArray = false; | ||
|
||
public TypeNode(String name) { | ||
this.name = name; | ||
} | ||
|
||
public String getName() { | ||
return name; | ||
} | ||
|
||
public boolean isPrimitive() { | ||
return false; | ||
} | ||
|
||
public boolean isTyped() { | ||
return false; | ||
} | ||
|
||
public boolean isArray() { | ||
return isArray; | ||
} | ||
|
||
public void setIsArray(boolean isArray) { | ||
this.isArray = isArray; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
/* | ||
* To change this template, choose Tools | Templates | ||
* and open the template in the editor. | ||
*/ | ||
|
||
package org.jruby.ast.java_signature; | ||
|
||
/** | ||
* | ||
* @author enebo | ||
*/ | ||
public class TypedReferenceNode { | ||
|
||
} |
25 changes: 25 additions & 0 deletions
25
src/org/jruby/ast/java_signature/TypedReferenceTypeNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* To change this template, choose Tools | Templates | ||
* and open the template in the editor. | ||
*/ | ||
|
||
package org.jruby.ast.java_signature; | ||
|
||
/** | ||
* | ||
* @author enebo | ||
*/ | ||
public class TypedReferenceTypeNode extends ReferenceTypeNode { | ||
protected Object typeParameter; | ||
|
||
public TypedReferenceTypeNode(String typeName, Object typeParameter) { | ||
super(typeName); | ||
|
||
this.typeParameter = typeParameter; | ||
} | ||
|
||
@Override | ||
public boolean isTyped() { | ||
return true; | ||
} | ||
} |
Oops, something went wrong.