forax / pro

A Java build tool that works seamlessly with modules
GNU General Public License v3.0
103 stars 15 forks source link

NPE in new modulefixer #13

Closed sormuras closed 7 years ago

sormuras commented 7 years ago

Follow-up from #10 and regarding https://github.com/forax/pro/commit/dd75d9a3febd58831e89eac26e21120c059e2911

java.lang.NullPointerException
        at org.objectweb.asm.all.debug@6.0_ALPHA2/org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:756)
        at com.github.forax.pro.plugin.modulefixer/com.github.forax.pro.plugin.modulefixer.ModuleFixerPlugin$2$1.visitEnd(ModuleFixerPlugin.java:295)
        at org.objectweb.asm.all.debug@6.0_ALPHA2/org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1163)
        at org.objectweb.asm.all.debug@6.0_ALPHA2/org.objectweb.asm.ClassReader.accept(ClassReader.java:712)
        at org.objectweb.asm.all.debug@6.0_ALPHA2/org.objectweb.asm.ClassReader.accept(ClassReader.java:507)
        at com.github.forax.pro.plugin.modulefixer/com.github.forax.pro.plugin.modulefixer.ModuleFixerPlugin.lambda$findRequiresAndExportsAndUses$23(ModuleFixerPlugin.java:252)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1492)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:430)
        at com.github.forax.pro.plugin.modulefixer/com.github.forax.pro.plugin.modulefixer.ModuleFixerPlugin.findRequiresAndExportsAndUses(ModuleFixerPlugin.java:243)
        at com.github.forax.pro.plugin.modulefixer/com.github.forax.pro.plugin.modulefixer.ModuleFixerPlugin.execute(ModuleFixerPlugin.java:138)
        at com.github.forax.pro/com.github.forax.pro.Pro.execute(Pro.java:267)
        at com.github.forax.pro/com.github.forax.pro.Pro.runAll(Pro.java:247)
        at com.github.forax.pro/com.github.forax.pro.Pro.run(Pro.java:237)
        at com.github.forax.pro.bootstrap/com.github.forax.pro.bootstrap.Bootstrap.main(Bootstrap.java:81)
[modulefixer] null

Drop M4.jar as junit.platform.console.standalone-1.0.0_M4.jar into deps/ and invoke ./build[.bat|.sh].

sormuras commented 7 years ago

Now it reads:

[modulefixer] fix junit.platform.console.standalone
java.lang.module.InvalidModuleDescriptorException: CONSTANT_Class at entry 188 has illegal character: '.'
        at java.base/jdk.internal.module.ModuleInfo.invalidModuleDescriptor(ModuleInfo.java:1069)
        at java.base/jdk.internal.module.ModuleInfo.access$000(ModuleInfo.java:64)
        at java.base/jdk.internal.module.ModuleInfo$ConstantPool.checkUnqualifiedName(ModuleInfo.java:843)
        at java.base/jdk.internal.module.ModuleInfo$ConstantPool.getClassName(ModuleInfo.java:792)
        at java.base/jdk.internal.module.ModuleInfo.readModuleAttribute(ModuleInfo.java:474)
        at java.base/jdk.internal.module.ModuleInfo.doRead(ModuleInfo.java:242)
        at java.base/jdk.internal.module.ModuleInfo.read(ModuleInfo.java:139)
        at java.base/java.lang.module.ModuleDescriptor.read(ModuleDescriptor.java:2625)
        at jdk.jartool/sun.tools.jar.Main.addExtendedModuleAttributes(Main.java:1915)
        at jdk.jartool/sun.tools.jar.Main.update(Main.java:993)
        at jdk.jartool/sun.tools.jar.Main.run(Main.java:354)
        at jdk.jartool/sun.tools.jar.JarToolProvider.run(JarToolProvider.java:37)
        at java.base/java.util.spi.ToolProvider.run(ToolProvider.java:137)
        at com.github.forax.pro.plugin.modulefixer/com.github.forax.pro.plugin.modulefixer.ModuleFixerPlugin.patchModularJar(ModuleFixerPlugin.java:211)
        at com.github.forax.pro.plugin.modulefixer/com.github.forax.pro.plugin.modulefixer.ModuleFixerPlugin.execute(ModuleFixerPlugin.java:203)
        at com.github.forax.pro/com.github.forax.pro.Pro.execute(Pro.java:267)
        at com.github.forax.pro/com.github.forax.pro.Pro.runAll(Pro.java:247)
        at com.github.forax.pro/com.github.forax.pro.Pro.run(Pro.java:237)
        at com.github.forax.pro.bootstrap/com.github.forax.pro.bootstrap.Bootstrap.main(Bootstrap.java:81)
forax commented 7 years ago

ok, i re-open the issue

sormuras commented 7 years ago

That worked out. See the generated module-info.class:

  // IntelliJ API Decompiler stub source generated from a class file
open module junit.platform.console.standalone {
  requires java.xml;
  requires java.base;
  requires java.logging;
  requires java.sql;

  exports org.junit.experimental.categories;
  exports org.junit.platform.console.options;
  exports org.junit.platform.engine.support.hierarchical;
  exports org.junit.platform.console;
  exports org.junit.jupiter.params.converter;
  exports org.junit;
  exports org.junit.platform.launcher.core;
  exports org.junit.jupiter.engine.extension;
  exports org.junit.jupiter.params.com.univocity.parsers.common.fields;
  exports org.junit.vintage.engine.descriptor;
  exports org.junit.internal.matchers;
  exports org.junit.jupiter.params.com.univocity.parsers.annotations;
  exports org.junit.jupiter.params.com.univocity.parsers.annotations.helpers;
  exports org.junit.runner.notification;
  exports org.opentest4j;
  exports org.junit.platform.joptsimple.util;
  exports org.junit.platform.launcher.listeners;
  exports junit.runner;
  exports org.junit.platform.commons.util;
  exports org.junit.experimental.theories.suppliers;
  exports org.junit.platform.joptsimple;
  exports org.junit.experimental.theories;
  exports org.junit.jupiter.api.function;
  exports org.junit.jupiter.api.extension;
  exports org.junit.vintage.engine.execution;
  exports org.junit.jupiter.params.com.univocity.parsers.conversions;
  exports org.junit.internal.builders;
  exports org.junit.vintage.engine;
  exports org.junit.jupiter.params.com.univocity.parsers.tsv;
  exports org.junit.platform.commons.annotation;
  exports org.junit.experimental.runners;
  exports org.junit.platform.joptsimple.internal;
  exports org.junit.jupiter.params;
  exports org.junit.platform.engine.discovery;
  exports org.junit.jupiter.params.support;
  exports org.junit.internal.runners.rules;
  exports org.junit.platform.commons.meta;
  exports org.junit.jupiter.params.com.univocity.parsers.common;
  exports org.junit.runner.manipulation;
  exports org.hamcrest.core;
  exports org.junit.platform.commons.support;
  exports org.junit.platform.engine;
  exports org.junit.platform.commons;
  exports org.junit.experimental.max;
  exports org.junit.experimental.results;
  exports org.junit.platform.engine.support.descriptor;
  exports org.junit.runners;
  exports org.junit.rules;
  exports org.junit.experimental.theories.internal;
  exports org.junit.jupiter.params.com.univocity.parsers.common.input.concurrent;
  exports org.junit.jupiter.params.com.univocity.parsers.fixed;
  exports org.junit.jupiter.params.com.univocity.parsers.csv;
  exports org.junit.jupiter.engine;
  exports junit.framework;
  exports org.junit.matchers;
  exports org.junit.jupiter.params.com.univocity.parsers.common.routine;
  exports org.junit.jupiter.params.com.univocity.parsers.common.beans;
  exports org.junit.jupiter.params.provider;
  exports org.junit.internal.runners.statements;
  exports org.junit.runner;
  exports org.junit.jupiter.params.com.univocity.parsers.common.processor.core;
  exports org.junit.platform.launcher;
  exports org.junit.jupiter.params.com.univocity.parsers.common.record;
  exports org.junit.jupiter.params.com.univocity.parsers.common.input;
  exports org.junit.internal.runners.model;
  exports org.junit.internal.runners;
  exports org.hamcrest.internal;
  exports org.junit.jupiter.api;
  exports org.junit.jupiter.engine.discovery;
  exports org.junit.runners.model;
  exports junit.textui;
  exports org.junit.vintage.engine.discovery;
  exports org.junit.platform.engine.reporting;
  exports org.junit.platform.engine.support.filter;
  exports org.junit.platform.console.tasks;
  exports junit.extensions;
  exports org.junit.jupiter.engine.discovery.predicates;
  exports org.junit.experimental;
  exports org.hamcrest;
  exports org.junit.validator;
  exports org.junit.jupiter.params.com.univocity.parsers.common.processor;
  exports org.junit.internal.requests;
  exports org.junit.jupiter.engine.descriptor;
  exports org.junit.jupiter.engine.execution;
  exports org.junit.runners.parameterized;
  exports org.junit.internal;

  uses org.junit.platform.engine.TestEngine;
  uses org.junit.jupiter.api.extension.Extension;
  uses org.junit.platform.launcher.TestExecutionListener;
}