Ticket #231 (closed defect: fixed)

Opened 3 years ago

Last modified 3 years ago

callin marker creator uses wrong scheduling rule

Reported by: stephan Owned by: stephan
Priority: minor Milestone: OTDT_1.2.8
Component: ui Version: 1.2.7
Keywords: Cc:

Description

The callin marker creater causes errors like the following (dialog and log file):

eclipse.buildId=M20090211.OTDT_1.2.8'
java.version=1.6.0_0
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US
Command-line arguments:  -os linux -ws gtk -arch x86 -data /home/stephan/workspaces/otdt-1.2-dev


Error
Fri Mar 27 06:12:29 CET 2009
Exception during marker creation.

java.lang.IllegalArgumentException: Attempted to beginRule: P/Trac18a, does not match outer scope rule: org.objectteams.otdt.internal.ui.callinmarkers.SchedulingRule@2f5aa3
at org.eclipse.core.runtime.Assert.isLegal(Assert.java:64)
at org.eclipse.core.internal.jobs.ThreadJob.illegalPush(ThreadJob.java:122)
at org.eclipse.core.internal.jobs.ThreadJob.push(ThreadJob.java:232)
at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:80)
at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:230)
at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:117)
at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1747)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1795)
at org.eclipse.jdt.internal.core.ProjectReferenceChange.updateProjectReferencesIfNecessary(ProjectReferenceChange.java:107)
at org.eclipse.jdt.internal.core.ChangeClasspathOperation.classpathChanged(ChangeClasspathOperation.java:59)
at org.eclipse.jdt.internal.core.SetContainerOperation.executeOperation(SetContainerOperation.java:110)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:716)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:782)
at org.eclipse.jdt.core.JavaCore._OT$setClasspathContainer$orig(JavaCore.java:4643)
at org.eclipse.jdt.core.JavaCore._OT$setClasspathContainer$chain(JavaCore.java)
at org.eclipse.jdt.core.JavaCore._OT$setClasspathContainer$chain(JavaCore.java)
at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java)
at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:32)
at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2491)
at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1710)
at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:2580)
at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2615)
at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1876)
at org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.enclosingProjectsAndJars(JavaWorkspaceScope.java:84)
at org.eclipse.jdt.internal.core.search.IndexSelector.initializeIndexLocations(IndexSelector.java:122)
at org.eclipse.jdt.internal.core.search.IndexSelector.getIndexLocations(IndexSelector.java:212)
at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.selectIndexes(JavaSearchParticipant.java:107)
at org.eclipse.jdt.internal.core.search.PatternSearchJob.getIndexes(PatternSearchJob.java:79)
at org.eclipse.jdt.internal.core.search.SubTypeSearchJob.getIndexes(SubTypeSearchJob.java:33)
at org.eclipse.jdt.internal.core.search.PatternSearchJob.ensureReadyToRun(PatternSearchJob.java:50)
at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:174)
at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.searchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:523)
at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.determinePossibleSubTypes(IndexBasedHierarchyBuilder.java:406)
at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:120)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:300)
at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1241)
at org.objectteams.otdt.internal.ui.callinmarkers.AbstractMarkable.getSubTypes(AbstractMarkable.java:161)
at org.objectteams.otdt.internal.ui.callinmarkers.ResourceMarkable.getAllTypes(ResourceMarkable.java:65)
at org.objectteams.otdt.internal.ui.callinmarkers.CallinMarkerCreator2.updateCallinMarkers(CallinMarkerCreator2.java:269)
at org.objectteams.otdt.internal.ui.callinmarkers.CallinMarkerCreator2.access$1(CallinMarkerCreator2.java:253)
at org.objectteams.otdt.internal.ui.callinmarkers.CallinMarkerCreator2$3.updateMarkers(CallinMarkerCreator2.java:235)
at org.objectteams.otdt.internal.ui.callinmarkers.CallinMarkerJob.run(CallinMarkerJob.java:55)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

While this doesn't seem to severly break anything usage of scheduling rules should certainly be revised.

Change History

Changed 3 years ago by stephan

r19774 is built on the understanding I gained by attending John Arthornes tutorial at EclipseCon'09:

  • reading requires no scheduling rule what so ever
  • our only writing operation is creating markers so we use a scheduling rule for that
  • by default scheduling rules for markers are null
  • because different rule factories could potentially define non-null scheduling rules for markers, we play safe and indeed use the factory.

If this works well in practice, class org.objectteams.otdt.internal.ui.callinmarkers.SchedulingRule should be removed.

Changed 3 years ago by stephan

  • status changed from new to closed
  • resolution set to fixed

r19811 removes obsolete class SchedulingRole as mentioned above.

Real live experience shows that this solution is viable.

Note: See TracTickets for help on using tickets.