Browse Source
Update `PropertyDescriptor.isParentTheSame` to consider the candidate as well as all super classes. Fixes gh-21626pull/31676/head
9 changed files with 304 additions and 10 deletions
@ -0,0 +1,61 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-2022 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.configurationprocessor; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import org.springframework.boot.configurationprocessor.metadata.ConfigurationMetadata; |
||||||
|
import org.springframework.boot.configurationprocessor.metadata.Metadata; |
||||||
|
import org.springframework.boot.configurationsample.inheritance.ChildProperties; |
||||||
|
import org.springframework.boot.configurationsample.inheritance.ChildPropertiesConfig; |
||||||
|
import org.springframework.boot.configurationsample.inheritance.OverrideChildProperties; |
||||||
|
import org.springframework.boot.configurationsample.inheritance.OverrideChildPropertiesConfig; |
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||||
|
|
||||||
|
class InheritanceMetadataGenerationTests extends AbstractMetadataGenerationTests { |
||||||
|
|
||||||
|
@Test |
||||||
|
void childProperties() throws Exception { |
||||||
|
ConfigurationMetadata metadata = compile(ChildPropertiesConfig.class); |
||||||
|
assertThat(metadata).has(Metadata.withGroup("inheritance").fromSource(ChildPropertiesConfig.class)); |
||||||
|
assertThat(metadata).has(Metadata.withGroup("inheritance.nest").fromSource(ChildProperties.class)); |
||||||
|
assertThat(metadata).has(Metadata.withGroup("inheritance.child-nest").fromSource(ChildProperties.class)); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.bool-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.int-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.long-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.bool-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.int-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.child-nest.bool-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.child-nest.int-value")); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
void overrideChildProperties() throws Exception { |
||||||
|
ConfigurationMetadata metadata = compile(OverrideChildPropertiesConfig.class); |
||||||
|
assertThat(metadata).has(Metadata.withGroup("inheritance").fromSource(OverrideChildPropertiesConfig.class)); |
||||||
|
assertThat(metadata).has(Metadata.withGroup("inheritance.nest").fromSource(OverrideChildProperties.class)); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.bool-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.int-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.long-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.bool-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.int-value")); |
||||||
|
assertThat(metadata).has(Metadata.withProperty("inheritance.nest.long-value")); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,71 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-2022 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.configurationsample.inheritance; |
||||||
|
|
||||||
|
public class BaseProperties { |
||||||
|
|
||||||
|
private boolean boolValue; |
||||||
|
|
||||||
|
private int intValue; |
||||||
|
|
||||||
|
private final Nest nest = new Nest(); |
||||||
|
|
||||||
|
public boolean isBoolValue() { |
||||||
|
return this.boolValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBoolValue(boolean boolValue) { |
||||||
|
this.boolValue = boolValue; |
||||||
|
} |
||||||
|
|
||||||
|
public int getIntValue() { |
||||||
|
return this.intValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIntValue(int intValue) { |
||||||
|
this.intValue = intValue; |
||||||
|
} |
||||||
|
|
||||||
|
public Nest getNest() { |
||||||
|
return this.nest; |
||||||
|
} |
||||||
|
|
||||||
|
public static class Nest { |
||||||
|
|
||||||
|
private boolean boolValue; |
||||||
|
|
||||||
|
private int intValue; |
||||||
|
|
||||||
|
public boolean isBoolValue() { |
||||||
|
return this.boolValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBoolValue(boolean boolValue) { |
||||||
|
this.boolValue = boolValue; |
||||||
|
} |
||||||
|
|
||||||
|
public int getIntValue() { |
||||||
|
return this.intValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIntValue(int intValue) { |
||||||
|
this.intValue = intValue; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,61 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-2022 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.configurationsample.inheritance; |
||||||
|
|
||||||
|
public class ChildProperties extends BaseProperties { |
||||||
|
|
||||||
|
private long longValue; |
||||||
|
|
||||||
|
private final NestInChild childNest = new NestInChild(); |
||||||
|
|
||||||
|
public long getLongValue() { |
||||||
|
return this.longValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLongValue(long longValue) { |
||||||
|
this.longValue = longValue; |
||||||
|
} |
||||||
|
|
||||||
|
public NestInChild getChildNest() { |
||||||
|
return this.childNest; |
||||||
|
} |
||||||
|
|
||||||
|
public static class NestInChild { |
||||||
|
|
||||||
|
private boolean boolValue; |
||||||
|
|
||||||
|
private int intValue; |
||||||
|
|
||||||
|
public boolean isBoolValue() { |
||||||
|
return this.boolValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBoolValue(boolean boolValue) { |
||||||
|
this.boolValue = boolValue; |
||||||
|
} |
||||||
|
|
||||||
|
public int getIntValue() { |
||||||
|
return this.intValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIntValue(int intValue) { |
||||||
|
this.intValue = intValue; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,28 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-2022 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.configurationsample.inheritance; |
||||||
|
|
||||||
|
import org.springframework.boot.configurationsample.ConfigurationProperties; |
||||||
|
|
||||||
|
public class ChildPropertiesConfig { |
||||||
|
|
||||||
|
@ConfigurationProperties(prefix = "inheritance") |
||||||
|
public ChildProperties childConfig() { |
||||||
|
return new ChildProperties(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,36 @@ |
|||||||
|
package org.springframework.boot.configurationsample.inheritance; |
||||||
|
|
||||||
|
public class OverrideChildProperties extends BaseProperties { |
||||||
|
|
||||||
|
private long longValue; |
||||||
|
|
||||||
|
private final CustomNest nest = new CustomNest(); |
||||||
|
|
||||||
|
public long getLongValue() { |
||||||
|
return this.longValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLongValue(long longValue) { |
||||||
|
this.longValue = longValue; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CustomNest getNest() { |
||||||
|
return this.nest; |
||||||
|
} |
||||||
|
|
||||||
|
public static class CustomNest extends Nest { |
||||||
|
|
||||||
|
private long longValue; |
||||||
|
|
||||||
|
public long getLongValue() { |
||||||
|
return this.longValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLongValue(long longValue) { |
||||||
|
this.longValue = longValue; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,28 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-2022 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.configurationsample.inheritance; |
||||||
|
|
||||||
|
import org.springframework.boot.configurationsample.ConfigurationProperties; |
||||||
|
|
||||||
|
public class OverrideChildPropertiesConfig { |
||||||
|
|
||||||
|
@ConfigurationProperties(prefix = "inheritance") |
||||||
|
public OverrideChildProperties overrideChildProperties() { |
||||||
|
return new OverrideChildProperties(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue