auphong2707/dl4se-code-review-dataset huggingface dataset:
Source:
<code>public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } MessageInfo that = (MessageInfo) o; return size == that.size && expirationTimeInMs == that.expirationTimeInMs && isDeleted == that.isDeleted && isTtlUpdated == that.isTtlUpdated && accountId == that.accountId && containerId == that.containerId && operationTimeMs == that.operationTimeMs && Objects.equals(key, that.key) <START> && updateVersion == that.updateVersion && Objects.equals(crc, that.crc); <END> }</code><technical_language>please update hashCode method</technical_language>

Target:
public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } MessageInfo that = (MessageInfo) o; return size == that.size && expirationTimeInMs == that.expirationTimeInMs && isDeleted == that.isDeleted && isTtlUpdated == that.isTtlUpdated && isUndeleted == that.isUndeleted && accountId == that.accountId && containerId == that.containerId && operationTimeMs == that.operationTimeMs && Objects.equals(key, that.key) && lifeVersion == that.lifeVersion && Objects.equals(crc, that.crc); }
Source:
<code>public S notPropagatedHeaders(String... headerPatterns) { assertHandler(); if (this.handler instanceof AbstractMessageProducingHandler) { ((AbstractMessageProducingHandler) this.handler).setNotPropagatedHeaders(headerPatterns); } else { <START> logger.warn("'async' can be applied only for AbstractMessageProducingHandler"); <END> } return _this(); }</code><technical_language>Log statement is incorrect</technical_language>

Target:
public S notPropagatedHeaders(String... headerPatterns) { assertHandler(); if (this.handler instanceof AbstractMessageProducingHandler) { ((AbstractMessageProducingHandler) this.handler).setNotPropagatedHeaders(headerPatterns); } else { this.logger.warn("'headerPatterns' can be applied only for AbstractMessageProducingHandler"); } return _this(); }
Source:
<code>public int execute(AtlasDbServices services) { if (epochTime == null) { throw new IllegalArgumentException("Required option '-e' is missing"); } if (epochTime < 0) { throw new IllegalArgumentException("Option '-e' should be a positive long, as epoch time" + " is never negative."); } Date date = new Date(epochTime); <START> printer.info("Input in epoch millis is {}", <END> SafeArg.of("epochMillis", epochTime), SafeArg.of("date", date)); KeyValueService keyValueService = services.getKeyValueService(); PuncherStore puncherStore = KeyValueServicePuncherStore.create(keyValueService, false); Long value = puncherStore.get(epochTime); printer.info("The first timestamp before is {}", SafeArg.of("date", date), SafeArg.of("timestamp", value)); return 0; }</code><technical_language>I logging this avoid people pasting in wrong value. I prefer Joda's DateTime class java.time.*. include timezone here</technical_language>

Target:
public int execute(AtlasDbServices services) { if (epochTime == null) { throw new IllegalArgumentException("Required option '-e' is missing"); } if (epochTime < 0) { throw new IllegalArgumentException("Option '-e' should be a positive long, as epoch time" + " is never negative."); } Instant epochTimeInstant = Instant.ofEpochSecond(epochTime); ZonedDateTime date = ZonedDateTime.ofInstant(epochTimeInstant, ZoneId.systemDefault()); printer.info("Input in epoch millis is {}", SafeArg.of("epochMillis", epochTime), SafeArg.of("date", date.toString())); KeyValueService keyValueService = services.getKeyValueService(); PuncherStore puncherStore = KeyValueServicePuncherStore.create(keyValueService, false); Long value = puncherStore.get(epochTime); printer.info("The first timestamp before is {}", SafeArg.of("date", date.toString()), SafeArg.of("timestamp", value)); return 0; }
Source:
<code>protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { drawBackground(BACKGROUND); drawContainerName(); <START> SmelteryTank liquids = tinkerTank.getTank(); <END> if(liquids.getFluidAmount() > 0) { int capacity = Math.max(liquids.getFluidAmount(), liquids.getCapacity()); int[] heights = calcLiquidHeights(liquids.getFluids(), capacity); int x = 8 + guiLeft; int y = 16 + scala.h + guiTop; int w = scala.w; for(int i = 0; i < heights.length; i++) { int h = heights[i]; FluidStack liquid = liquids.getFluids().get(i); RenderUtil.renderTiledFluid(x, y - h, w, h, this.zLevel, liquid); y -= h; } } }</code><technical_language>Duplicate code</technical_language>

Target:
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { drawBackground(BACKGROUND); drawContainerName(); GuiUtil.drawGuiTank(tinkerTank.getTank(), 8 + guiLeft, 16 + guiTop, scala.w, scala.h, this.zLevel); }
Source:
<code>private static Appendable writeComplexProps(Appendable o, Schema s) throws IOException { if (s.getDoc() !=null && !s.getDoc().isEmpty()) o.append(",\"doc\":\"").append(s.getDoc()).append("\""); <START> if (s.getAliases() !=null && !s.getAliases().isEmpty()) o.append(",\"aliases\":").append(JacksonUtils.toJsonNode(s.getAliases()).toString()); <END> return o; }</code><technical_language>values for aliases sorted outputting canonical? I order is important in schema. sorting, versions of schema differ in order of aliases considered canonical schemas</technical_language>

Target:
private static Appendable writeComplexProps(Appendable o, Schema s) throws IOException { if (s.getDoc() != null && !s.getDoc().isEmpty()) o.append(",\"doc\":\"").append(s.getDoc()).append("\""); if (s.getAliases() != null && !s.getAliases().isEmpty()) o.append(",\"aliases\":").append(JacksonUtils.toJsonNode(new TreeSet<String>(s.getAliases())).toString()); return o; }
Source:
<code>public void populateDAG(DAG dag, Configuration conf) { <START> InputDataGeneratorOperator modifier = dag.addOperator("datagenerator", new InputDataGeneratorOperator()); <END> DelimitedParserModule parser = dag.addModule("delimitedParser", new DelimitedParserModule()); VerifierOperator verifier = dag.addOperator("verifier", new VerifierOperator()); dag.addStream("input", modifier.output, parser.input).setLocality(Locality.THREAD_LOCAL); dag.addStream("parsedObject", parser.parsedData, verifier.parsedObject); dag.addStream("pojo", parser.pojo, verifier.pojo); dag.addStream("error", parser.error, verifier.error); }</code><technical_language>is input generator called modifier?</technical_language>

Target:
public void populateDAG(DAG dag, Configuration conf) { InputDataGeneratorOperator datagenerator = dag.addOperator("datagenerator", new InputDataGeneratorOperator()); DelimitedParserModule parser = dag.addModule("delimitedParser", new DelimitedParserModule()); VerifierOperator verifier = dag.addOperator("verifier", new VerifierOperator()); dag.addStream("input", datagenerator.output, parser.input).setLocality(Locality.THREAD_LOCAL); dag.addStream("parsedObject", parser.parsedData, verifier.parsedObject); dag.addStream("pojo", parser.pojo, verifier.pojo); dag.addStream("error", parser.error, verifier.error); }
Source:
<code>public void characters(String text) { assertOpenBlock(); try { for (int x = 0; x < text.length(); ++x) { char c = text.charAt(x); switch (c) { <START> case '\u00A0':// &nbsp; <END> currentBlock.write(' '); break; case '\u00A9': currentBlock.write("(c)");break; case '\u00AE': currentBlock.write("(r)");break; default: currentBlock.write(c); break; } } } catch (IOException e) { throw new RuntimeException(e); } }</code><technical_language>this needs tests</technical_language>

Target:
public void characters(String text) { assertOpenBlock(); try { for (int x = 0; x < text.length(); ++x) { char c = text.charAt(x); currentBlock.write(c); } } catch (IOException e) { throw new RuntimeException(e); } }
Source:
<code>public void testDummyTransport() throws Exception { PDU pdu = makePdu(); <START> LOG.debug(SnmpUtils.getHexString(Snmp4JUtils.convertPduToBytes(InetAddressUtils.ONE_TWENTY_SEVEN, 162, "hello", pdu))); <END> }</code><technical_language>assert here</technical_language>

Target:
public void testDummyTransport() throws Exception { PDU pdu = makePdu(); byte[] bytes = Snmp4JUtils.convertPduToBytes(InetAddressUtils.ONE_TWENTY_SEVEN, 162, "hello", pdu); LOG.debug(SnmpUtils.getHexString(bytes)); assertTrue(Bytes.indexOf(bytes, new byte[] { (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o'}) >= 0); assertTrue(Bytes.indexOf(bytes, new byte[] { 127, 0, 0, 1 }) >= 0); assertTrue(Bytes.indexOf(bytes, new byte[] { 127, 0, 10, 1 }) < 0); assertTrue(Bytes.indexOf(bytes, new byte[] { (byte)'T', (byte)'r', (byte)'a', (byte)'p', (byte)' ', (byte)'M', (byte)'s', (byte)'g', (byte)' ', (byte)'v', (byte)'2', (byte)'-', (byte)'1' }) >= 0); }
Source:
<code>private OsinfoResources matchFirstResourcesByArch(String cpuArch, OsinfoResourcesList resources) { if (resources == null || cpuArch == null) { return null; } <START> for (int i = 0; i < lib.osinfo_list_get_length(resources.parent_instance); i++) { <END> OsinfoEntity entity = lib.osinfo_list_get_nth(resources.parent_instance, i); String architecure = getResourceArchitecture(entity); if (cpuArch.equalsIgnoreCase(architecure)) { return new OsinfoResources(entity, null); } } return null; }</code><technical_language>understand generate build time, matter</technical_language>

Target:
private Pointer matchFirstResourcesByArch(String cpuArch, OsinfoResourcesList resources) { if (resources == null || cpuArch == null) { return null; } for (int i = 0; i < lib.osinfo_list_get_length(resources.osList); i++) { Pointer osinfoEntity = lib.osinfo_list_get_nth(resources.osList, i); String architecure = getResourceArchitecture(osinfoEntity); if (cpuArch.equalsIgnoreCase(architecure)) { return osinfoEntity; } } return null; }
Source:
<code>public static byte[] randomByteArray(Random random, int length) { byte[] result = new byte[length]; for (int k = 0; k < length; k++) { <START> result[k] = (byte) random.nextInt(); <END> } return result; }</code><technical_language>I j.u.Random generate a random byte array own</technical_language>

Target:
public static byte[] randomByteArray(Random random, int length) { byte[] result = new byte[length]; random.nextBytes(result); return result; }
Source:
<code>public void updateUI() { String name = "Visualizer View"; String description = "Displays visualizations of launches."; if (m_viewer != null) { name = m_viewer.getVisualizerDisplayName(); String secondaryId = this.getViewSite().getSecondaryId(); if (secondaryId != null) { name += " <" + PinCloneUtils.decodeClonedPartSecondaryId(secondaryId) +">"; <START> } <END> description = m_viewer.getVisualizerDescription(); } setTabName(name); setTabDescription(description); if (m_viewer != null) { IActionBars actionBars = getViewSite().getActionBars(); IToolBarManager toolBarManager = actionBars.getToolBarManager(); toolBarManager.removeAll(); m_viewer.populateToolBar(toolBarManager); toolBarManager.add(m_openNewViewAction); toolBarManager.update(true); IMenuManager menuManager = actionBars.getMenuManager(); menuManager.removeAll(); m_viewer.populateMenu(menuManager); menuManager.update(true); actionBars.updateActionBars(); } }</code><technical_language>This behavior feels generally useful, standardized in case elsewhere, I add a utility class somewhere, e.g. add org.eclipse.cdt.visualizer.ui.util.EclipseUtils class defines methods write this as: EclipseUtils.addViewSecondaryID(view, EclipseUtils.getPinCloneSecondaryID(view))</technical_language>

Target:
public void updateUI() { String name = "Visualizer View"; String description = "Displays visualizations of launches."; if (m_viewer != null) { name = m_viewer.getVisualizerDisplayName(); description = m_viewer.getVisualizerDescription(); } setTabName(name); PinCloneUtils.setPartTitle(this); setTabDescription(description); if (m_viewer != null) { IActionBars actionBars = getViewSite().getActionBars(); IToolBarManager toolBarManager = actionBars.getToolBarManager(); toolBarManager.removeAll(); m_viewer.populateToolBar(toolBarManager); toolBarManager.add(m_openNewViewAction); toolBarManager.update(true); IMenuManager menuManager = actionBars.getMenuManager(); menuManager.removeAll(); m_viewer.populateMenu(menuManager); menuManager.update(true); actionBars.updateActionBars(); } }
Source:
<code>private void initSnapshotWork(final Object[] procParams) { final String procedureName = "@SnapshotRestore"; StoredProcedureInvocation spi = new StoredProcedureInvocation(); spi.setProcName(procedureName); spi.params = new FutureTask<ParameterSet>(new Callable<ParameterSet>() { @Override public ParameterSet call() throws Exception { ParameterSet params = ParameterSet.fromArrayWithCopy(procParams); return params; } }); spi.setClientHandle(m_restoreAdapter.registerCallback(m_clientAdapterCallback)); <START> ClientResponseImpl cr = m_initiator.dispatch(spi, m_restoreAdapter, true, Check.NO_INVOCATION); <END> if (cr != null) { m_clientAdapterCallback.handleResponse(cr); } }</code><technical_language>if cluster recovers in admin mode, if user permissions set up</technical_language>

Target:
private void initSnapshotWork(final Object[] procParams) { final String procedureName = "@SnapshotRestore"; StoredProcedureInvocation spi = new StoredProcedureInvocation(); spi.setProcName(procedureName); spi.params = new FutureTask<ParameterSet>(new Callable<ParameterSet>() { @Override public ParameterSet call() throws Exception { ParameterSet params = ParameterSet.fromArrayWithCopy(procParams); return params; } }); spi.setClientHandle(m_restoreAdapter.registerCallback(m_clientAdapterCallback)); ClientResponseImpl cr = m_initiator.dispatch(spi, m_restoreAdapter, true, OverrideCheck.INVOCATION); if (cr != null) { m_clientAdapterCallback.handleResponse(cr); } }
Source:
<code>public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getFirstTarget()); if (player == null || player.getHand().isEmpty()) { return false; } TargetCard target = new TargetDiscard(player.getId()); <START> player.choose(Outcome.Detriment, player.getHand(), target, game); <END> Cards cards = player.getHand().copy(); cards.removeIf(target.getTargets()::contains); return !player.discard(cards, source, game).isEmpty(); }</code><technical_language>Outcome.Benefit good card</technical_language>

Target:
public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getFirstTarget()); if (player == null || player.getHand().isEmpty()) { return false; } TargetCard target = new TargetDiscard(player.getId()); player.choose(Outcome.Benefit, player.getHand(), target, game); Cards cards = player.getHand().copy(); cards.removeIf(target.getTargets()::contains); return !player.discard(cards, source, game).isEmpty(); }
Source:
<code>public void flush(final String value) { String actualValue = value != null && value.isEmpty() ? null : value; if (scenarioGridCell != null) { <START> String cellValue = scenarioGridCell.getValue().getValue(); <END> if (Objects.equals(actualValue, cellValue)) { return; } } internalFlush(actualValue); }</code><technical_language>@jomarko removing line? I remember times I put for some reason, if is needed; anyway, point time if ScenarioGridCell.editingMode is "true", editing start. press "enter" end editing, "flush" method invoked, cell editable again</technical_language>

Target:
public void flush(final String value) { String actualValue = value != null && value.isEmpty() ? null : value; if (scenarioGridCell != null) { scenarioGridCell.setEditingMode(false); String cellValue = scenarioGridCell.getValue().getValue(); if (Objects.equals(actualValue, cellValue)) { return; } } internalFlush(actualValue); }
Source:
<code>private static void printConfigurationInfo() throws IOException { log.info("Executing as " + System.getProperty("user.name") + '@' + InetAddress.getLocalHost().getHostName() + " on " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ' ' + System.getProperty("os.arch") + "; " + System.getProperty("java.vm.name") + ' ' + System.getProperty("java.runtime.version") + ' ' + (DeflaterFactory.usingIntelDeflater() ? "IntelDeflater" : "JdkDeflater")); log.info("CREATE_INDEX:" + Defaults.CREATE_INDEX + ' ' + "CREATE_MD5:" + Defaults.CREATE_MD5 + ' ' + "USE_ASYNC_IO_FOR_SAMTOOLS:" + Defaults.USE_ASYNC_IO_FOR_SAMTOOLS + ' ' + "BUFFER_SIZE:" + Defaults.BUFFER_SIZE + ' ' + "COMPRESSION_LEVEL:" + Defaults.COMPRESSION_LEVEL + <START> ' ' + "NON_ZERO_BUFFER_SIZE:" + Defaults.NON_ZERO_BUFFER_SIZE + <END> ' ' + "CUSTOM_READER_FACTORY:" + Defaults.CUSTOM_READER_FACTORY); }</code><technical_language>I feel a Defaults.toString() similar for this sort of thing..</technical_language>

Target:
private static void printConfigurationInfo() throws IOException { log.info("Executing as " + System.getProperty("user.name") + '@' + InetAddress.getLocalHost().getHostName() + " on " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ' ' + System.getProperty("os.arch") + "; " + System.getProperty("java.vm.name") + ' ' + System.getProperty("java.runtime.version") + ' ' + (DeflaterFactory.usingIntelDeflater() ? "IntelDeflater" : "JdkDeflater")); final List<String> list = Defaults.allDefaults().entrySet().stream().map(e -> e.getKey() + ':' + e.getValue()).collect(Collectors.toList()); log.info(String.join(" ", list)); }
Source:
<code>public String deconstructSearchQuery(String searchQuery) { ArrayList<String> features = new ArrayList<>(); for (SearchQueryFeature f : SearchQueryFeature.values()) { if (f.getPattern().matcher(searchQuery).find()) { features.add(f.getDescription()); } } int doubleQuotesCount = 0; <START> Matcher doubleQuotesMatcher = Pattern.compile("\\\"").matcher(searchQuery); <END> while (doubleQuotesMatcher.find()) doubleQuotesCount++; if (doubleQuotesCount > 0) { if (doubleQuotesCount == 1) { features.add("has one double quote"); } features.add((doubleQuotesCount % 2) == 0 ? "has even double quotes" : "has odd double quotes"); } if (features.size() == 0) { features.add("is simple"); } return features.toString(); }</code><technical_language>contains() similar avoid massively-escaped regexes</technical_language>

Target:
public String deconstructSearchQuery(String searchQuery) { ArrayList<String> features = new ArrayList<>(); for (SearchQueryFeature f : SearchQueryFeature.values()) { if (f.getPattern().matcher(searchQuery).find()) { features.add(f.getDescription()); } } int doubleQuotesCount = 0; for (int i = 0; i < searchQuery.length(); i++) { if (searchQuery.substring(i, i + 1).contains("\"")) { doubleQuotesCount++; } } if (doubleQuotesCount > 0) { if (doubleQuotesCount == 1) { features.add("has one double quote"); } features.add((doubleQuotesCount % 2) == 0 ? "has even double quotes" : "has odd double quotes"); } if (features.size() == 0) { features.add("is simple"); } return features.toString(); }
Source:
<code>public ServiceResponse<Map<String, String>> readRunInfo() { <START> Map<String, String> cfgMap = new LinkedHashMap<>(2); <END> cfgMap.put("host", hostname); cfgMap.put("started", startTime.toString()); return ServiceResponse.serveView(cfgMap); }</code><technical_language>If cfgMap updated, I suggest a com.google.common.collect.ImmutableMap, a LinkedHashMap. For example: Map<String, String> cfgMap = ImmutableMap.of( "host", hostname, "started", startTime.toString());</technical_language>

Target:
public ServiceResponse<Map<String, String>> readRunInfo() { Map<String, String> cfgMap = ImmutableMap.of("host", hostname, "started", startTime.toString()); return ServiceResponse.serveView(cfgMap); }
Source:
<code>private void refreshProjectTree(final IProject project) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed()) return; Object firstItem = null; if (viewer instanceof TreeViewer) { if( ((TreeViewer) viewer).getTree().getItemCount() <= 0) { return; } else { firstItem = ((TreeViewer) viewer).getTree().getItem(0).getData(); } } else if (viewer instanceof TableViewer) { if( ((TableViewer) viewer).getTable().getItemCount() <= 0) { <START> viewer.refresh(project); <END> return; } else { firstItem = ((TableViewer) viewer).getTable().getItem(0).getData(); } } IContainer parentContainer = null; boolean isDrilledDown = !(firstItem instanceof IProject); if (!isDrilledDown) { viewer.refresh(project); } else { if (firstItem instanceof IResource) { parentContainer = ((IResource) firstItem).getParent(); } else if (firstItem instanceof TargetSourceContainer) { parentContainer = ((TargetSourceContainer) firstItem).getContainer().getParent(); } else if (firstItem instanceof IMakeTarget) { parentContainer = ((IMakeTarget) firstItem).getContainer(); } if (parentContainer != null && project.equals(parentContainer.getProject())) { viewer.refresh(); } } } }); }</code><technical_language>This wrong here, project is in table, targets in this case. viewer refreshed. If I test this change is, table updated, if I change viewer.refresh() table update</technical_language>

Target:
private void refreshProjectTree(final IProject project) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed()) return; Object firstItem = null; if (viewer instanceof TreeViewer) { if( ((TreeViewer) viewer).getTree().getItemCount() <= 0) { return; } else { firstItem = ((TreeViewer) viewer).getTree().getItem(0).getData(); } } else if (viewer instanceof TableViewer) { if( ((TableViewer) viewer).getTable().getItemCount() <= 0) { viewer.refresh(); return; } else { firstItem = ((TableViewer) viewer).getTable().getItem(0).getData(); } } IContainer parentContainer = null; boolean isDrilledDown = !(firstItem instanceof IProject); if (!isDrilledDown) { viewer.refresh(project); } else { if (firstItem instanceof IResource) { parentContainer = ((IResource) firstItem).getParent(); } else if (firstItem instanceof TargetSourceContainer) { parentContainer = ((TargetSourceContainer) firstItem).getContainer().getParent(); } else if (firstItem instanceof IMakeTarget) { parentContainer = ((IMakeTarget) firstItem).getContainer(); } if (parentContainer != null && project.equals(parentContainer.getProject())) { viewer.refresh(); } } } }); }
Source:
<code>public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ACTIVITY_REQUEST_ADD_A_LANGUAGE_FROM_SEARCH) { int position = 0; <START> finalLanguageList = StringUtil.listToJsonArrayString(app.language().getAppLanguageCodes()); <END> if (!finalLanguageList.equals(initialLanguageList)) { requireActivity().setResult(RESULT_LANG_CHANGED); } if (data != null && data.hasExtra(ACTIVITY_RESULT_LANG_POSITION_DATA)) { position = data.getIntExtra(ACTIVITY_RESULT_LANG_POSITION_DATA, 0); } else if (app.language().getAppLanguageCodes().contains(searchLanguageCode)) { position = app.language().getAppLanguageCodes().indexOf(searchLanguageCode); } searchResultsFragment.clearSearchResultsCountCache(); Prefs.setSelectedLanguagePositionInSearch(position); } }</code><technical_language>finalLanguageList a local variable</technical_language>

Target:
public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ACTIVITY_REQUEST_ADD_A_LANGUAGE_FROM_SEARCH) { int position = 0; String finalLanguageList = StringUtil.listToJsonArrayString(app.language().getAppLanguageCodes()); if (!finalLanguageList.equals(initialLanguageList)) { requireActivity().setResult(RESULT_LANG_CHANGED); } if (data != null && data.hasExtra(ACTIVITY_RESULT_LANG_POSITION_DATA)) { position = data.getIntExtra(ACTIVITY_RESULT_LANG_POSITION_DATA, 0); } else if (app.language().getAppLanguageCodes().contains(searchLanguageCode)) { position = app.language().getAppLanguageCodes().indexOf(searchLanguageCode); } searchResultsFragment.clearSearchResultsCountCache(); Prefs.setSelectedLanguagePositionInSearch(position); } }
Source:
<code>public final void run() { try (FlowScopeLog log = new FlowScopeLogBuilder(LOGGER, Level.FINE, "TimeGraphView:ZoomThread", "start", fZoomStartTime, "end", fZoomEndTime).setCategoryAndId(getViewId(), fScopeId).build()) { doRun(); } finally { <START> fDirty.incrementAndGet(); <END> } }</code><technical_language>decrementAndGet()</technical_language>

Target:
public final void run() { try (FlowScopeLog log = new FlowScopeLogBuilder(LOGGER, Level.FINE, "TimeGraphView:ZoomThread", "start", fZoomStartTime, "end", fZoomEndTime).setCategoryAndId(getViewId(), fScopeId).build()) { doRun(); } finally { if (fDirty.decrementAndGet() < 0) { Activator.getDefault().logError(DIRTY_UNDERFLOW_ERROR, new Throwable()); } } }
Source:
<code>public static ScalarFunction getFloorExpression(List<Expression> children) throws SQLException { final Expression firstChild = children.get(0); final PDataType firstChildDataType = firstChild.getDataType(); <START> if(firstChildDataType.isCoercibleTo(PDataType.DATE) || firstChildDataType == PDataType.TIMESTAMP) { <END> return new FloorDateExpression(children); } else if(firstChildDataType.isCoercibleTo(PDataType.DECIMAL)) { return new FloorDecimalExpression(children); } else { throw new TypeMismatchException(firstChildDataType, "1"); } }</code><technical_language>Change this firstChildDataType.isCoercibleTo(PDataType.TIMESTAMP) DATE & TIME coercible TIMESTAMP. UNSIGNED_TIMESTAMP</technical_language>

Target:
public static ScalarFunction getFloorExpression(List<Expression> children) throws SQLException { final Expression firstChild = children.get(0); final PDataType firstChildDataType = firstChild.getDataType(); if(firstChildDataType.isCoercibleTo(PDataType.DATE) || firstChildDataType == PDataType.TIMESTAMP || firstChildDataType == PDataType.UNSIGNED_TIMESTAMP) { return new FloorDateExpression(children); } else if(firstChildDataType.isCoercibleTo(PDataType.DECIMAL)) { return new FloorDecimalExpression(children); } else { throw new TypeMismatchException(firstChildDataType, "1"); } }
Source:
<code>private void displayAppStateMetadata(int stateKey) { TextView metaDataView = (TextView) findViewById(R.id.text_metadata); <START> metaDataView.setText(""); <END> String metadataStr = "Source: Cloud Save" + '\n' + "State Key: " + stateKey; metaDataView.setText(metadataStr); }</code><technical_language>Do need call setText here? is set a couple lines later</technical_language>

Target:
private void displayAppStateMetadata(int stateKey) { TextView metaDataView = (TextView) findViewById(R.id.text_metadata); String metadataStr = "Source: Cloud Save" + '\n' + "State Key: " + stateKey; metaDataView.setText(metadataStr); }
Source:
<code>private void updateBackup() { if (getCurrentStorageItem() != null && getAvailableStorageTypeItems().getSelectedItem() != null) { boolean isStorageDomainUnattached = getDataCenter().getSelectedItem().getId().equals(UnassignedDataCenterId); if (isStorageDomainUnattached) { if (getCurrentStorageItem().getRole().isDataDomain()) { <START> getBackup().setIsAvailable(true); <END> getBackup().setEntity(isNewStorage() ? false : getStorage().isBackup()); return; } else { getBackup().setIsAvailable(false); getBackup().setEntity(false); return; } } if (getCurrentStorageItem().getRole() == StorageDomainType.ISO || getCurrentStorageItem().getRole() == StorageDomainType.ImportExport) { getBackup().setIsAvailable(false); getBackup().setEntity(false); return; } else { boolean backupSupported = (Boolean) AsyncDataProvider.getInstance().getConfigValuePreConverted( ConfigValues.BackupSupported, getDataCenter().getSelectedItem().getCompatibilityVersion().toString()); getBackup().setIsAvailable(backupSupported); getBackup().setEntity(isNewStorage() ? false : getStorage().isBackup()); return; } } getBackup().setIsAvailable(false); getBackup().setEntity(false); return; }</code><technical_language>if u want display checkbox fine</technical_language>

Target:
private void updateBackup() { if (getCurrentStorageItem() != null && getAvailableStorageTypeItems().getSelectedItem() != null) { boolean isStorageDomainUnattached = getDataCenter().getSelectedItem().getId().equals(UnassignedDataCenterId); if (isStorageDomainUnattached) { if (getCurrentStorageItem().getRole().isDataDomain()) { getBackup().setIsAvailable(true); getBackup().setEntity(isNewStorage() ? false : getStorage().isBackup()); } else { getBackup().setIsAvailable(false); getBackup().setEntity(false); } return; } if (getCurrentStorageItem().getRole() == StorageDomainType.ISO || getCurrentStorageItem().getRole() == StorageDomainType.ImportExport) { getBackup().setIsAvailable(false); getBackup().setEntity(false); } else { boolean backupSupported = (Boolean) AsyncDataProvider.getInstance().getConfigValuePreConverted( ConfigValues.BackupSupported, getDataCenter().getSelectedItem().getCompatibilityVersion().toString()); getBackup().setIsAvailable(backupSupported); getBackup().setEntity(isNewStorage() ? false : getStorage().isBackup()); } return; } else { getBackup().setIsAvailable(false); getBackup().setEntity(false); } return; }
Source:
<code>public SharkCollisionBehaviour(Displayable me) { super(); this.handler = new OnCollisionPlayerLosesComponent(me, new OnCollisionIncreaseSizeComponent(me, new OnCollisionIncreaseAmmunitionComponent(me, new OnCollisionHighScoreIncrementComponent( <START> new OnCollisionEatenCompomnentLeaf( <END> new DefaultCompomnentLeaf()))))); }</code><technical_language>eatenCompo(m)nentLeaf</technical_language>

Target:
public SharkCollisionBehaviour(Displayable me) { super(); this.handler = new OnCollisionPlayerLosesComponent(me, new OnCollisionIncreaseSizeComponent(me, new OnCollisionIncreaseAmmunitionComponent(me, new OnCollisionHighScoreIncrementComponent( new OnCollisionEatenComponentLeaf( new DefaultComponentLeaf()))))); }
Source:
<code>private String[][] getAvailableMergeStrategies() { org.eclipse.egit.core.Activator coreActivator = org.eclipse.egit.core.Activator .getDefault(); List<String[]> strategies = new ArrayList<>(); strategies.add(new String[] { UIText.GitPreferenceRoot_defaultMergeStrategyLabel, GitCorePreferences.core_preferredMergeStrategy_Default }); for (MergeStrategyDescriptor strategy : coreActivator .getRegisteredMergeStrategies()) { strategies.add(new String[] { strategy.getLabel(), strategy.getName() }); } <START> return strategies.toArray(new String[0][2]); <END> }</code><technical_language>This I find highly confusing</technical_language>

Target:
private String[][] getAvailableMergeStrategies() { org.eclipse.egit.core.Activator coreActivator = org.eclipse.egit.core.Activator .getDefault(); List<String[]> strategies = new ArrayList<>(); strategies.add(new String[] { UIText.GitPreferenceRoot_defaultMergeStrategyLabel, GitCorePreferences.core_preferredMergeStrategy_Default }); for (MergeStrategyDescriptor strategy : coreActivator .getRegisteredMergeStrategies()) { strategies.add(new String[] { strategy.getLabel(), strategy.getName() }); } return strategies.toArray(new String[0][0]); }
Source:
<code>private void handleInternalLink(PageTitle title) { if (!isAdded()) { return; } if (referenceDialog != null && referenceDialog.isShowing()) { referenceDialog.dismiss(); } <START> LinkPreviewFunnel linkPreviewFunnel = new LinkPreviewFunnel(app, title); <END> if (app.getReleaseType() == WikipediaApp.RELEASE_PROD || LinkPreviewVersion.getVersion(app) == 0) { HistoryEntry historyEntry = new HistoryEntry(title, HistoryEntry.SOURCE_INTERNAL_LINK); ((PageActivity) getActivity()).displayNewPage(title, historyEntry); linkPreviewFunnel.logNavigate(); } else { LinkPreviewDialog dialog = LinkPreviewDialog.newInstance(title, LinkPreviewVersion.getVersion(app)); dialog.show(getActivity().getSupportFragmentManager(), "link_preview_dialog"); } }</code><technical_language>move this constructor if block need in else block</technical_language>

Target:
private void handleInternalLink(PageTitle title) { if (!isAdded()) { return; } if (referenceDialog != null && referenceDialog.isShowing()) { referenceDialog.dismiss(); } if (app.getReleaseType() == WikipediaApp.RELEASE_PROD || LinkPreviewVersion.getVersion(app) == 0) { HistoryEntry historyEntry = new HistoryEntry(title, HistoryEntry.SOURCE_INTERNAL_LINK); ((PageActivity) getActivity()).displayNewPage(title, historyEntry); new LinkPreviewFunnel(app, title).logNavigate(); } else { LinkPreviewDialog dialog = LinkPreviewDialog.newInstance(title, LinkPreviewVersion.getVersion(app)); dialog.show(getActivity().getSupportFragmentManager(), "link_preview_dialog"); } }
Source:
<code>public <U> TableElement<U> map(Function<? super T, ? extends U> mapper) { <START> return new CheckConstraint(name, expression, expressionStr); <END> }</code><technical_language>suggestion return new CheckConstraint<>(name, mapper.apply(expression), expressionStr);</technical_language>

Target:
public <U> TableElement<U> map(Function<? super T, ? extends U> mapper) { return new CheckConstraint<>(name, columnName, mapper.apply(expression), expressionStr); }
Source:
<code>public TestSession getNewSession(Map<String, Object> requestedCapability) { LOGGER.entering(); if (totalSessionsStarted >= maxSessionsAllowed || forceShutDown) { return logSessionInfo(); } synchronized (this) { <START> if (totalSessionsStarted >= maxSessionsAllowed || forceShutDown) { <END> return logSessionInfo(); } TestSession session = super.getNewSession(requestedCapability); if (session != null) { totalSessionsStarted++; if (totalSessionsStarted >= maxSessionsAllowed) { startNodeRecycleThread(); } proxyLogger.fine("Beginning session #" + totalSessionsStarted + " (" + session.toString() + ")"); } LOGGER.exiting((session != null) ? session.toString() : null); return session; } }</code><technical_language>intend leave this if test here? do get return</technical_language>

Target:
public TestSession getNewSession(Map<String, Object> requestedCapability) { LOGGER.entering(); if (totalSessionsStarted >= maxSessionsAllowed || forceShutDown) { return logSessionInfo(); } try { accessLock.lock(); if (totalSessionsStarted >= maxSessionsAllowed || forceShutDown) { return logSessionInfo(); } TestSession session = super.getNewSession(requestedCapability); if (session != null) { totalSessionsStarted++; if (totalSessionsStarted >= maxSessionsAllowed) { startNodeRecycleThread(); } proxyLogger.fine("Beginning session #" + totalSessionsStarted + " (" + session.toString() + ")"); } LOGGER.exiting((session != null) ? session.toString() : null); return session; } finally { accessLock.unlock(); } }
Source:
<code>public int read() throws IOException { if (this.template != null) { if (this.templateIndex < this.template.length()) { return this.template.charAt(this.templateIndex++); } if (this.templateIndex == this.template.length()) { this.template = null; this.templateIndex = 0; } } int data = this.pushbackReader.read(); if (data != '$') { return data; } data = this.pushbackReader.read(); if (data != '{') { this.pushbackReader.unread(data); return '$'; } this.templateBuffer.delete(0, this.templateBuffer.length()); data = this.pushbackReader.read(); while (data != '}') { this.templateBuffer.append((char) data); data = this.pushbackReader.read(); } this.template = this.templateResolver .resolveTemplate(this.templateBuffer.toString()); if (this.template == null) { this.template = "${" + this.templateBuffer.toString() + "}"; } if (this.template.length() == 0) { return read(); } return this.template.charAt(this.templateIndex++); <START> <END> }</code><technical_language>Unnecessary newlines</technical_language>

Target:
public int read() throws IOException { if (template != null) { if (templateIndex < template.length()) { return template.charAt(this.templateIndex++); } if (templateIndex == template.length()) { template = null; templateIndex = 0; } } int data = pushbackReader.read(); if (data != '$') { return data; } data = pushbackReader.read(); if (data != '{') { pushbackReader.unread(data); return '$'; } templateBuffer.delete(0, templateBuffer.length()); data = pushbackReader.read(); while (data != '}') { templateBuffer.append((char) data); data = pushbackReader.read(); } template = templateResolver .resolveTemplate(templateBuffer.toString()); if (template == null) { template = "${" + templateBuffer.toString() + "}"; } if (template.length() == 0) { return read(); } return template.charAt(templateIndex++); }
Source:
<code>public OauthAuthenticationResult authenticate(HttpRequest httpRequest) { RequestLocation[] locations = this.locations != null ? this.locations : new RequestLocation[]{RequestLocation.HEADER, RequestLocation.BODY}; Class httpRequestClass = httpRequest.getClass(); if (HttpServletRequest.class.isAssignableFrom(httpRequestClass)) { this.httpServletRequest = (HttpServletRequest) httpRequest; } else if (HttpRequest.class.isAssignableFrom(httpRequestClass)) { <START> this.httpServletRequest = new OauthHttpServletRequest((HttpRequest) httpRequest); <END> } else { throw new IllegalArgumentException(String.format(HTTP_REQUEST_NOT_SUPPORTED_MSG, httpRequest.getClass(), HttpRequest.class.getName(), HttpServletRequest.class.getName())); } AuthenticationRequest request; try { request = new ResourceAuthenticationRequest(httpServletRequest, locations); } catch (Exception e) { throw ApiAuthenticationExceptionFactory.newOauthException(OauthAuthenticationException.class, OauthAuthenticationException.INVALID_REQUEST); } AuthenticationResult result = application.authenticateAccount(request); Assert.isInstanceOf(OauthAuthenticationResult.class, result); return (OauthAuthenticationResult) result; }</code><technical_language>this cast is necessary, httpRequest variable is HttpRequest</technical_language>

Target:
public OauthAuthenticationResult authenticate(HttpRequest httpRequest) { RequestLocation[] locations = this.locations != null ? this.locations : new RequestLocation[]{RequestLocation.HEADER, RequestLocation.BODY}; Class httpRequestClass = httpRequest.getClass(); if (HttpServletRequest.class.isAssignableFrom(httpRequestClass)) { this.httpServletRequest = (HttpServletRequest) httpRequest; } else if (HttpRequest.class.isAssignableFrom(httpRequestClass)) { this.httpServletRequest = new OauthHttpServletRequest(httpRequest); } else { throw new IllegalArgumentException(String.format(HTTP_REQUEST_NOT_SUPPORTED_MSG, httpRequest.getClass(), HttpRequest.class.getName(), HttpServletRequest.class.getName())); } AuthenticationRequest request; try { request = new ResourceAuthenticationRequest(httpServletRequest, locations); } catch (Exception e) { throw ApiAuthenticationExceptionFactory.newOauthException(OauthAuthenticationException.class, OauthAuthenticationException.INVALID_REQUEST); } AuthenticationResult result = application.authenticateAccount(request); Assert.isInstanceOf(OauthAuthenticationResult.class, result); return (OauthAuthenticationResult) result; }
Source:
<code>public KafkaFuture<Void> all() { <START> if (removeAll()) { <END> final KafkaFutureImpl<Void> result = new KafkaFutureImpl<>(); this.future.whenComplete((memberErrors, throwable) -> { if (throwable != null) { result.completeExceptionally(throwable); } else { System.out.println("Remove all active members succeeded, removed " + memberErrors.size() + " members: " + memberErrors.keySet()); result.complete(null); } }); return result; } else { final KafkaFutureImpl<Void> result = new KafkaFutureImpl<>(); this.future.whenComplete((memberErrors, throwable) -> { if (throwable != null) { result.completeExceptionally(throwable); } else { for (MemberToRemove memberToRemove : memberInfos) { if (maybeCompleteExceptionally(memberErrors, memberToRemove.toMemberIdentity(), result)) { return; } } result.complete(null); } }); return result; } }</code><technical_language>In removeAll() mode, skip individual member removal results? I guess need verify original member list (because exist for removeAll), throw error list is valuable is unexpected failure</technical_language>

Target:
public KafkaFuture<Void> all() { final KafkaFutureImpl<Void> result = new KafkaFutureImpl<>(); this.future.whenComplete((memberErrors, throwable) -> { if (throwable != null) { result.completeExceptionally(throwable); } else { if (removeAll()) { for (Map.Entry<MemberIdentity, Errors> entry: memberErrors.entrySet()) { Exception exception = entry.getValue().exception(); if (exception != null) { Throwable ex = new KafkaException("Encounter exception when trying to remove: " + entry.getKey(), exception); result.completeExceptionally(ex); return; } } } else { for (MemberToRemove memberToRemove : memberInfos) { if (maybeCompleteExceptionally(memberErrors, memberToRemove.toMemberIdentity(), result)) { return; } } } result.complete(null); } }); return result; }
Source:
<code>public void write(JsonGenerator jg, DocumentModel document) throws IOException { jg.writeFieldName(NAME); jg.writeStartObject(); <START> Map<String, List<String>> h = (Map<String, List<String>>) document.getContextData(NAME); <END> if (h != null) { for (String field : h.keySet()) { jg.writeObjectField(field, h.get(field)); } } jg.writeEndObject(); }</code><technical_language>NAME -> HIGHLIGHT_CTX_DATA</technical_language>

Target:
public void write(JsonGenerator jg, DocumentModel document) throws IOException { jg.writeFieldName(HIGHLIGHT_CTX_DATA); jg.writeStartObject(); Map<String, List<String>> h = (Map<String, List<String>>) document.getContextData(HIGHLIGHT_CTX_DATA); if (h != null) { for (String field : h.keySet()) { jg.writeObjectField(field, h.get(field)); } } jg.writeEndObject(); }
Source:
<code>private Value getSerializableValue(Object object, Schema schema) { Value value = null; switch (schema.getType()) { case UNION: if (object != null) { int schemaPos = getUnionSchema(object, schema); Schema unionSchema = schema.getTypes().get(schemaPos); value = getSerializableValue(object, unionSchema); } break; case STRING: value = Value.get(object.toString()); break; case BYTES: value = Value.get(((ByteBuffer) object).array()); break; case MAP: Map<Object, Object> newMap = new HashMap<>(); Map<?, ?> fieldMap = (Map<?, ?>) object; <START> for (Object key : fieldMap.keySet()) { <END> newMap.put(key.toString(), getSerializableValue(fieldMap.get(key), schema.getValueType())); } value = Value.get(newMap); break; case ARRAY: List<Object> objectList = new ArrayList<>(); for (Object obj : (List<Object>) object) { objectList.add(getSerializableValue(obj, schema.getElementType())); } value = Value.get(objectList); break; default: value = Value.get(object); break; } return value; }</code><technical_language>iterate entrySet</technical_language>

Target:
private Value getSerializableValue(Object object, Schema schema) { Value value = null; switch (schema.getType()) { case UNION: if (object != null) { int schemaPos = getUnionSchema(object, schema); Schema unionSchema = schema.getTypes().get(schemaPos); value = getSerializableValue(object, unionSchema); } break; case STRING: value = Value.get(object.toString()); break; case BYTES: value = Value.get(((ByteBuffer) object).array()); break; case MAP: Map<Object, Object> newMap = new HashMap<>(); Map<?, ?> fieldMap = (Map<?, ?>) object; for (Map.Entry<?, ?> entry : fieldMap.entrySet()) { newMap.put(entry.getKey().toString(), getSerializableValue(fieldMap.get(entry.getKey()), schema.getValueType())); } value = Value.get(newMap); break; case ARRAY: List<Object> objectList = new ArrayList<>(); for (Object obj : (List<Object>) object) { objectList.add(getSerializableValue(obj, schema.getElementType())); } value = Value.get(objectList); break; default: value = Value.get(object); break; } return value; }
Source:
<code>public void notifyRcsAutoConfigurationReceived(int subId, @NonNull byte[] config, boolean isCompressed) { try { IImsConfig <START> configBinder = <END> getImsConfig(getSlotIndex(subId), ImsFeature.FEATURE_RCS); configBinder.notifyRcsAutoConfigurationReceived(config, isCompressed); } catch (RemoteException e) { Rlog.e(LOG_TAG, "fail to getImsConfig " + e.getMessage()); } }</code><technical_language>This null in some cases</technical_language>

Target:
public void notifyRcsAutoConfigurationReceived(int subId, @NonNull byte[] config, boolean isCompressed) { try { IImsConfig configBinder = getImsConfig(getSlotIndex(subId), ImsFeature.FEATURE_RCS); if (configBinder == null) { Rlog.e(LOG_TAG, "null result for getImsConfig"); } else { configBinder.notifyRcsAutoConfigurationReceived(config, isCompressed); } } catch (RemoteException e) { Rlog.e(LOG_TAG, "fail to getImsConfig " + e.getMessage()); } }
Source:
<code>public RiseTransitSet getRTS(Alloc alloc) { <START> return new RiseTransitSet(schedule.getSite(), alloc.getObs().getCoords(alloc.getVariant().getSchedule().getMiddlePoint()), alloc.getStart()); <END> }</code><technical_language>consistent pass in Long -> Coordinates function RiseTransitSet. In class is airmass function takes a time apply function get precise coordinates</technical_language>

Target:
public RiseTransitSet getRTS(Alloc alloc) { return new RiseTransitSet(schedule.getSite(), alloc.getObs()::getCoords, alloc.getStart()); }
Source:
<code>private void run() { suspended.compareAndSet(true, false); running.compareAndSet(false, true); outer: while (running.get()) { try { WatchKey watchKey = service.take(); Path dir; synchronized (keys) { dir = keys.get(watchKey); } if (dir == null) { resetAndRemove(watchKey, dir); LOG.debug("Reported directory is not registered - skipping."); continue; } <START> for (List<WatchEvent<?>> watchEvents = watchKey.pollEvents(); <END> !watchEvents.isEmpty(); watchEvents = watchKey.pollEvents()) { if (suspended.get()) { resetAndRemove(watchKey, dir); LOG.debug("File watchers are running in suspended mode - skipping."); continue outer; } for (WatchEvent<?> event : watchEvents) { Kind<?> kind = event.kind(); if (kind == OVERFLOW) { LOG.warn("Detected file system events overflowing"); continue outer; } WatchEvent<Path> ev = cast(event); Path item = ev.context(); Path path = dir.resolve(item).toAbsolutePath(); if (excludePatternsRegistry.isExcluded(path)) { LOG.debug("Path is within exclude list, skipping..."); continue; } handler.handle(path, kind); } } resetAndRemove(watchKey, dir); } catch (InterruptedException e) { running.compareAndSet(true, false); LOG.debug( "Interruption error when running file watcher, most likely caused by stopping it", e); } catch (ClosedWatchServiceException e) { running.compareAndSet(true, false); LOG.debug("Closing watch service while some of keys may be processing", e); } } }</code><technical_language>while statement code more readable</technical_language>

Target:
private void run() { suspended.compareAndSet(true, false); running.compareAndSet(false, true); outer: while (running.get()) { try { WatchKey watchKey = service.take(); Path dir; synchronized (keys) { dir = keys.get(watchKey); } if (dir == null) { resetAndRemove(watchKey, dir); LOG.debug("Reported directory is not registered - skipping."); continue; } List<WatchEvent<?>> watchEvents = watchKey.pollEvents(); while (!watchEvents.isEmpty()) { if (suspended.get()) { resetAndRemove(watchKey, dir); LOG.debug("File watchers are running in suspended mode - skipping."); continue outer; } for (WatchEvent<?> event : watchEvents) { Kind<?> kind = event.kind(); if (kind == OVERFLOW) { LOG.warn("Detected file system events overflowing"); continue outer; } WatchEvent<Path> ev = cast(event); Path item = ev.context(); Path path = dir.resolve(item).toAbsolutePath(); if (excludePatternsRegistry.isExcluded(path)) { LOG.debug("Path is within exclude list, skipping..."); continue; } handler.handle(path, kind); } watchEvents = watchKey.pollEvents(); } resetAndRemove(watchKey, dir); } catch (InterruptedException e) { running.compareAndSet(true, false); LOG.debug( "Interruption error when running file watcher, most likely caused by stopping it", e); } catch (ClosedWatchServiceException e) { running.compareAndSet(true, false); LOG.debug("Closing watch service while some of keys may be processing", e); } } }