Browse Source

Parse the CONSTANT_Package_info constant pool entry from class files

master
Jaikiran Pai 7 years ago
parent
commit
333f5baaa1
4 changed files with 44 additions and 0 deletions
  1. +1
    -0
      src/etc/testcases/taskdefs/optional/depend/src6/module-info.java
  2. +2
    -0
      src/etc/testcases/taskdefs/optional/depend/src6/org.dummy/Foo.java
  3. +7
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java
  4. +34
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/PackageCPInfo.java

+ 1
- 0
src/etc/testcases/taskdefs/optional/depend/src6/module-info.java View File

@@ -1,3 +1,4 @@
module dummy {
requires java.base;
exports org.dummy;
}

src/etc/testcases/taskdefs/optional/depend/src6/Foo.java → src/etc/testcases/taskdefs/optional/depend/src6/org.dummy/Foo.java View File

@@ -15,6 +15,8 @@ See the License for the specific language governing permissions and
limitations under the License.
*/

package org.dummy;

public class Foo {
public static void main(final String[] args) {
System.out.println("foo");

+ 7
- 0
src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java View File

@@ -74,6 +74,10 @@ public abstract class ConstantPoolEntry {
/** Tag value for CONSTANT_Module_info entry */
public static final int CONSTANT_MODULEINFO = 19;

/** Tag value for CONSTANT_Package_info entry (within a module) */
public static final int CONSTANT_PACKAGEINFO = 20;


/**
* This entry's tag which identifies the type of this constant pool
* entry.
@@ -168,6 +172,9 @@ public abstract class ConstantPoolEntry {
case CONSTANT_MODULEINFO:
cpInfo = new ModuleCPInfo();
break;
case CONSTANT_PACKAGEINFO:
cpInfo = new PackageCPInfo();
break;
default:
throw new ClassFormatError("Invalid Constant Pool entry Type "
+ cpTag);


+ 34
- 0
src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/PackageCPInfo.java View File

@@ -0,0 +1,34 @@
package org.apache.tools.ant.taskdefs.optional.depend.constantpool;

import java.io.DataInputStream;
import java.io.IOException;

/**
* Represents the package info (within a module) constant pool entry
*/
public class PackageCPInfo extends ConstantCPInfo {

private int packageNameIndex;
private String packageName;

public PackageCPInfo() {
super(CONSTANT_PACKAGEINFO, 1);
}

@Override
public void read(final DataInputStream cpStream) throws IOException {
this.packageNameIndex = cpStream.readUnsignedShort();
}

@Override
public void resolve(final ConstantPool constantPool) {
this.packageName = ((Utf8CPInfo) constantPool.getEntry(this.packageNameIndex)).getValue();

super.resolve(constantPool);
}

@Override
public String toString() {
return "Package info Constant Pool Entry for " + this.packageName + "[" + this.packageNameIndex + "]";
}
}

Loading…
Cancel
Save