nhatminhle / cofoja

Contracts for Java
GNU Lesser General Public License v3.0
151 stars 18 forks source link

regression with cofoja-1.1-r146 annotation processor (pre-condition violation of cofoja itself) #38

Closed nhatminhle closed 9 years ago

nhatminhle commented 9 years ago

From eric.faf...@gmail.com on April 29, 2013 00:34:34

What steps will reproduce the problem? 1. Build of our project 2. 3. What is the expected output? What do you see instead? With version cofoja-1.0- r139 we had no problem on java se 1.6 now with cofoja-1.1- r146 on java se 1.7 we have a precondition violation of Cofoja when using the annotation processor

An annotation processor threw an uncaught exception. Consult the following stack trace for details. com.google.java.contract.PreconditionError: !code.isEmpty() at com.google.java.contract.core.apt.AnnotationSourceInfo..

(AnnotationSourceInfo.java:55)
at com.google.java.contract.core.apt.AnnotationSourceInfo.(AnnotationSourceInfo.java:65)
at com.google.java.contract.core.apt.AbstractTypeBuilder.createContractModel(AbstractTypeBuilder.java:174)
at com.google.java.contract.core.apt.AbstractTypeBuilder.visitAnnotation(AbstractTypeBuilder.java:206)
at com.google.java.contract.core.apt.AbstractTypeBuilder.scanAnnotations(AbstractTypeBuilder.java:277)
at com.google.java.contract.core.apt.TypeBuilder$ContractExtensionBuilder.visitType(TypeBuilder.java:99)
at com.google.java.contract.core.apt.TypeBuilder$ContractExtensionBuilder.visitType(TypeBuilder.java:85)
at com.sun.tools.javac.code.Symbol$ClassSymbol.accept(Symbol.java:892)
at com.google.java.contract.core.apt.TypeBuilder.scanSuper(TypeBuilder.java:441)
at com.google.java.contract.core.apt.TypeBuilder$ContractExtensionBuilder.visitType(TypeBuilder.java:103)
at com.google.java.contract.core.apt.TypeBuilder$ContractExtensionBuilder.visitType(TypeBuilder.java:85)
at com.sun.tools.javac.code.Symbol$ClassSymbol.accept(Symbol.java:892)
at com.google.java.contract.core.apt.TypeBuilder.scanSuper(TypeBuilder.java:436)
at com.google.java.contract.core.apt.TypeBuilder$ContractExtensionBuilder.visitType(TypeBuilder.java:103)
at com.google.java.contract.core.apt.TypeBuilder$ContractExtensionBuilder.visitType(TypeBuilder.java:85)
at com.sun.tools.javac.code.Symbol$ClassSymbol.accept(Symbol.java:892)
at com.google.java.contract.core.apt.TypeBuilder.scanSuper(TypeBuilder.java:436)
at com.google.java.contract.core.apt.TypeBuilder.visitType(TypeBuilder.java:272)
at com.google.java.contract.core.apt.TypeBuilder.visitType(TypeBuilder.java:65)
at com.sun.tools.javac.code.Symbol$ClassSymbol.accept(Symbol.java:892)
at com.google.java.contract.core.apt.TypeFactory.createType(TypeFactory.java:76)
at com.google.java.contract.core.apt.AnnotationProcessor.createTypes(AnnotationProcessor.java:327)
at com.google.java.contract.core.apt.AnnotationProcessor.process(AnnotationProcessor.java:166)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1700(JavacProcessingEnvironment.java:97)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1163)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1108)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824)
at com.sun.tools.javac.main.Main.compile(Main.java:439)
at com.sun.tools.javac.main.Main.compile(Main.java:353)
at com.sun.tools.javac.main.Main.compile(Main.java:342)
at com.sun.tools.javac.main.Main.compile(Main.java:333)
at com.sun.tools.javac.Main.compile(Main.java:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:56)
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1153)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:930)
at org.netbeans.modules.java.source.ant.JavacTask.execute(JavacTask.java:144)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor171.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor171.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor171.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:285)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:539)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153) What version of the product are you using? On what operating system? cofoja-1.1- r146 on java se 1.7 on Windows 7 Please provide any additional information below.

Original issue: http://code.google.com/p/cofoja/issues/detail?id=38

nhatminhle commented 9 years ago

From nhat.min...@gmail.com on April 30, 2013 02:48:35

Actually, r139 was wrongly packaged and did not ship with built-in contracts for Cofoja itself. The bug you've run into is one that was caught by the internal contracts of Cofoja, which have been reenabled as of r146 in the distribution downloads. Hence, it's not surprising that you didn't see it before, in r139 ; could you provide a source file where this is reproducible?

nhatminhle commented 9 years ago

From nhat.min...@gmail.com on April 30, 2013 11:19:11

I think I've found the bug; can you try the following fixed JAR? http://www.huoc.org/~minh/cofoja/cofoja-1.1-20130430.jar Alternatively, you can compile the patched versions after applying the three patches in the same folder.

Status: Started
Owner: nhat.min...@gmail.com

nhatminhle commented 9 years ago

From eric.faf...@gmail.com on May 02, 2013 06:12:28

Great! Everything works fine now. I tested with JDK 7 I have now warnings in the build log when contracts spécifications are empty. We can easily track them now. The Cofoja create all the contracts four our 3 projects (about 1500 classes) without any problem. At runtime contracts are checked without problems.

Thanks a lot for this fast and qualityfull fix.

nhatminhle commented 9 years ago

From nhat.min...@gmail.com on May 03, 2013 04:01:49

Fixed in r150 .

Status: Fixed