Bug 123684 - Creating a compilation unit fails if java file exists with a different case
Summary: Creating a compilation unit fails if java file exists with a different case
Status: VERIFIED WORKSFORME
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1.1   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.6 M5   Edit
Assignee: Olivier Thomann CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-01-12 17:17 EST by Jess Garms CLA
Modified: 2010-01-25 05:57 EST (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jess Garms CLA 2006-01-12 17:17:24 EST
Using Windows, which is has a case-insensitive file system.

In APT, we create compilation units when certain annotations are encountered. We ran into an error in the following case:

At one point, we generated a type, "test.HelloBean". Later, we attempt to generate "test.helloBean", which is the same but a different case. JDT is then unable to create the compilation unit, as it doesn't seem to handle the case where the IFile doesn't exist, but a matching file with different case does. Here's the stack trace:

Java Model Exception: Core Exception [code 275] A resource exists with a different case: /Util/build/apt/.src/test/HelloBean.java.
	at org.eclipse.jdt.internal.core.JavaModelOperation.createFile(JavaModelOperation.java:261)
	at org.eclipse.jdt.internal.core.CreateCompilationUnitOperation.executeOperation(CreateCompilationUnitOperation.java:120)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:718)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1719)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:782)
	at org.eclipse.jdt.internal.core.PackageFragment.createCompilationUnit(PackageFragment.java:135)
	at org.eclipse.jdt.apt.core.internal.generatedfile.GeneratedFileManager.generateFileDuringBuild(GeneratedFileManager.java:269)
	at org.eclipse.jdt.apt.core.internal.env.JavaSourceFilePrintWriter.close(JavaSourceFilePrintWriter.java:57)
	at org.apache.beehive.controls.runtime.generator.IndentingWriter.close(IndentingWriter.java:94)
	at org.apache.beehive.controls.runtime.generator.VelocityGenerator.generate(VelocityGenerator.java:85)
	at org.apache.beehive.controls.runtime.generator.apt.ControlAnnotationProcessor.check(ControlAnnotationProcessor.java:91)
	at org.apache.beehive.controls.runtime.generator.apt.TwoPhaseAnnotationProcessor.check(TwoPhaseAnnotationProcessor.java:104)
	at org.apache.beehive.controls.runtime.generator.apt.TwoPhaseAnnotationProcessor.process(TwoPhaseAnnotationProcessor.java:86)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.runAPTInFileBasedMode(APTDispatchRunnable.java:311)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.runAPT(APTDispatchRunnable.java:558)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.runAPT(APTDispatchRunnable.java:470)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.run(APTDispatchRunnable.java:210)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1719)
	at org.eclipse.jdt.apt.core.internal.APTDispatch.runAPT(APTDispatch.java:90)
	at org.eclipse.jdt.apt.core.internal.APTDispatch.runAPTDuringBuild(APTDispatch.java:47)
	at org.eclipse.jdt.apt.core.internal.AptCompilationParticipant.preBuildNotify(AptCompilationParticipant.java:130)
	at org.eclipse.jdt.apt.core.internal.AptCompilationParticipant.notify(AptCompilationParticipant.java:88)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.notifyCompilationParticipants(AbstractImageBuilder.java:271)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:459)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:206)
	at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:114)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:238)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:166)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:593)
	at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
	at org.eclipse.core.runtime.Platform.run(Platform.java:783)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:168)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:202)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:231)
	at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
	at org.eclipse.core.runtime.Platform.run(Platform.java:783)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:234)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:253)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:282)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:139)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:200)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)
Caused by: org.eclipse.core.internal.resources.ResourceException: A resource exists with a different case: /Util/build/apt/.src/test/HelloBean.java.
	at org.eclipse.core.internal.resources.Resource.checkDoesNotExist(Resource.java:274)
	at org.eclipse.core.internal.resources.File.create(File.java:108)
	at org.eclipse.jdt.internal.core.JavaModelOperation.createFile(JavaModelOperation.java:255)
	at org.eclipse.jdt.internal.core.CreateCompilationUnitOperation.executeOperation(CreateCompilationUnitOperation.java:120)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:718)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1719)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:782)
	at org.eclipse.jdt.internal.core.PackageFragment.createCompilationUnit(PackageFragment.java:135)
	at org.eclipse.jdt.apt.core.internal.generatedfile.GeneratedFileManager.generateFileDuringBuild(GeneratedFileManager.java:269)
	at org.eclipse.jdt.apt.core.internal.env.JavaSourceFilePrintWriter.close(JavaSourceFilePrintWriter.java:57)
	at org.apache.beehive.controls.runtime.generator.IndentingWriter.close(IndentingWriter.java:94)
	at org.apache.beehive.controls.runtime.generator.VelocityGenerator.generate(VelocityGenerator.java:85)
	at org.apache.beehive.controls.runtime.generator.apt.ControlAnnotationProcessor.check(ControlAnnotationProcessor.java:91)
	at org.apache.beehive.controls.runtime.generator.apt.TwoPhaseAnnotationProcessor.check(TwoPhaseAnnotationProcessor.java:104)
	at org.apache.beehive.controls.runtime.generator.apt.TwoPhaseAnnotationProcessor.process(TwoPhaseAnnotationProcessor.java:86)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.runAPTInFileBasedMode(APTDispatchRunnable.java:311)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.runAPT(APTDispatchRunnable.java:558)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.runAPT(APTDispatchRunnable.java:470)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.run(APTDispatchRunnable.java:210)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1719)
	at org.eclipse.jdt.apt.core.internal.APTDispatch.runAPT(APTDispatch.java:90)
	at org.eclipse.jdt.apt.core.internal.APTDispatch.runAPTDuringBuild(APTDispatch.java:47)
	at org.eclipse.jdt.apt.core.internal.AptCompilationParticipant.preBuildNotify(AptCompilationParticipant.java:130)
	at org.eclipse.jdt.apt.core.internal.AptCompilationParticipant.notify(AptCompilationParticipant.java:88)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.notifyCompilationParticipants(AbstractImageBuilder.java:271)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:459)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:206)
	at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:114)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:238)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:166)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:593)
	at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
	at org.eclipse.core.runtime.Platform.run(Platform.java:783)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:168)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:202)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:231)
	at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
	at org.eclipse.core.runtime.Platform.run(Platform.java:783)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:234)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:253)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:282)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:139)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:200)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)

One possible fix would be to look at the underlying file system via java.io.File, but that seems like a bit of a hack. Any ideas here? Thanks!
Comment 1 Olivier Thomann CLA 2009-12-09 11:44:27 EST
This seems to be handled in HEAD. APT now logs an error about the fact that the second unit could not be created.
Comment 2 Srikanth Sankaran CLA 2010-01-25 05:57:15 EST
Verified for 3.6M5 (by code inspection)