nhatminhle / cofoja

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

Annotating a method returning void disables contract processing #23

Closed nhatminhle closed 9 years ago

nhatminhle commented 9 years ago

From arnof...@gmail.com on April 15, 2011 08:57:34

What steps will reproduce the problem? 1. Add @Requires or @Ensures annotations to a method returning void What is the expected output? What do you see instead? - no compiler errors for wrong contract annotations

this code doesn't

import com.google.java.contract.Ensures; import com.google.java.contract.Requires;

public class MyClass {

public static void main(String[] args) {
    new Contracts().printName();
}

static class Contracts {

    @Requires("non_sense")
    @Ensures("false")
    void printName() {

    }
}

}

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

nhatminhle commented 9 years ago

From nhat.min...@gmail.com on April 15, 2011 11:17:18

I can't seem to reproduce your bug. I've just tried compiling this code:

elhaym tmp $ javac -cp ~/src/cofoja/trunk/dist/cofoja-1.0-20110415.jar MyClass.java

MyClass.java:13: error in contract: cannot find symbol @Requires("non_sense") ^ symbol: variable non_sense location: class MyClass.Contracts clause: non_sense ^ 1 error

Can you try from the command line?

nhatminhle commented 9 years ago

From arnof...@gmail.com on April 18, 2011 00:39:10

Works fine on the command line.

Maybe the following Eclipse log is more helpful:

!ENTRY org.eclipse.jdt.apt.pluggable.core 4 1 2011-04-18 09:31:52.004 !MESSAGE Exception thrown by Java annotation processor com.google.java.contract.core.apt.AnnotationProcessor@12d2f30 !STACK 0 java.lang.ClassCastException: org.eclipse.jdt.internal.compiler.apt.model.NoTypeImpl cannot be cast to org.eclipse.jdt.internal.compiler.apt.model.TypeMirrorImpl at org.eclipse.jdt.internal.compiler.apt.model.TypesImpl.erasure(TypesImpl.java:198) at com.google.java.contract.core.apt.AbstractTypeBuilder.createContractModel(Unknown Source) at com.google.java.contract.core.apt.TypeBuilder.visitAnnotation(Unknown Source) at com.google.java.contract.core.apt.AbstractTypeBuilder.scanAnnotations(Unknown Source) at com.google.java.contract.core.apt.TypeBuilder.visitExecutable(Unknown Source) at com.google.java.contract.core.apt.TypeBuilder.visitExecutable(Unknown Source) at org.eclipse.jdt.internal.compiler.apt.model.ExecutableElementImpl.accept(ExecutableElementImpl.java:59) at javax.lang.model.util.ElementScanner6.scan(ElementScanner6.java:122) at javax.lang.model.util.ElementScanner6.scan(ElementScanner6.java:112) at com.google.java.contract.core.apt.TypeBuilder.visitType(Unknown Source) at com.google.java.contract.core.apt.TypeBuilder.visitType(Unknown Source) at org.eclipse.jdt.internal.compiler.apt.model.TypeElementImpl.accept(TypeElementImpl.java:61) at com.google.java.contract.core.apt.TypeFactory.createType(Unknown Source) at com.google.java.contract.core.apt.AnnotationProcessor.createTypes(Unknown Source) at com.google.java.contract.core.apt.AnnotationProcessor.process(Unknown Source) at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:139) at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:121) at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159) at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:134) at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:809) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:428) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:364) at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:321) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:301) at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:134) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

nhatminhle commented 9 years ago

From nhat.min...@gmail.com on April 18, 2011 02:17:43

Oh, I see, this is another case of issue 15 , which I thought we got fixed a while ago. Could you try the attached patch?

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

Attachment: 0001-Fix-contract-model-creation-for-methods-returning-no.patch

nhatminhle commented 9 years ago

From arnof...@gmail.com on April 18, 2011 04:21:52

The patch fixes the problem, thanks!

nhatminhle commented 9 years ago

From nhat.min...@gmail.com on April 18, 2011 04:52:50

Leo, could you review this small patch? Thanks!

Status: Started
Cc: chat...@google.com

nhatminhle commented 9 years ago

From chat...@google.com on April 18, 2011 05:18:22

LGTM

nhatminhle commented 9 years ago

From nhat.min...@gmail.com on April 18, 2011 06:47:06

Fixed in r112 .

Status: Fixed