diff --git a/build.gradle b/build.gradle
index d9c346f..8fe553e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ group = 'com.fifesoft'
archivesBaseName = 'languagesupport'
dependencies {
- compile group: 'org.mozilla', name: 'rhino', version: '1.7R4'
+ compile group: 'org.mozilla', name: 'rhino', version: '1.7.6'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
@@ -36,7 +36,7 @@ compileJava {
ext.sharedManifest = manifest {
attributes('Main-Class': 'org.fife.rsta.ac.demo.DemoApp',
- 'Class-Path': 'rsyntaxtextarea.jar autocomplete.jar rhino-1.7R4.jar',
+ 'Class-Path': 'rsyntaxtextarea.jar autocomplete.jar rhino-1.7.6.jar',
'Specification-Title': 'RSyntaxTextArea Language Support',
'Specification-Version': version,
'Implementation-Title': 'org.fife.ui',
diff --git a/src/main/java/org/fife/rsta/ac/java/classreader/ClassFile.java b/src/main/java/org/fife/rsta/ac/java/classreader/ClassFile.java
index 42e9ec9..399b702 100644
--- a/src/main/java/org/fife/rsta/ac/java/classreader/ClassFile.java
+++ b/src/main/java/org/fife/rsta/ac/java/classreader/ClassFile.java
@@ -112,6 +112,7 @@ public class ClassFile implements AccessFlags {
public static final String RUNTIME_VISIBLE_ANNOTATIONS = "RuntimeVisibleAnnotations";
public static final String SIGNATURE = "Signature";
public static final String SOURCE_FILE = "SourceFile";
+ public static final String BOOTSTRAP_METHODS = "BootstrapMethods";
/**
* The 4-byte class file header, "CAFEBABE
".
@@ -542,6 +543,13 @@ private AttributeInfo readAttribute(DataInputStream in) throws IOException {
ai = sf;
}
+ else if (BOOTSTRAP_METHODS.equals(attrName)) { // 4.7.23
+ //String name = getClassFile().getClassName(false) + "." + getName();
+ //System.out.println(name + ": Attribute " + attrName + " not supported");
+ Util.skipBytes(in, attributeLength);
+ //ai = null;
+ }
+
else if (SIGNATURE.equals(attrName)) { // 4.8.8
int signatureIndex = in.readUnsignedShort();
String sig = getUtf8ValueFromConstantPool(signatureIndex);
diff --git a/src/main/java/org/fife/rsta/ac/java/classreader/attributes/Signature.java b/src/main/java/org/fife/rsta/ac/java/classreader/attributes/Signature.java
index ad4e33f..fb1ef75 100644
--- a/src/main/java/org/fife/rsta/ac/java/classreader/attributes/Signature.java
+++ b/src/main/java/org/fife/rsta/ac/java/classreader/attributes/Signature.java
@@ -55,9 +55,14 @@ public List getClassParamTypes() {
int colon = temp.indexOf(':', offs);
while (offs-1) {
String ident = temp.substring(offs, colon);
- char ch = temp.charAt(colon+1);
+ int colonCount = 1;
+ char ch = temp.charAt(colon+colonCount);
+ if (ch==':') { // sometimes, there is another ':'
+ colonCount++;
+ ch = temp.charAt(colon+colonCount);
+ }
if (ch=='L') { // A ClassTypeSignature
- int semicolon = temp.indexOf(';', colon+2);
+ int semicolon = temp.indexOf(';', colon+colonCount+1);
if (semicolon>-1) {
//String type = temp.substring(colon+2, semicolon);
// TODO: ...
diff --git a/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantInvokeDynamicInfo.java b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantInvokeDynamicInfo.java
new file mode 100644
index 0000000..6a8b955
--- /dev/null
+++ b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantInvokeDynamicInfo.java
@@ -0,0 +1,63 @@
+/*
+ * 03/21/2010
+ *
+ * Copyright (C) 2010 Robert Futrell
+ * robert_futrell at users.sourceforge.net
+ * http://fifesoft.com/rsyntaxtextarea
+ *
+ * This library is distributed under a modified BSD license. See the included
+ * RSTALanguageSupport.License.txt file for details.
+ */
+package org.fife.rsta.ac.java.classreader.constantpool;
+
+/**
+ * Class representing a CONSTANT_InvokeDynamic_info
structure.
+ *
+ * @author Robert Futrell
+ * @version 1.0
+ */
+public class ConstantInvokeDynamicInfo extends ConstantPoolInfo {
+
+ private int bootstrapMethodAttrIndex;
+
+ private int nameAndTypeIndex;
+
+
+ /**
+ * Constructor.
+ *
+ * @param bootstrapMethodAttrIndex
+ * @param nameAndTypeIndex
+ */
+ public ConstantInvokeDynamicInfo(int bootstrapMethodAttrIndex, int nameAndTypeIndex) {
+ super(CONSTANT_InvokeDynamic);
+ this.bootstrapMethodAttrIndex = bootstrapMethodAttrIndex;
+ this.nameAndTypeIndex = nameAndTypeIndex;
+ }
+
+
+ public int getBootstrapMethodAttrIndex() {
+ return bootstrapMethodAttrIndex;
+ }
+
+
+ public int getNameAndTypeIndex() {
+ return nameAndTypeIndex;
+ }
+
+
+ /**
+ * Returns a string representation of this object. Useful for debugging.
+ *
+ * @return A string representation of this object.
+ */
+ @Override
+ public String toString() {
+ return "[ConstantInvokeDynamicInfo: " +
+ "bootstrapMethodAttrIndex=" + getBootstrapMethodAttrIndex() +
+ "; nameAndTypeIndex=" + getNameAndTypeIndex() +
+ "]";
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantMethodHandleInfo.java b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantMethodHandleInfo.java
new file mode 100644
index 0000000..b4b7234
--- /dev/null
+++ b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantMethodHandleInfo.java
@@ -0,0 +1,62 @@
+/*
+ * 03/21/2010
+ *
+ * Copyright (C) 2010 Robert Futrell
+ * robert_futrell at users.sourceforge.net
+ * http://fifesoft.com/rsyntaxtextarea
+ *
+ * This library is distributed under a modified BSD license. See the included
+ * RSTALanguageSupport.License.txt file for details.
+ */
+package org.fife.rsta.ac.java.classreader.constantpool;
+
+/**
+ * Class representing a CONSTANT_MethodHandle
structure.
+ *
+ * @author Robert Futrell
+ * @version 1.0
+ */
+public class ConstantMethodHandleInfo extends ConstantPoolInfo {
+
+ private int referenceKind;
+
+ private int referenceIndex;
+
+
+ /**
+ * Constructor.
+ *
+ * @param referenceKind
+ * @param referenceIndex
+ */
+ public ConstantMethodHandleInfo(int referenceKind, int referenceIndex) {
+ super(CONSTANT_MethodHandle);
+ this.referenceKind = referenceKind;
+ this.referenceIndex = referenceIndex;
+ }
+
+
+ public int getReferenceKind() {
+ return referenceKind;
+ }
+
+ public int getReferenceIndex() {
+ return referenceIndex;
+ }
+
+
+ /**
+ * Returns a string representation of this object. Useful for debugging.
+ *
+ * @return A string representation of this object.
+ */
+ @Override
+ public String toString() {
+ return "[ConstantMethodHandleInfo: " +
+ "referenceKind=" + getReferenceKind() +
+ "; referenceIndex=" + getReferenceIndex() +
+ "]";
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantMethodTypeInfo.java b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantMethodTypeInfo.java
new file mode 100644
index 0000000..8e4d3b5
--- /dev/null
+++ b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantMethodTypeInfo.java
@@ -0,0 +1,52 @@
+/*
+ * 03/21/2010
+ *
+ * Copyright (C) 2010 Robert Futrell
+ * robert_futrell at users.sourceforge.net
+ * http://fifesoft.com/rsyntaxtextarea
+ *
+ * This library is distributed under a modified BSD license. See the included
+ * RSTALanguageSupport.License.txt file for details.
+ */
+package org.fife.rsta.ac.java.classreader.constantpool;
+
+/**
+ * Class representing a CONSTANT_MethodType
structure.
+ *
+ * @author Robert Futrell
+ * @version 1.0
+ */
+public class ConstantMethodTypeInfo extends ConstantPoolInfo {
+
+ private int descriptorIndex;
+
+ /**
+ * Constructor.
+ *
+ * @param descriptorIndex
+ */
+ public ConstantMethodTypeInfo(int descriptorIndex) {
+ super(CONSTANT_MethodType);
+ this.descriptorIndex = descriptorIndex;
+ }
+
+
+ public int getDescriptorIndex() {
+ return descriptorIndex;
+ }
+
+
+ /**
+ * Returns a string representation of this object. Useful for debugging.
+ *
+ * @return A string representation of this object.
+ */
+ @Override
+ public String toString() {
+ return "[ConstantMethodTypeInfo: " +
+ "bootstrapMethodAttrIndex=" + getDescriptorIndex() +
+ "]";
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantPoolInfoFactory.java b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantPoolInfoFactory.java
index 6a91215..8fc49c2 100644
--- a/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantPoolInfoFactory.java
+++ b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantPoolInfoFactory.java
@@ -97,6 +97,23 @@ public static ConstantPoolInfo readConstantPoolInfo(ClassFile cf,
cpi = new ConstantUtf8Info(byteArray);
break;
+ case CONSTANT_MethodHandle:
+ int referenceKind = in.read();
+ int referenceIndex = in.readUnsignedShort();
+ cpi = new ConstantMethodHandleInfo(referenceKind, referenceIndex);
+ break;
+
+ case CONSTANT_MethodType:
+ descriptorIndex = in.readUnsignedShort();
+ cpi = new ConstantMethodTypeInfo(descriptorIndex);
+ break;
+
+ case CONSTANT_InvokeDynamic:
+ int bootstrapMethodAttrIndex = in.readUnsignedShort();
+ nameAndTypeIndex = in.readUnsignedShort();
+ cpi = new ConstantInvokeDynamicInfo(bootstrapMethodAttrIndex, nameAndTypeIndex);
+ break;
+
default:
throw new IOException("Unknown tag for constant pool info: " + tag);
@@ -107,4 +124,4 @@ public static ConstantPoolInfo readConstantPoolInfo(ClassFile cf,
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantTypes.java b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantTypes.java
index 74dd038..5b4c9c9 100644
--- a/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantTypes.java
+++ b/src/main/java/org/fife/rsta/ac/java/classreader/constantpool/ConstantTypes.java
@@ -41,4 +41,10 @@ interface ConstantTypes {
public static final int CONSTANT_Utf8 = 1;
-}
\ No newline at end of file
+ public static final int CONSTANT_MethodHandle = 15;
+
+ public static final int CONSTANT_MethodType = 16;
+
+ public static final int CONSTANT_InvokeDynamic = 18;
+
+}