eclipse-xtext / eclipse-xtext/xtext
java.lang.IllegalArgumentException: argument is not valid in current context
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 831
- Forks
- 330
- Avg merge
- 3d 7h
- Merged PRs (30d)
- 12
Description
I am getting an exception for some xtend code for a Jenkins plugin that should be valid. It may be getting confused on the complicated generics definition. See code below.
If I explicitly define the type of the "run" variable it works:
val run = mock(Run)
to
val Run<?, ?> run = mock(Run)
hudson.model.Run definition (2.7.1):
@ExportedBean
public abstract class Run <JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>
extends Actionable implements ExtensionPoint, Comparable<RunT>, AccessControlled, PersistenceRoot, DescriptorByNameOwner, OnMaster {
Gradle plugin: org.xtext:xtext-gradle-plugin:1.0.19
Xtend version: 'org.eclipse.xtend:org.eclipse.xtend.lib:2.12.0'
Also reported here: https://bugs.eclipse.org/bugs/show_bug.cgi?id=528739
Stacktrace:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':generateTestXtext'.
...
Caused by: java.lang.IllegalArgumentException: argument is not valid in current context
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.addTypeArgument(ParameterizedTypeReference.java:781)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.enhanceParameterizedTypeReference(TypeParameterSubstitutor.java:142)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:134)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:116)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:36)
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:840)
at org.eclipse.xtext.xbase.typesystem.util.UnboundTypeParameterPreservingSubstitutor.getBoundTypeArgument(UnboundTypeParameterPreservingSubstitutor.java:53)
at org.eclipse.xtext.xbase.typesystem.util.UnboundTypeParameterPreservingSubstitutor.getBoundTypeArgument(UnboundTypeParameterPreservingSubstitutor.java:27)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:112)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:36)
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:840)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:103)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:96)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.enhanceParameterizedTypeReference(TypeParameterSubstitutor.java:142)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:134)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:116)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:36)
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:840)
at org.eclipse.xtext.xbase.typesystem.util.UnboundTypeParameterPreservingSubstitutor.getBoundTypeArgument(UnboundTypeParameterPreservingSubstitutor.java:53)
at org.eclipse.xtext.xbase.typesystem.util.UnboundTypeParameterPreservingSubstitutor.getBoundTypeArgument(UnboundTypeParameterPreservingSubstitutor.java:27)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:112)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:36)
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:840)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:103)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:96)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.enhanceParameterizedTypeReference(TypeParameterSubstitutor.java:142)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:134)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:116)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:36)
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:840)
at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.substitute(TypeParameterSubstitutor.java:224)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker$ParameterizedTypeReferenceTraverser.doVisitMatchingTypeParameters(AbstractTypeReferencePairWalker.java:251)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker$ParameterizedTypeReferenceTraverser.doVisitParameterizedTypeReference(AbstractTypeReferencePairWalker.java:199)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker$ParameterizedTypeReferenceTraverser.doVisitParameterizedTypeReference(AbstractTypeReferencePairWalker.java:186)
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:828)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker.doVisitParameterizedTypeReference(AbstractTypeReferencePairWalker.java:370)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker.doVisitParameterizedTypeReference(AbstractTypeReferencePairWalker.java:39)
at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:828)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker.outerVisit(AbstractTypeReferencePairWalker.java:429)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker.outerVisit(AbstractTypeReferencePairWalker.java:412)
at org.eclipse.xtext.xbase.typesystem.util.AbstractTypeReferencePairWalker.processPairedReferences(AbstractTypeReferencePairWalker.java:438)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.deferredBindTypeArgument(AbstractLinkingCandidate.java:419)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.applyToComputationState(AbstractLinkingCandidate.java:371)
at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer._computeTypes(XbaseTypeComputer.java:1091)
at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer.computeTypes(XbaseTypeComputer.java:100)
at org.eclipse.xtext.xbase.annotations.typesystem.XbaseWithAnnotationsTypeComputer.computeTypes(XbaseWithAnnotationsTypeComputer.java:46)
at org.eclipse.xtend.core.typesystem.XtendTypeComputer.computeTypes(XtendTypeComputer.java:64)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.doComputeTypes(AbstractTypeComputationState.java:121)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.computeTypes(AbstractTypeComputationState.java:109)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.resolveArgumentType(AbstractLinkingCandidate.java:627)
at org.eclipse.xtext.xbase.typesystem.internal.FeatureLinkingCandidate.resolveArgumentType(FeatureLinkingCandidate.java:963)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.computeFixedArityArgumentType(AbstractLinkingCandidate.java:579)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.computeArgumentType(AbstractLinkingCandidate.java:443)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.computeArgumentTypes(AbstractLinkingCandidate.java:430)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.preApply(AbstractLinkingCandidate.java:378)
at org.eclipse.xtext.xbase.typesystem.internal.FeatureLinkingCandidate.preApply(FeatureLinkingCandidate.java:896)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractLinkingCandidate.applyToComputationState(AbstractLinkingCandidate.java:286)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState$5.applyToComputationState(AbstractTypeComputationState.java:511)
at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer._computeTypes(XbaseTypeComputer.java:1091)
at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer.computeTypes(XbaseTypeComputer.java:100)
at org.eclipse.xtext.xbase.annotations.typesystem.XbaseWithAnnotationsTypeComputer.computeTypes(XbaseWithAnnotationsTypeComputer.java:46)
at org.eclipse.xtend.core.typesystem.XtendTypeComputer.computeTypes(XtendTypeComputer.java:64)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.doComputeTypes(AbstractTypeComputationState.java:121)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.computeTypes(AbstractTypeComputationState.java:109)
at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer._computeTypes(XbaseTypeComputer.java:469)
at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer.computeTypes(XbaseTypeComputer.java:106)
at org.eclipse.xtext.xbase.annotations.typesystem.XbaseWithAnnotationsTypeComputer.computeTypes(XbaseWithAnnotationsTypeComputer.java:46)
at org.eclipse.xtend.core.typesystem.XtendTypeComputer.computeTypes(XtendTypeComputer.java:64)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.doComputeTypes(AbstractTypeComputationState.java:121)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.computeTypes(AbstractTypeComputationState.java:109)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractRootTypeComputationState.computeTypes(AbstractRootTypeComputationState.java:32)
at org.eclipse.xtext.xbase.typesystem.internal.LogicalContainerAwareReentrantTypeResolver._computeTypes(LogicalContainerAwareReentrantTypeResolver.java:827)
at org.eclipse.xtend.core.typesystem.XtendReentrantTypeResolver._computeTypes(XtendReentrantTypeResolver.java:612)
at org.eclipse.xtext.xbase.typesystem.internal.LogicalContainerAwareReentrantTypeResolver.computeTypes(LogicalContainerAwareReentrantTypeResolver.java:711)
at org.eclipse.xtext.xbase.typesystem.internal.LogicalContainerAwareReentrantTypeResolver.computeMemberTypes(LogicalContainerAwareReentrantTypeResolver.java:897)
at org.eclipse.xtext.xbase.typesystem.internal.LogicalContainerAwareReentrantTypeResolver._computeTypes(LogicalContainerAwareReentrantTypeResolver.java:886)
at org.eclipse.xtext.xbase.typesystem.internal.LogicalContainerAwareReentrantTypeResolver.computeTypes(LogicalContainerAwareReentrantTypeResolver.java:705)
at org.eclipse.xtext.xbase.typesystem.internal.LogicalContainerAwareReentrantTypeResolver.computeTypes(LogicalContainerAwareReentrantTypeResolver.java:697)
at org.eclipse.xtend.core.typesystem.XtendReentrantTypeResolver.computeTypes(XtendReentrantTypeResolver.java:382)
at org.eclipse.xtext.xbase.typesystem.internal.DefaultReentrantTypeResolver.resolve(DefaultReentrantTypeResolver.java:163)
at org.eclipse.xtext.xbase.typesystem.internal.DefaultReentrantTypeResolver.reentrantResolve(DefaultReentrantTypeResolver.java:139)
at org.eclipse.xtext.xbase.typesystem.internal.CompoundReentrantTypeResolver.reentrantResolve(CompoundReentrantTypeResolver.java:79)
at org.eclipse.xtext.xbase.typesystem.internal.CachingBatchTypeResolver$LazyResolvedTypes.resolveTypes(CachingBatchTypeResolver.java:80)
at org.eclipse.xtext.xbase.typesystem.internal.CachingBatchTypeResolver$2.process(CachingBatchTypeResolver.java:57)
at org.eclipse.xtext.xbase.typesystem.internal.CachingBatchTypeResolver$2.process(CachingBatchTypeResolver.java:53)
at org.eclipse.xtext.util.concurrent.IUnitOfWork$Void.exec(IUnitOfWork.java:37)
at org.eclipse.xtext.util.OnChangeEvictingCache.execWithoutCacheClear(OnChangeEvictingCache.java:129)
at org.eclipse.xtext.xbase.typesystem.internal.CachingBatchTypeResolver.doResolveTypes(CachingBatchTypeResolver.java:53)
at org.eclipse.xtext.xbase.typesystem.internal.AbstractBatchTypeResolver.resolveTypes(AbstractBatchTypeResolver.java:69)
at org.eclipse.xtext.xbase.resource.BatchLinkingService.resolveBatched(BatchLinkingService.java:71)
at org.eclipse.xtext.xbase.resource.BatchLinkableResource.resolveLazyCrossReferences(BatchLinkableResource.java:165)
at org.eclipse.xtext.EcoreUtil2.resolveLazyCrossReferences(EcoreUtil2.java:498)
at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.lambda$launch$6(IncrementalBuilder.java:236)
at org.eclipse.xtext.build.ClusteringStorageAwareResourceLoader.lambda$executeClustered$1(ClusteringStorageAwareResourceLoader.java:77)
at org.eclipse.xtext.xbase.lib.internal.FunctionDelegate.apply(FunctionDelegate.java:42)
at com.google.common.collect.Lists$TransformingRandomAccessList$1.transform(Lists.java:617)
at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
at com.google.common.collect.Iterables.addAll(Iterables.java:352)
at org.eclipse.xtext.build.ClusteringStorageAwareResourceLoader.executeClustered(ClusteringStorageAwareResourceLoader.java:80)
at org.eclipse.xtext.build.BuildContext.executeClustered(BuildContext.java:55)
at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.launch(IncrementalBuilder.java:251)
at org.eclipse.xtext.build.IncrementalBuilder.build(IncrementalBuilder.java:399)
at org.eclipse.xtext.build.IncrementalBuilder.build(IncrementalBuilder.java:384)
at org.xtext.gradle.builder.XtextGradleBuilder.doBuild(XtextGradleBuilder.java:360)
at org.xtext.gradle.builder.XtextGradleBuilder.build(XtextGradleBuilder.java:206)
at org.xtext.gradle.tasks.XtextGenerate.generate(XtextGenerate.java:149)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:163)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
... 70 more
MyPublisher.xtend
package hudson.plugins.mypublisher
import hudson.Extension
import hudson.FilePath
import hudson.Launcher
import hudson.model.AbstractProject
import hudson.model.Run
import hudson.model.TaskListener
import hudson.tasks.BuildStepDescriptor
import hudson.tasks.BuildStepMonitor
import hudson.tasks.Publisher
import hudson.tasks.Recorder
import java.io.IOException
import javax.annotation.Nonnull
import jenkins.tasks.SimpleBuildStep
import org.eclipse.xtend.lib.annotations.Accessors
import org.kohsuke.stapler.DataBoundConstructor
import org.kohsuke.stapler.DataBoundSetter
class MyPublisher extends Recorder implements SimpleBuildStep {
@Accessors
var String foobar;
@Accessors
var boolean changeBuildStatus
@DataBoundConstructor
new () {
this.foobar = "**/foobar.json"
}
@DataBoundSetter
def void setFoobar(String foobar) {
this.foobar = foobar
}
override perform(@Nonnull Run<?, ?> run, @Nonnull FilePath filePath, @Nonnull Launcher launcher, @Nonnull TaskListener taskListener) throws InterruptedException, IOException {
println("FOOBAR")
}
override getRequiredMonitorService() {
return BuildStepMonitor.NONE
}
override BuildStepDescriptor<Publisher> getDescriptor() {
return super.getDescriptor() as BuildStepDescriptor<Publisher>;
}
public static BuildStepDescriptor<Publisher> DESCRIPTOR;
@Extension
static class DesciptorImpl extends BuildStepDescriptor<Publisher> {
override getDisplayName() {
return '''Foobar''';
}
override isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
}
}
MyPublisherTests.xtend:
package hudson.plugins.mypublisher
import hudson.EnvVars
import hudson.FilePath
import hudson.Launcher
import hudson.model.Run
import hudson.model.TaskListener
import org.junit.Test
import hudson.plugins.mypublisher.MyPublisher
import static org.mockito.Mockito.*
class MyPublisherTests {
@Test
def void testPerform() {
val env = mock(EnvVars)
val run = mock(Run)
val workspace = mock(FilePath)
val launcher = mock(Launcher)
val taskListener = mock(TaskListener)
val publisher = new MyPublisher()
// This line causes the error
publisher.perform(run, workspace, launcher, taskListener)
}
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the stack-trace entry points ParameterizedTypeReference.java and TypeParameterSubstitutor.java, then trace the type computation through AbstractLinkingCandidate. Reproduce the failure with the shown Xtend mock(Run) expression and Jenkins Run generic declaration. Done means valid code no longer throws IllegalArgumentException when the variable type is inferred, while the explicitly typed form continues to work.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100